获得本站免费赞助空间请点这里
返回列表 发帖

[Zend权威认证试题讲解]第三章 Web开发中的PHP

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
5 l8 @; Z$ }2 A1 G8 a与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。! v6 R( m7 _$ {6 L3 Y9 V# \: v
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
. v$ P: Q$ Z2 L1 L
) o6 e5 A$ ~/ o- C" s6 f8 ?" \
2 U1 U1 {  b" W5 ~问题0 r5 n' h5 i$ y' g. i
" Q& \5 q1 F: q+ |- B# V
1.如何访问会话变量(session)?
! F2 r8 Z( v- s/ a# l# E: ]
8 g; {* t# r4 s3 }A.通过$_GET# e( i5 ^; O3 ?: U9 C# }1 ]
B.通过$_POST
3 i" h/ }. c7 U$ e6 e5 d. bC.通过$_REQUEST, q! q/ z! P0 d3 f5 |" h% F
D.通过全局变量+ e  ?/ T1 v/ R0 ?  }* n! \' ?
E.以上都不对! z+ F4 w' K/ ~: F5 b
% W8 z) j6 P' }3 Z0 u

% j, {$ X  I' o# @5 W2.哪个函数能让服务器输出如下header?% d/ V  W" z9 m5 Z8 x9 T5 |
2 r# o+ L$ Y  |! q* q' `6 V
set-Cookie: foo=bar;
/ @8 [' H- ]2 U7 `9 _
. O8 |1 D! s  c8 y6 v' L' V' v0 S答案:_______________4 h- x- [# s" W- d! R( j
. v4 `! j! b- i' m: t- J

+ p+ ~" H( T. n3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?0 x  {' v& D; w4 C- H" V6 N2 V8 N, e% k

% S2 C' x. X9 |; E3 V" ]. KA.通过HTTP_REMOTE_COOKIE访问& N6 g: c$ X/ C4 `8 x. k
B.不可能2 L3 [( Z; Z3 U5 q4 c* i' F. X/ ]
C.在调用setcookie()时设置一个不同的域名
- ]! G+ R( e. kD.向浏览器发送额外的请求5 ^- {2 M4 V. J# b* Q! x
E.使用Javascript,把cookie包含在URL中发送
$ B# \/ V7 P& |& L( M# z
( x9 J8 Z3 c$ h0 |  `! E
, @8 |+ T$ _7 D6 _9 X4.index.php脚本如何访问表单元素email的值?(双选)
7 A4 n9 v) ]7 b8 M0 B3 j6 M: m5 [" x/ \. j& x7 R
<form action="index.php" method="post">7 n2 U9 W- Y: n- c* j, @1 a
<input type="text" name="email"/>
+ F/ S% c+ p0 _' P* ?</form># }- }8 H2 Z) z3 W! W8 }3 H7 F& p( u

- [; p8 p, O+ h4 Q6 xA.$_GET[‘email’]
3 E2 ?* i9 F5 E7 A6 K+ QB.$_POST[‘email’]
9 K8 M* v/ T; x( y2 ]C.$_SESSION[‘text’]
( J/ L8 Y. r8 ?% n( A: dD.$_REQUEST[‘email’]4 Q: ]( a) a! a4 _7 t' m
E.$_POST[‘text’]
) G# q, w* a' @. k0 [4 v
( z& H+ I1 c4 o) [
8 l1 j, F3 k! X5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长- r$ k0 G2 p8 G# m* e, O9 r3 v
B.没有变化% ~; ^8 N7 d6 `" \8 c5 ^
C.在浏览器上打印该字符串时,尖括号是可见的
: D1 u3 a$ d6 k  b: N# [$ uD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见- J1 h6 o, Z0 \9 E; ?: Z
E.由于调用了htmlentities(),字符串会被销毁* @8 b. U# c; Z3 H, P# F* }
! c0 t4 S2 z( ]! d
2 _5 f2 q7 s/ `+ r; O3 v: @
6.如果不给cookie设置过期时间会怎么样?
, Y* _3 B& \  V( ^
5 A2 l9 W, N- q1 X4 ~+ W; HA.立刻过期
: F% L" V0 ~1 tB.永不过期. J9 \, U7 H$ I$ z
C.cookie无法设置! p- C2 y  J: c
D.在浏览器会话结束时过期
& B8 w1 S2 Z/ [- qE.只在脚本没有产生服务器端session的情况下过期
. E- s8 t, S5 x6 L
% `: t6 [; b2 w% d4 q% _2 d' g2 k0 ~, g# b$ G
7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有* A* I: ]" d, s: [( d
B.Array
$ B$ t9 f8 `; Q0 A( uC.一个提示
( Z3 A( S8 j0 ^/ y2 ^) mD.phpgreat
1 X1 |# Z8 b+ g5 V& m, t) sE.greatphp
0 R  f2 x6 c- p, ?4 P8 D7 Z8 |. M$ q( C, }: c

) o! P6 K" ^" s0 M8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
+ a; {" V# w. p( S2 y
( D5 J, f' g( Q' N4 T$ f  MA.这两个是明文传输,之后的信息加密传输- u( F7 V: V/ Z% P8 ?
B.加密传输
. k4 R! n% a0 k  }0 W. r1 ?C.URL明文传输,查询字串加密传输
0 m' ]$ o, }, z& h. \+ m9 JD.URL加密传输,查询字串明文传输
9 X9 W6 G4 C1 [E.为确保加密,查询字串将转换为header,夹在POST信息中传输
# b5 d" ^* t7 F7 ~3 t" \5 H$ Y; V. G1 I+ Q, ^6 z6 ~
0 v% y( `& _9 ?5 j# V( e
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?( T' @( t* [8 J$ P0 i* @
% y: s# J0 ^4 \! u# H0 k
A.它们组成一个数组,存储在超级全局变量数组中$ x0 v" k: n+ u. Q0 d8 ^+ m% f) F
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中$ t8 k( j( S1 d2 K7 A
C.第二个元素将覆盖第一个元素
' S5 ?& F) d" oD.第二个元素将自动被重命名
  S, V' _0 H9 M1 D- ]E.PHP输出一个警告( F7 g6 `7 p, A0 u" t  Y

7 a$ c/ ]8 k/ E0 p
( F1 o2 u. c7 H' F10.如何把数组存储在cookie里?8 i. h: S  s0 V. u% g
0 }( l, |& B) `4 T# W
A.给cookie名添加一对方括号[]
& Q. ]$ k: l7 S( O% M1 @8 C2 s1 dB.使用implode函数
! J1 d/ u5 S% u( RC.不可能,因为有容量限制/ K8 |2 R/ I" O
D.使用serialize函数
2 r( y" E. `1 O! H4 M, ME.给cookie名添加ARRAY关键词
- ~% o* {: Z! e7 Z! {  h2 d. H1 S/ ]$ ?* D: E' l. N3 S- s

! N1 I3 o: V% `5 D- L2 c0 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# R$ @* M( O# w9 \$ m, _
B.1234567890
5 G0 a7 W% h) u4 n6 o! FC.0123456789  S0 a; w$ ~1 r. \9 z2 R
D.什么都没有8 k) A+ h" ?! x6 ~8 w( y, ^
E.一个提示
& d  I5 p( K, @
1 v* i. E5 }3 B7 F3 S: X6 ?$ L3 {7 Z& X! y
12.默认情况下,PHP把会话(session)数据存储在______里。( q, X6 q, m" n
/ y5 F) F* Q1 D- r/ p
A.文件系统* ]% T! g5 i6 n4 \* x" n5 R1 s
B.数据库, M$ ^5 y* i# ^. [% q3 S* w
C.虚拟内容! v0 r9 ^2 E3 T- z1 z7 V. P1 t
D.共享内存9 k% L  V* q- F% h! q
E.以上都不是
2 ~6 x; k+ w; t: ^: ?& T) a0 O: p3 K1 P6 o4 _  p

( J2 y, P' v" S5 L% l6 |' |" \) i. Z13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)" z# F5 _$ `/ F3 m" t6 T

! ^. R$ |: J( v4 P4 }$ HA.浏览器的程序出问题了& w; L5 T! }" C2 L
B.客户端的时区设置不正确
9 \6 m/ t4 C3 W4 {C.用户的杀毒软件阻止了所有安全的cookie: z. t6 {9 h" P6 n- N- _" P. I
D.浏览器被设置为阻止任何cookie
( u  U# |% i* p' A4 D0 z5 c* W5 @& LE.cookie里使用了非法的字符& G2 C5 C, |% N8 ?' O1 u% \$ g
& Y0 D; B3 y* U/ C( l# Q9 O
/ ]/ }" T( Y. n0 _0 _6 |2 ^
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
0 ]# i4 Q! n' p9 j/ k
# r/ A; A/ ]0 IA.1440秒后
; N& C) s- s1 E) @B.在session.gc_maxlifetime设置的时间过了后
! Q$ z* \8 D: V* i4 n& dC.除非手动删除,否则永不过期
+ I4 E/ |- d3 c2 O( y% ]# ?8 K. hD.除非浏览器重启,否则永不过期
5 u; `2 Y- [' \/ a' J9 JE.以上都不对
4 {  O4 J9 r+ T& ]9 h" R2 D/ C: f1 [+ M1 q( F$ v$ n3 w

( e+ b5 x5 u) r$ M4 [& r7 f; S3 U15.哪个函数能把换行转换成HTML标签<br />?
" _4 F& K0 S$ r+ k7 z5 R: k5 N. C) U$ {8 L/ W
答案:____________
5 K* @, o; h; }- b5 o( p
7 I% I6 P  ?  w+ x
- K* b& d: D* L% i  n, v2 L7 I0 q; D
8 L' ?. Q1 I. x答案速查
2 Y  ?: w/ e8 Z1:E5 j, P$ q" L4 s  y1 Z; |6 }. J" ~
2:setcookie/setrawcookie4 t& p( x! \/ C# y  g
3:B' P1 ^$ n: ~: F% c9 C% [
4:BD
% f5 s7 ]- I, Y3 p5:BD' o/ j% u( l" Y& ]
6:D& n8 u) Z' ~2 C7 h% T& H" Q
7:A
+ x2 F& M: l9 s/ Z' O8:B, \. j$ ^6 z) l7 \+ P2 R1 Q
9:C% ]0 |- E! ^$ y  {& l4 i+ `: [8 {3 g0 s4 ~
10:B
4 K: V4 F, B! d, k8 U5 ?11:E
# Z1 r4 J; ]- K* a3 N# F12:A
* r7 ]7 F1 V% j- s7 T, h/ P5 W& {2 Y13:BD1 g% w/ ]" J3 `) j. ~; I
14:B; ?& t- o# q( E5 I  T: L* M
15:nl2br6 s$ B- I4 k2 d" f3 S
3 ]2 Z8 @! c9 f" g
+ v: M4 ]% Y) {

6 e# g. \: N% {% F3 y# W答案详解0 l4 [7 e) y. x

: n& E7 e  i3 ~* ?! H- S1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
  D2 R  A) d- u5 r7 z. G2 v9 [9 C% C/ t3 G$ X2 p+ j9 H
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。/ C  t% p; B" y9 s7 E

! I7 R! {3 ]8 t3 B1 B  d3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
1 c: [3 c3 o# ~! }) F6 O# W
1 f$ L+ a1 W2 k4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。) ~" C* p! y8 ?, M
# e: H2 [, G, Q4 B6 D: c$ S
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
0 ~8 P6 f" Y" N$ Y$ ~
. V" B2 e6 r$ u+ P+ r6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
" ]0 A+ |8 m: X3 p' t7 P
/ x' Y4 V! X: h. }2 i( E  s; `7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。! U5 [) T, o& q8 u: I
. w4 a: y  a/ M: [5 @/ ^
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
% A: I2 z" T, a% c" Z; Q( u9 r' n  s' a1 z/ \7 S) Z
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。5 X9 Q' m2 d0 w8 r
4 H$ v4 \+ w6 M
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。* L3 f- w" [4 \5 `7 W

# u" d0 V! y8 Y6 e0 J; F* N11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。& l/ p. g# T: H# Q, E& z

. q, N0 b6 z. ^) w1 S6 H* j12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
; w: e8 o6 d# W, W3 }5 Y1 H3 w2 M4 U2 e5 @3 o5 h7 m. w
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
, w5 ~4 v5 t+ G, `
/ ~. q  d/ ], c14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。# L6 [- G# ^- W+ {( w; b
3 M6 b3 E( U9 n& L; b+ b* i
15.函数nl2br能实现这个功能。

返回列表
【捌玖网络】已经运行: