Board logo

标题: [Zend权威认证试题讲解]第三章 Web开发中的PHP [打印本页]

作者: admin    时间: 2008-4-4 02:25     标题: [Zend权威认证试题讲解]第三章 Web开发中的PHP

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。; n% S9 s7 N5 V+ N* k
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
% @& u- L$ r) h! Q一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。0 t0 y9 I# r5 p3 O. K8 L

6 b, p7 y! S, M: N
+ J" s) e6 ?: N! y# K( `问题
% \: g5 K8 B  t9 v" W" a8 C0 l; [
6 }$ O/ Z" j/ d4 \- S1.如何访问会话变量(session)?
/ [4 L1 A5 H  H5 i/ B- v' }4 x. Q* t" t7 g4 @4 p* |# X6 n; J* T
A.通过$_GET
$ a" B/ T" E4 D. \# CB.通过$_POST
0 `( z+ F) b2 cC.通过$_REQUEST
8 s' B5 T9 ^( bD.通过全局变量
9 j4 D/ [& F1 U( W# BE.以上都不对
, n; \& o# h# H2 F& @4 G8 J( _9 N3 y3 j

' Y1 n7 X2 E& P6 @# M& l2.哪个函数能让服务器输出如下header?
5 Z5 l/ D5 k; O3 Y9 I" U* X
% B$ v! s4 c- P' V* ~( \set-Cookie: foo=bar;9 {; W* K0 e& b% j6 ?
: _$ v1 ?3 R5 q0 S) b: |
答案:_______________) G2 N% C2 b+ m8 s

) h6 b% A: X; P# X% h, ~7 D3 J" h& V# z* s" L/ W* l2 `0 a
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
1 d, [% n5 g. Y8 a/ g
, q2 ]% T% {$ j2 D% h, lA.通过HTTP_REMOTE_COOKIE访问0 _+ _4 y3 \  X# M! h
B.不可能! O# {% [, O! H8 {
C.在调用setcookie()时设置一个不同的域名. A) F6 J8 A% U
D.向浏览器发送额外的请求/ ?: L7 w8 I8 v8 [
E.使用Javascript,把cookie包含在URL中发送5 z( I% ^& X# b8 N! J, S
/ K, p. j5 T6 }; E* u6 X
8 M- i. j! x" ?/ \8 B  l
4.index.php脚本如何访问表单元素email的值?(双选)
* }& d$ U- T* `0 u, ~3 a
3 m+ M$ Q8 S; m$ p! ~$ Y/ f<form action="index.php" method="post">
8 {4 x# z/ o7 M& l: q<input type="text" name="email"/>& v8 C* `8 }8 ?" W7 Q+ \
</form>
- u; e9 T  A: h1 r% C3 y# q9 o+ }/ p8 ]: Z5 Z- G+ x
A.$_GET[‘email’]/ {5 {' S( }& d9 k7 v) `/ u2 G
B.$_POST[‘email’]" o9 F' ~) X5 ?- k
C.$_SESSION[‘text’]
8 A* z, H2 o5 E9 G, ZD.$_REQUEST[‘email’]* f- T4 D4 I7 N' \+ m1 a! I% h; u
E.$_POST[‘text’]
* P* e! A+ R  n- H0 H! l! ~0 i6 u: a. c0 i1 u$ g

, H: M( ~$ B5 Q9 h' N5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长5 W  `( M$ u8 ?6 N
B.没有变化3 Z/ U2 S) E' V
C.在浏览器上打印该字符串时,尖括号是可见的' H; P& H7 \: x8 f$ e3 h$ o7 q" e
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见% g1 f  B2 S. _* q- o
E.由于调用了htmlentities(),字符串会被销毁
) `; w. F" n$ l1 f; s3 X: P
1 d9 Y2 ~5 k! H) E/ {0 \; `% @% I
6.如果不给cookie设置过期时间会怎么样?0 U1 Z$ d4 T% |9 e/ r
- H3 C3 d  F( `1 Y9 k9 }" Q( c
A.立刻过期
8 x8 q  w: e- kB.永不过期
, Z* C4 d* Z! N, ~7 wC.cookie无法设置  c0 ]9 f, _: P
D.在浏览器会话结束时过期: ~/ L' _( p+ J( c/ N
E.只在脚本没有产生服务器端session的情况下过期
  E5 {% R  v: Y4 F! A! T( f# Q- h9 i) h/ y0 E% F" B

) M$ c( t9 k5 \# E" R2 j7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?

  1. <form action="index.php" method="post">
  2. <input type="text" name="element[]">
  3. <input type="text" name="element[]">
  4. </form>
  5. <?php
  6. echo $_GET['element'];
  7. ?>
复制代码
A.什么都没有1 Q/ ?1 W! u# D# E* {0 ?: e+ r
B.Array; J, ~9 @( a6 j4 N: o$ b
C.一个提示) T& {' T% n* y, {+ K8 b6 q
D.phpgreat
$ T5 }- |/ \$ U. M9 Q9 v8 CE.greatphp9 T% T/ }* @  M, j
$ j" w1 m, j6 |" d6 h5 ?6 _0 X6 U

  {& U! p' x$ f/ t8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
/ e+ a* @1 \) v: d, {1 o
& h! _4 |3 e" H/ Z  n) L' NA.这两个是明文传输,之后的信息加密传输
! N% w- `+ w: h9 Z* M# jB.加密传输
* F/ }' j1 u2 K, K) QC.URL明文传输,查询字串加密传输
7 O7 Y+ J4 u1 I9 uD.URL加密传输,查询字串明文传输
7 |4 h7 C' s6 y& E% Y6 G0 bE.为确保加密,查询字串将转换为header,夹在POST信息中传输
0 E7 E8 v) s0 c1 t) @' g
6 R. Z0 m. M. \  M
( g( |% J" Z: d, f  y3 T% J! _  O6 o9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
: M" |* u* ?- U' z: O& p  Y0 R$ H7 D, L4 i; C- I
A.它们组成一个数组,存储在超级全局变量数组中
7 @% Z. O4 ^  \: hB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
0 g! N2 h3 M; d* x& ]0 sC.第二个元素将覆盖第一个元素
+ V7 c' j) n! n4 Y. W1 H2 g  `) BD.第二个元素将自动被重命名! v2 j/ w! [8 d& B, e: B: E
E.PHP输出一个警告
7 `( s, V5 U* T) e& e- Y! \2 w) k, X( F& B. |
/ C/ O5 }  C5 s$ W& K
10.如何把数组存储在cookie里?" ^  H) T0 z0 @

: G4 n( Z# O, r0 X& J, g, BA.给cookie名添加一对方括号[]
: j! B& j- P3 i' y9 b' o2 R" Z7 UB.使用implode函数, o" m5 ^" E" X
C.不可能,因为有容量限制6 m$ J. d2 w, ^: G$ m1 Q- H3 t
D.使用serialize函数
; K, s8 `" X9 Q; b: wE.给cookie名添加ARRAY关键词" G* `% D! A$ n2 @; @

$ P0 }3 {  z" A- a; {/ H, K' {* l& I
5 n0 ]0 e6 a! E3 A2 X& I9 N3 c11.以下脚本输出什么?

  1. <?php
  2. ob_start();
  3. for ($i = 0; $i < 10; $i++) {
  4.         echo $i;
  5. }
  6. $output = ob_get_contents();
  7. ob_end_clean();
  8. echo $ouput;
  9. ?>
复制代码
A.12345678910! t$ \. R9 m% s
B.12345678902 P: {8 {) W3 \7 W* v. [
C.0123456789. C2 I, J7 B* D# X  T" u& |' \
D.什么都没有
  J: k/ D( v5 O2 Z2 {/ \6 S, n( S9 RE.一个提示
5 t! ^0 ?8 y: q9 U) b, U& g5 D. n, f" _1 L  i+ ]6 u, K/ z6 W6 [

5 k" U8 ~# k  o6 m/ B0 ~12.默认情况下,PHP把会话(session)数据存储在______里。
$ O6 j) a, f' g9 P& D2 _+ q0 d$ d# I) A0 u% v2 p
A.文件系统7 C+ T5 o3 a$ z, i" d4 N
B.数据库
8 ?) }8 X& J! q% [" iC.虚拟内容6 d$ ~  ~  k2 l9 T9 f( q. t$ ^5 e
D.共享内存
5 Y) |. z0 o; E, [0 G+ {' KE.以上都不是( A/ p+ Z4 S, c# v* Z. a8 X0 u7 x
1 j5 T& N2 V4 r7 i# t! F1 \
  G) P- i; N9 F6 q) G9 P: A5 i  y
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
$ H9 q! R. }$ ?6 h+ u' h- j; B( T0 G& r
4 \9 L9 ]- B. k" `+ kA.浏览器的程序出问题了
2 ^- `# I8 p+ a( W; lB.客户端的时区设置不正确$ M! H3 _' n1 {& Z. W, r
C.用户的杀毒软件阻止了所有安全的cookie7 B7 O! Y' {0 M% m# L0 a- j
D.浏览器被设置为阻止任何cookie0 d& [; n" \& F* ]
E.cookie里使用了非法的字符# j7 d" |) h2 w% z

" s' M0 ?% G! q* R5 y. _+ e8 H7 f' r0 u3 e
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?, E0 ]7 O, E2 S) e4 e' b4 G3 N1 j
7 l( e0 ~* r( O) q% S3 d
A.1440秒后" K- q8 n1 G" H& Z
B.在session.gc_maxlifetime设置的时间过了后
6 k9 H3 O+ n4 |& l2 ?/ WC.除非手动删除,否则永不过期2 V: }+ c2 I5 A$ y. g
D.除非浏览器重启,否则永不过期* ?( [) h/ h. N
E.以上都不对
" g- j' Z# s6 U7 k. G! T# {8 a$ M4 B/ p: R( e6 F# n/ x
- v+ X# B0 W& N  Q1 I" [3 H2 U
15.哪个函数能把换行转换成HTML标签<br />?
* Q4 J5 x; S! j
) z: l+ x9 `/ h* I答案:____________  N( u( Z7 w  R& `2 f
5 j6 ^& X7 F+ r. s- a9 q8 d" u

0 K- k% M& \4 n1 P- i, t' l
3 P% z% a6 [- \. B% c# z0 x$ B: P答案速查: K( I, F9 b: A7 z. ?
1:E& P5 G5 E* E6 x# `7 E$ E" X
2:setcookie/setrawcookie
; ^! ?- Y1 h: m. ]5 C3:B
4 w6 j, C' G9 h7 y. C: }4:BD
6 d, B. {0 \4 W7 @/ _0 l9 B2 L, N4 _8 x5:BD' r: M% {2 x" s
6:D4 K/ F% I0 t! c4 U) n: W% c
7:A
5 H( c9 m/ |: s1 m8:B
$ k; x& x& ]: h; S# a9:C/ y8 S; \7 \6 `* E
10:B
" m3 v, D3 i) }2 I% W& K+ v2 w2 x11:E; k5 A! t+ G$ N9 z1 U0 k$ |
12:A
* E3 m0 Z+ U) k, D13:BD. {: H/ t' ~7 {& b2 U
14:B; m( P; |2 g5 r1 g2 s
15:nl2br
: }" x/ Q0 H% X4 P% x. J  S
1 q' |! P' K% l$ j, `: R7 s( T( c2 O2 `
7 g8 m8 `# T+ e5 s6 S' a$ T
答案详解
7 r, K$ \. _* m3 a& G
5 u  h3 l# H' p3 ~- x1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
8 F8 k$ O, j8 z+ v! Y. T  B4 H1 }+ N1 o8 }8 V: ^0 d
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
0 L  U' q% _7 |2 Q7 a/ S8 Y* M( v; f. R, h' v% v% P
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。. i* W. k& P1 v0 [

$ o( X6 c# u3 H, u% M; ^/ Z0 B& {- @) o4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
6 K& t* s, o: z  d/ s; ~  C0 m, ]) ?1 T2 d: a+ D
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
, u/ @! O! K* b
1 `1 \0 s7 q8 b# R. o, ]5 W5 `6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。# X  j: ?" e' v
2 T7 ~1 O* D  }8 p8 h- D
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
# c: \$ R' {$ A  U5 R* N6 X
2 p" I4 ?, l$ V1 Q8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。: s( W8 R& p- K+ B
5 ^# ]. ^" A, {; |* G4 O( u/ Q/ }
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。! @, u! ~) p/ n) y1 I

: g1 m7 }5 o" l: D: O' M10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
5 `- H5 ^' I5 `9 T8 P& J& V  j+ O7 G
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。# G9 c# l9 C6 m* z* O  `

" m9 d3 U- y! `6 T6 z% U12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。8 N# o: V( ^7 S! Y8 {7 p

+ }7 V( e& {" ?% g13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。( L0 p3 C3 \4 X  @/ _; Q5 U
$ }6 E' ?) G0 i: j6 v! ~# T& g
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。2 A6 c+ w$ B* ~
4 _6 {9 }$ B" t
15.函数nl2br能实现这个功能。




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2