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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
5 ^' S" c4 ~) D( ]与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
4 l5 j* Z2 c% E, j. x1 o/ d/ {4 K一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。/ \1 p1 d& I* g4 R7 q2 X4 y

% D+ X' B" Y3 S# t2 a3 X
' f, Q$ g; k8 B; s问题$ V7 }& D. R" R( t1 H+ [
7 j0 t6 |; G: S& t, n
1.如何访问会话变量(session)?9 m, O; c% g7 R: n( Q) g* m! J3 s! n6 W
8 a+ I) J" z, L) [5 i8 ]* F7 g5 m/ h
A.通过$_GET! w5 H/ r- H, t/ S4 t- w3 I  n
B.通过$_POST, u. Y4 ]3 T: C; E8 c
C.通过$_REQUEST
+ G! h5 D. i, I0 s4 wD.通过全局变量
( `( U. F% t; F# j# _9 P/ h8 UE.以上都不对& t4 C4 i% _9 R. g# J* C& ?

0 R: ?  W- C4 \( y! W; `; y' n+ ^! g3 c
2.哪个函数能让服务器输出如下header?7 }7 A7 n4 Y/ I4 z6 L0 o5 n. {

5 U6 S4 B" y  @) p2 aset-Cookie: foo=bar;
4 {; @; F! i! t" m6 b1 S" a$ [. H5 S) u6 L& Q+ P/ R
答案:_______________) d8 y8 [( F" d
) ?# S, ?! b$ D/ ]2 H' B

8 P/ P( f# P2 @  g3 X; G" N2 j% p3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
% B3 O& Z9 l/ w# }+ M) A' s# a# |8 i+ D2 Z! o7 F  B6 l9 o/ z
A.通过HTTP_REMOTE_COOKIE访问
7 N, v6 r* o, i- jB.不可能
  R: b5 B1 q& u& h! k6 `C.在调用setcookie()时设置一个不同的域名
* L, Y* R, s: ~- f- r1 MD.向浏览器发送额外的请求9 S) V, @% y8 P
E.使用Javascript,把cookie包含在URL中发送8 O6 a! E1 x: }  _* O
# {; r  U9 w% v/ l6 s3 z: A9 v* b
0 G; s* L6 k2 V4 I- a; t2 T
4.index.php脚本如何访问表单元素email的值?(双选)/ n+ J( a& `, c  B1 F

3 i  _7 s6 Y4 L5 F) b3 ?<form action="index.php" method="post">5 Y8 }! P) S; [* q7 I# g; x
<input type="text" name="email"/>* t/ K* z' ?) ~5 o0 P6 M
</form>" H8 ]- m! N, u5 l! t
5 x* |! p! R4 f0 r8 H1 w: Y8 r  f
A.$_GET[‘email’]
: X! t" m) I  P6 I+ CB.$_POST[‘email’]
; o9 A$ l' O, B; X9 z! r3 r1 p' ^C.$_SESSION[‘text’]
. v' }0 J) |! R0 SD.$_REQUEST[‘email’]' a/ G0 A$ d! v# P$ F7 x
E.$_POST[‘text’]' K: C+ Z+ n6 e) J8 k
* P: j. d8 c. m/ g1 o1 u! r2 ]
* `! q# P2 g0 g- O2 }( O" g
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长2 v1 r( q9 l! t  [0 x! e* n
B.没有变化, ^/ E8 l* \' [, Z- H1 x
C.在浏览器上打印该字符串时,尖括号是可见的
& c6 @' f- G1 }, K4 wD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见7 _+ I( Y( l1 _9 d
E.由于调用了htmlentities(),字符串会被销毁
4 q: w* Z2 N; n6 n7 A" E
4 l5 ?( C' \% i; ?; t
; H  b( S0 Q6 k( q, j' T4 l! b5 m6.如果不给cookie设置过期时间会怎么样?  f  l( C0 S( N9 o  j: u

% X6 I" g$ f' _A.立刻过期
. k/ ^) a4 o7 M- \% g5 yB.永不过期
1 D; H9 i; ~% q8 N) @C.cookie无法设置
9 Y: |9 V0 S! f2 Z- q0 |D.在浏览器会话结束时过期' Q5 G9 @, w" ~1 u! ]6 x) \
E.只在脚本没有产生服务器端session的情况下过期
% _# y- c$ _$ A9 t5 k7 j- n3 O( g5 D" \5 [$ i9 `
2 ^' ]* ^0 E5 |- n
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.什么都没有
6 z/ o5 `) D" T- e0 d8 y: r5 C. kB.Array
8 p" ]+ F1 M; ?; p& [C.一个提示) y& v5 v1 I/ e+ t& h; K
D.phpgreat
. N5 v5 ?  d  |+ m1 t  aE.greatphp& t* C+ m1 }2 ?8 U7 `1 g

