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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。6 D6 C0 ^+ l$ t6 `
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
! {& P. J3 a3 B  ]* z; G  U一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。0 U/ j0 P% I1 U2 z* G+ \1 `
2 D# ?- ?3 p) u* @

9 E: q$ w( S! P( ]! U问题# x. g: L9 i6 V' w7 {* [
  J0 h9 M, e& _$ y0 w$ A
1.如何访问会话变量(session)?
' e% `/ k$ T1 ^" ^2 q' \- j5 d5 l9 K2 g' r
A.通过$_GET: a) c: X1 s5 Y4 Q, \
B.通过$_POST6 d+ [' h" L8 v- \
C.通过$_REQUEST
. W. J; o/ G8 o! z- ]5 L1 pD.通过全局变量$ n4 P* t6 P) `# ~) Q# T
E.以上都不对) r+ e& v6 |9 \; ]7 V, w
4 s0 B2 i) D4 ^. r0 a7 @, k2 h

1 N4 F4 d% b4 y* _  k1 @& L2.哪个函数能让服务器输出如下header?! \+ W* h- G8 A5 ?: v

, l, j" [; O) f# U! v9 fset-Cookie: foo=bar;( l- X) E  t- u1 w

; Z3 x! w/ ?' V; F9 H* j# `答案:_______________: e- s/ l9 U- U6 \4 K! b; t