. g0 ?4 o; P0 n0 c& o( q
; }5 P  }0 O" F" G( K# V8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?. N% F4 V' g9 @" t1 u: M: x! F

" g* _3 P1 h4 Z. v' }A.这两个是明文传输,之后的信息加密传输4 c3 ?- \' |- ~9 ^3 P% z
B.加密传输
4 r; r3 J0 `  e# EC.URL明文传输,查询字串加密传输
  f+ G9 r  u2 [8 F% S/ P% T0 L$ `D.URL加密传输,查询字串明文传输" W! V' v( R  j
E.为确保加密,查询字串将转换为header,夹在POST信息中传输% x5 i) I. J5 K
1 ^' T5 e) r4 @: m/ f

' X! ^3 @6 I8 N) A9 |( N3 E+ L1 o! t9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
8 o: R, f; T1 j; {- I9 _  U% S8 ~. p6 z7 U& @5 }% m
A.它们组成一个数组,存储在超级全局变量数组中
3 z# l' _5 Y. y' `* F+ P, PB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
* K( m, _8 g  `& qC.第二个元素将覆盖第一个元素
6 [7 A* I# M1 X$ gD.第二个元素将自动被重命名: G8 T# h( b3 C+ A# L; m, g# S
E.PHP输出一个警告( H9 g( D- Q$ u

' y! S( M. [. Z" y
7 P4 c4 }# z6 E) Q: }; n10.如何把数组存储在cookie里?2 j7 }6 h2 Y: Y" a" b3 u
  U, v( v) @6 [6 G; n- B
A.给cookie名添加一对方括号[]( Y+ w% B# r$ b5 F
B.使用implode函数9 j5 s: B+ h$ A1 t2 n
C.不可能,因为有容量限制
( e, x( D- V- d1 h( {3 W3 tD.使用serialize函数
0 v$ E2 p$ j! P* V3 gE.给cookie名添加ARRAY关键词
: W6 J7 _2 U5 F0 V% L6 y
! C: V, y. \8 y: V& f+ _! {5 s" Y% d  G8 b0 _7 R
11.以下脚本输出什么?

  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.123456789102 l- p0 l+ b# m# a  u! j: Z1 }
B.1234567890
( ?  F7 Z# v: j- v% }C.0123456789
2 o; p% z3 K4 U% M# H9 x6 MD.什么都没有1 x; h/ o' d* v% l9 J2 L
E.一个提示4 `2 T" ?5 z! w8 R3 H

( }7 p' P- x1 G3 B
( m8 @/ Y( h( P* n. B$ E9 `. {' a12.默认情况下,PHP把会话(session)数据存储在______里。
- r& f' e. V9 D
7 H9 v* N4 Y4 j8 {A.文件系统/ c' r: U/ h* B
B.数据库
& r) y  D& @& H' }( ?C.虚拟内容
& L1 Y& @3 r# l; U+ i! T6 ^$ eD.共享内存, Z: F* k8 J' v- L) U
E.以上都不是
: Z2 S7 }! Y" O9 t
4 `2 I( _9 W2 @) `5 l. P* M" g  B: g# v/ j
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
" H4 ^# B# x* ]! v7 q  V; g
% W" z/ h6 o6 `) z8 f) lA.浏览器的程序出问题了
- c# p/ Y1 z6 P2 J# ]3 b: EB.客户端的时区设置不正确+ }) n+ A. ?, Q0 V1 a: S8 G- c
C.用户的杀毒软件阻止了所有安全的cookie
. ^# T/ u9 K; B3 [3 a' P* dD.浏览器被设置为阻止任何cookie
0 q2 {$ G7 X) i- TE.cookie里使用了非法的字符
8 |+ T$ F8 L) m8 A9 q$ w/ t
* i% n0 t2 S) T1 e9 C* E: `4 z7 m" U
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?; M" f3 [/ n. f( v+ |
0 u; e' x/ v' b# J
A.1440秒后6 q* [- g, D. ]. x( E: ~
B.在session.gc_maxlifetime设置的时间过了后
' F0 ], U% \3 XC.除非手动删除,否则永不过期
; i- L% M. D+ C" RD.除非浏览器重启,否则永不过期) k7 o- i: Q5 X/ w- ?
E.以上都不对
. m& g2 P7 a. }2 Q6 h4 U
5 r& U" J0 H7 r4 d7 c+ b* G# w
: e4 O6 r% m  T. K- k$ b15.哪个函数能把换行转换成HTML标签<br />?
+ h7 W7 B! Q+ ]" p7 o! ]! _, k% R
答案:____________; o5 S# Y, _7 i1 j/ h- s$ u8 P2 }' G3 m

5 `3 u' J, [! [; d/ V5 j. {. M
( A9 S; ?+ \% Y5 U& c' m9 U
2 K3 h; F5 X4 N' W& z1 ~: |: O答案速查* {7 [2 ?6 K) F( u
1:E: ^+ T/ c) B/ L* i# i, \
2:setcookie/setrawcookie
0 x6 a: }0 u( W* {5 M+ I3:B0 O( Z4 G! Y1 h' W" a
4:BD
' G/ O) k( c* z; g  K$ ], j+ B5:BD8 {$ v. V/ z7 W7 I6 ?" o
6:D/ q9 z3 `6 ^$ q; r+ y$ m- N8 w) N( Q% \
7:A
* W3 K7 E) Z, o/ z5 t1 L- l& j! E0 o% a8:B: N1 |, A' s3 g7 g. A" p
9:C
' ]" r' o: |2 V" k" ]9 y2 v10:B
% O' t! A0 @. [( o8 ?6 j9 y' S6 C" u11:E( u' u7 ^6 l  b# |: e
12:A4 o! j! Q  k3 _% s% B+ P
13:BD
( R/ K' C+ g4 |4 ?2 D5 }14:B
  o8 M- `5 ]4 I7 ^4 K+ Y( [& [15:nl2br/ k, t3 L  _+ _* m/ E1 E! y

  I5 Y/ `7 D& R' H+ H5 E' s% K- x' e0 N( A5 ?2 V

. u" T4 l- O& ~7 S: R" x答案详解
  f6 b. c# M5 n. L0 @. l) p- {" N& c( o# t# l; Y4 P
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。' u' j. Y  g3 ^0 I3 ~( c
: r7 y( r" g; r* w' x/ \% w3 V
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。7 [$ u1 l/ i" q2 F: v: q0 L
/ C$ C* i1 @$ D4 l' {2 k, X
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
- f4 {2 _+ N: s) @3 V' d) i1 O% T& |( s; q( Q4 B/ @' }
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
; S' ^( \0 b1 u  j3 j5 V) E# n' j! I9 x
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
, I8 J1 K' @* b
5 n3 j, l# s4 K! b7 e! z6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
0 i. j. j5 R( |: Q# ?9 E3 P
7 E$ s0 j) E( S. @: i3 K+ V5 b7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
6 Y: g& B# a! [+ z0 C+ W( w: k7 F8 V, H' R5 g0 h+ F
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
+ g9 {8 r# S& z$ o. ~' ^4 ]) D0 u: h/ Q
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
$ K9 [& u; v+ S- K+ n4 T4 T
4 f1 N; `4 z% [4 O# i9 x10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。# {! h- Z' B) Q: Y! }

8 L: W" T- k7 E5 t0 \& `8 F! _$ Q11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
4 L2 ^9 O& M4 ~& P+ Z' [- U/ a' f2 C/ K8 Y) S4 m. l5 ~
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。! F% o, x' w$ `# F0 V

4 i" w& a; H' c! A# G" i' u3 W13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。) @5 m7 ?2 _5 e  A: e0 b
) m7 ^9 v) Z) F  ^" n- f
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。) A! O" p& `# v/ @; T9 F

* E/ K  x( ~8 G15.函数nl2br能实现这个功能。

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