! X7 @, i+ W0 I! {0 d( K
. G# p5 a9 }7 L. F& a5 O4 J9 _3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?+ O+ Q# q+ \( ~3 `1 ~$ H
& m/ B) w5 u6 @& z  X! G8 j
A.通过HTTP_REMOTE_COOKIE访问$ O4 h2 r# Q, K8 ^/ I
B.不可能( C6 n3 U2 c. W, b1 q  C; N
C.在调用setcookie()时设置一个不同的域名
& _2 K* P5 S1 `" S8 @D.向浏览器发送额外的请求5 H# S2 {# b5 l& E
E.使用Javascript,把cookie包含在URL中发送
8 t3 f% K- e7 O6 ^" Y
4 O7 h5 j- M6 d5 R7 ?, [; j- ]2 y6 v: I* ]4 ~
4.index.php脚本如何访问表单元素email的值?(双选)7 q* ]$ P9 w" L4 r( k% u5 c( J

+ H- d2 H4 y8 P  \. ]5 Z. ^% `; v<form action="index.php" method="post">
, c; l4 J" |7 p. z) S<input type="text" name="email"/>* s8 Z8 c- R5 R" _- r' `' F* x
</form>% K* Q- X: j* B& C
7 {$ z* O0 X# _0 j: W; q
A.$_GET[‘email’]
% W& [* {7 [) i; `  e/ UB.$_POST[‘email’]: z, o5 \- u2 I. d, H& e' g" Q) o
C.$_SESSION[‘text’]
8 B' K+ N' S8 ^8 D9 o# N9 iD.$_REQUEST[‘email’]3 D" V% B, U3 b& t% f* y2 i5 T( f
E.$_POST[‘text’]( ^* A4 ~6 d5 D1 E6 G, z
' i: A- c9 v: z: I3 y

6 C; t1 _# a' U5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
" o3 }, K7 t# b+ e/ D, v2 l( FB.没有变化
/ s/ l' P, Q& T; B/ [/ m5 `: ^) uC.在浏览器上打印该字符串时,尖括号是可见的
+ x8 F% C* {. p* cD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见$ _( r" V0 G% R) z
E.由于调用了htmlentities(),字符串会被销毁/ `" W  ^* V- }
- n# O6 r$ ~. R  M0 }( s

. [2 P% a5 \& ?: H2 ?& |  H% s6.如果不给cookie设置过期时间会怎么样?
1 t* P; ]& Q( \% X* w; x  k8 u7 v' H! C$ |( b' x* C  @- ?) K
A.立刻过期* m% {8 H" r3 B; E
B.永不过期
% h4 O0 M# t( w' @/ q$ r+ K# W; ?4 }C.cookie无法设置, ~+ g0 P, I6 l- c# _" `" V- z$ \
D.在浏览器会话结束时过期
7 ^: s" L; b. M# R" h9 \E.只在脚本没有产生服务器端session的情况下过期
: g) C* W8 c( g  Q1 F5 T% f4 ~5 M6 P% ^, k$ Q+ Z: ]

% t4 A7 i/ \! n7 c, D/ l6 z7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
( U& H  |5 y/ S% `* A0 QB.Array8 @' X! b' k; W, T7 u5 b) y0 }
C.一个提示- L5 ^6 ]3 k3 V  ]
D.phpgreat
( U5 m" @2 p% g# bE.greatphp8 G# i# \' ?$ F: a& D) S3 N

4 V) I5 s  O* X( _& V$ K2 p, g+ U2 L8 g& x7 l( W
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
3 A1 B  G5 Y, p% K- `6 h$ g' M% P/ \; s9 C% P# N' W
A.这两个是明文传输,之后的信息加密传输! U& o1 s* w: E
B.加密传输
9 [# ?6 Y, M% G+ `C.URL明文传输,查询字串加密传输
7 L1 O/ i1 N; r) P' }0 L8 {4 Z/ l. @' @D.URL加密传输,查询字串明文传输
; W. U8 m, H1 K6 o' `E.为确保加密,查询字串将转换为header,夹在POST信息中传输3 O7 I% d4 a8 w0 [. t  }8 y9 h
: v6 U6 L  y7 g8 U: I* g9 E/ F4 b  Z

1 J& a0 g+ G0 b9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
! a* [& b9 ]/ O! f9 m' n0 `7 m5 _8 x  I5 L
A.它们组成一个数组,存储在超级全局变量数组中- ~; L4 n/ ?6 o0 [2 n8 u: Z
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
/ d; e8 J1 {% B: q0 pC.第二个元素将覆盖第一个元素
* \: X6 h8 }& e$ `! hD.第二个元素将自动被重命名
$ W: u* O0 `5 n4 a( M- gE.PHP输出一个警告
! R( B5 ?9 |6 J/ e8 ]
. F9 I* X6 {3 q/ N* ~4 p/ A; o  d& A! r
10.如何把数组存储在cookie里?
; Y- w, ~( g: M
9 }9 j6 x" ~* F" e3 T! PA.给cookie名添加一对方括号[]+ d( P" v6 ?- v* e
B.使用implode函数
6 {+ f' U' _9 JC.不可能,因为有容量限制' I. v3 K7 J# d5 M9 ~( ^$ k6 ~
D.使用serialize函数
) }  O6 O9 P# ^! o, F' e# t- EE.给cookie名添加ARRAY关键词, V3 H$ s+ \- B' M' X2 d: N

7 t! a1 f( \# P' @& S2 f4 Y
# S" p6 O4 }; 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& |+ Y# q+ m* X6 f5 c+ L3 D
B.1234567890
: w& C5 i3 p, {; {* m4 C# uC.0123456789$ z& g$ n! A! y& c  ^. ^4 N
D.什么都没有% _% P) z) q  O5 V$ ]
E.一个提示
. ?3 _' e- B$ j) V' i8 i2 h0 V+ q4 Q$ N
# t2 R, b8 E! ^! h( f. s
12.默认情况下,PHP把会话(session)数据存储在______里。
6 ^* n8 C# O) ]4 c. F& v. q& _4 N& u0 O) Q
A.文件系统& X) R- ^) X! {/ ~: ]& W& T
B.数据库
+ N# w* M% a% ]( W( x6 EC.虚拟内容
+ I: Z2 _: R0 z9 N2 HD.共享内存' G, [( q1 X& l* }1 H6 I8 F6 q
E.以上都不是
) b2 v: B1 N1 ?5 t1 c5 ?' ^
2 q/ ~0 f  ~- r4 C8 Z: z2 {* }( K$ D* t, K
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)" r8 e/ b. E  T/ B* f: |
/ ?' o: W7 ]5 }1 }$ t7 u" p
A.浏览器的程序出问题了0 e2 E7 z: m$ [( D4 E
B.客户端的时区设置不正确
: g/ G( s: ?- V" ~% F2 U" OC.用户的杀毒软件阻止了所有安全的cookie
1 L$ D# i4 C4 q, ~# z+ Z" d7 HD.浏览器被设置为阻止任何cookie0 g# R# w  t/ @- ]5 `
E.cookie里使用了非法的字符
. |! W' Y" L7 \0 A: s# R3 j3 N/ [5 ~' m4 C8 {! h! R' q5 ]0 Q

$ A4 o# L' Z( ~4 _14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?- x3 i, m; X1 w7 V8 e
) I3 j/ Q6 w7 E2 F/ U
A.1440秒后
1 M5 C/ p" `: t( {B.在session.gc_maxlifetime设置的时间过了后
3 y; {# T) N9 K& y4 t2 m! MC.除非手动删除,否则永不过期4 j, m, X& f" n9 a- J7 u
D.除非浏览器重启,否则永不过期
/ X7 a# S. T+ S3 |2 l% kE.以上都不对( I6 B. z+ B- L, Y- j( l6 Q0 y
0 S6 u) E: j5 ]% }5 Z7 s

& j6 C, D/ |3 m! M/ t15.哪个函数能把换行转换成HTML标签<br />?
0 t+ F1 r* ?/ s( S5 @% o/ i+ w( T
! J% j/ l" M. o1 i) m4 P' S答案:____________
' w6 ~3 H" [( j, k/ b" W4 p: P2 R3 L
' x' F6 @0 U9 g% e/ Q3 S
; k4 v- {; {. W6 N
: Q# E( W  q9 T! U答案速查2 q& F/ S* h' c, {' l. ]; l0 I
1:E. _  q9 i: Z5 {4 I& U& T
2:setcookie/setrawcookie8 P: y" O* B  {) |) v
3:B
, f0 X$ P, k1 I- `( G  e) M+ u4:BD
* D: ]6 W1 u0 h% C/ @# [( g% G8 s4 _5:BD  i1 w7 E. f7 d% M1 y9 s5 D! Q
6:D1 l1 p( P! J% o4 F* R
7:A
* M) c/ C' j/ B5 R1 G6 [8:B
9 p2 g+ ?; ^4 n# _9 H( ~4 N9:C! _4 H) i( _+ }: a8 E
10:B
8 H+ a0 B% I$ E5 d& N11:E/ @8 F3 w. K( w6 q4 l
12:A9 K! e0 J' j9 @! [
13:BD1 ?) C6 x1 U+ X! a4 A
14:B$ |' Q1 E% W3 J6 }# G2 F) O
15:nl2br
8 e+ ]6 f" r. Z- H
1 T6 R& N% d3 M7 r! C
0 W3 K  v: |# L/ h, Z9 C8 G# s8 M
2 O( ~/ M: I, M% `4 \; u答案详解
  y; T) A7 |7 ?# V0 E5 h: F$ w; E9 k* J- n" W8 Q
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
6 v2 Q, x$ {) W: H
7 }- ?9 z9 R, q; \6 ^9 Y. X- Q* z2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。$ i$ Z  T6 j0 n; U% m: z
9 n+ |) S- l3 `$ `2 P+ {. i/ m, _. K& z0 d
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。! |# ]" U: W5 N  l/ F; a7 _& f
- J0 Y7 Y+ n: [8 Z2 x
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! E: n, c3 ?; T7 c' Q
2 `8 Q) U4 c! K3 z) x- Z3 X
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。, |" R* ~/ {1 t% v9 @2 F( F9 T
. k% [: L7 c$ c4 k' ^) s
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。* Y: A9 Q4 J$ _; G- Z
; p1 E+ O9 T5 ]# Z3 {: Z
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
: }1 k% p1 o" x7 e% e+ s/ z7 i  }* J$ H: r8 l; S. H3 J( d+ V
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
7 G$ h0 F4 }3 H. Q5 y* u/ H
  ]7 B' V) T- I' H# o1 u7 c9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
& h, Q! h& l* B% t0 {+ R; F1 P5 a9 v$ m# ~  C
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
, G" x) H. Q; w2 N7 m/ D5 t& f+ L, k& e% o7 e8 Z8 l
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。7 {( `  I3 y" x$ O

5 ^9 ^: a* y/ w# b12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。% J* ^9 Q* `: B0 |# E5 U
7 F( {+ W$ `1 ^
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
. g% J* o3 c$ y+ b  Y
) O2 ~& T6 |2 Z14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。( a6 x% ~! X0 ^& K
* E$ k" ?+ z. x* z( V! p1 n* O0 x" ~
15.函数nl2br能实现这个功能。

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