返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
( A. Z$ H0 _2 B+ q, P. M7 |与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。. ~1 {4 i& {% F6 K# s" H4 g
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。8 S9 r5 }1 p% @: t" p) A0 }- M

5 C6 C! N" @7 S0 L6 G' e4 m$ @+ {2 @0 X" G4 t! ~. h) @+ I$ i+ I
问题
" ^1 q+ b' E7 j/ Y! r7 {8 A; U  J* |4 Y0 }
1.如何访问会话变量(session)?
; V) D1 H% Z: z2 m* D6 h; R. k
  I; U1 c! b, s# u0 b5 MA.通过$_GET) s1 H  z: Z& z4 _$ K/ H: L; n1 x( i
B.通过$_POST
' E& U. R% W) c, Z. ]C.通过$_REQUEST" L# \" W, U3 [4 L. ?1 Z/ ^( Y
D.通过全局变量1 s# W% \" [; b: ]
E.以上都不对0 X; V# S9 h3 n4 M' G
! G8 z8 a8 o5 ^& S8 t) K" [' v$ P

4 @# K. C" H! C  i7 Y2.哪个函数能让服务器输出如下header?1 q+ J' C" l% d5 q/ N3 @$ a2 [6 v5 K

' J& B* X0 h  l$ Oset-Cookie: foo=bar;
, ?& Y  d9 ~7 F* S$ I$ U' k
7 {' P8 m$ N; |2 u/ U: ?答案:_______________" Z# }8 \/ `" Q0 E. x) q+ }
& `: _2 F. d3 O8 N, \4 J7 ], n4 t

5 [  b) b$ t' {; c% r9 ~) t) ?3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?6 k% Y, m( `4 H) D  \7 l
0 W9 [- P% O! [" z( @( f8 r
A.通过HTTP_REMOTE_COOKIE访问
. P$ b6 h) Q% P9 `% cB.不可能
2 _& ?/ B  g6 C# o' K. x8 t2 ~& HC.在调用setcookie()时设置一个不同的域名
, d$ T6 {+ A# @3 z% I7 f. dD.向浏览器发送额外的请求
/ j1 x$ m" M' l2 [. JE.使用Javascript,把cookie包含在URL中发送& z& L" ^6 K! [6 m
4 _7 S& n6 N/ a" I

. N9 ~" S$ z2 a0 W1 A, j( U7 U3 P4.index.php脚本如何访问表单元素email的值?(双选)
6 Z8 o4 D; W1 ^$ B9 \% b+ ?
. p9 x" y& S+ [* o<form action="index.php" method="post">' p8 v# o  c( `, a* c$ v
<input type="text" name="email"/>2 H5 ]6 R) G/ E+ J
</form>4 A! G9 [! o& G) Y, I
$ n7 I3 o( U) g9 n; h) W- U8 Y
A.$_GET[‘email’]# p1 ~5 W1 Z6 [
B.$_POST[‘email’]- T7 }; ~& o3 b; ~0 r/ i
C.$_SESSION[‘text’]+ K$ A( x) q1 {: S- q% G4 N
D.$_REQUEST[‘email’]
4 N- p' ]4 j2 m7 q- D. b, F! ^, ]. iE.$_POST[‘text’]
0 v* S8 |" e! W- @! v, H( b- J$ {# R) T6 f1 D1 h& ?. ]9 I0 p9 J

- G; F& w/ X" @+ C! z5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长7 R9 v, M8 a. f8 @9 G/ U
B.没有变化+ a: _9 o2 L! @2 |" `" v) I0 }6 M
C.在浏览器上打印该字符串时,尖括号是可见的
" ~% B1 K2 R( P: d1 a7 kD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
7 m6 V) y; w) M( bE.由于调用了htmlentities(),字符串会被销毁
. V- e2 m3 M6 F: t! ^
3 N7 i+ d1 V' R8 E& N& ]2 @
8 `$ W  t2 F7 b! l( u: \, m. }6.如果不给cookie设置过期时间会怎么样?
7 @% o4 Y( r- x, c
1 O$ ~% J- G# E$ `# P5 _A.立刻过期0 c, {& {2 k+ P- a3 E9 G3 z
B.永不过期' |$ J" R" Z. Y* c
C.cookie无法设置
: M6 I  J$ r" o7 x1 YD.在浏览器会话结束时过期3 y6 I& x* Y' F
E.只在脚本没有产生服务器端session的情况下过期# h  D4 g) {7 G0 ]) ^) F8 q; m
* k7 \( g3 K: O& n: P  G5 o

4 R9 W  S3 R# L+ j. m7.思考如下代码:如果用户在两个文本域中分别输入“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 e  n9 N- T$ e$ KB.Array
2 C7 m% @; u  w3 \: ^: BC.一个提示
. m6 A0 |! `/ a) cD.phpgreat
+ N9 _( U1 _, Z: F- u' BE.greatphp
; \" p! f, S  H( ?, w/ v  |, d* c$ K9 n5 T% ^

0 L) Q7 {& X* G# Q0 p: y8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?. I! F0 N7 m+ d* T( s

6 h4 W, u9 h) u7 G5 PA.这两个是明文传输,之后的信息加密传输
' r0 ?0 |  @  z4 Y8 n% b) @B.加密传输  z* ^4 j! n7 m; m& H  n
C.URL明文传输,查询字串加密传输
: \" e4 ?3 v2 w# x1 _: D+ GD.URL加密传输,查询字串明文传输
6 v- n' p& Y/ q% K; qE.为确保加密,查询字串将转换为header,夹在POST信息中传输
4 A/ \# M% z; N' F4 p4 H8 `9 S$ F# c4 k& n) |* }* [

* `7 s. t" d+ g3 I) S: k- H9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
; w" i6 K. w0 Q* E7 Y4 t9 I( s4 i, x* w
A.它们组成一个数组,存储在超级全局变量数组中5 ]& ~/ _9 m- X! b9 l7 z
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中8 z4 `% L, [$ i5 F
C.第二个元素将覆盖第一个元素
6 m; a" |0 O# i6 P( HD.第二个元素将自动被重命名4 E0 A8 t; Q9 t6 ^$ `
E.PHP输出一个警告2 K" v  Z/ g! A, I5 n

! n4 L+ e  g  {! E
8 a  h" ^& X. u% O10.如何把数组存储在cookie里?( `$ @0 T% j4 w1 K9 R

' b" ?5 k6 f" t9 XA.给cookie名添加一对方括号[]
6 L4 z/ V  Y5 _  t( E/ {: Z% G, e: R8 wB.使用implode函数; p( E( Y6 a! x4 o1 Y) b1 H. f
C.不可能,因为有容量限制( _! B5 j: `2 C# Z
D.使用serialize函数
, z/ F' q4 p! J& o8 u2 [: `5 J3 JE.给cookie名添加ARRAY关键词
' b2 B( j: y1 l: ?
6 H- o  k5 Q: u. H: _
9 x% D  ?0 r- b9 h11.以下脚本输出什么?

  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.123456789104 o0 z% p# P( Q8 ?$ F
B.12345678907 U/ h& F' B6 R8 X: O) n
C.0123456789
( J' k" N4 e  _' {8 s+ i/ XD.什么都没有' `8 v" L: c" v0 D5 f3 s8 F8 N
E.一个提示- \, y& H  a1 w  O: u7 c# t

7 z  _# ?& Y" a- I$ T( R! M0 s" w) k) Z: ~. d! K/ q7 R: u
12.默认情况下,PHP把会话(session)数据存储在______里。$ E2 u9 L8 T: h. t' x+ \

, d# _1 H/ T" P9 ]+ |5 gA.文件系统
6 Y, K! z& |' h' K. P' [B.数据库. ]2 S8 t# L, [4 @" J
C.虚拟内容5 J1 J! X6 z' I/ h# |
D.共享内存6 n) I2 t6 S& g, K2 a% |! v% ~
E.以上都不是
" d6 N7 C( ~; ~' q& G( Q6 n5 ?( s4 Y: E, r$ G9 r$ M

; |0 F9 X' Q) L& p7 u( T+ i13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
2 N% s9 h. t* Z" N5 p
0 P  K9 p2 W6 d/ {; V' JA.浏览器的程序出问题了
: E7 P. Q5 a3 {B.客户端的时区设置不正确
! \  c9 ]& r8 s/ t# B; rC.用户的杀毒软件阻止了所有安全的cookie
9 f" x# B9 P  b4 [D.浏览器被设置为阻止任何cookie
6 `5 E( }- q" V& FE.cookie里使用了非法的字符
; ~, j& W5 a0 e7 w3 t5 }7 d$ p: G! Z: C' [* C

0 o" i1 o- o3 }1 s14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?& N# W* s' S+ {5 J! x# U- F8 Q

- u( U+ U2 ~% d! g+ U5 D# HA.1440秒后3 i4 a  W! w: ~: U) z
B.在session.gc_maxlifetime设置的时间过了后
7 k6 K& j7 e" f5 T. zC.除非手动删除,否则永不过期
+ g9 ]5 J& W+ E, pD.除非浏览器重启,否则永不过期* }' i1 ?1 c$ _7 a8 ~* X
E.以上都不对) Y9 x+ Q5 f) \9 p9 j5 h( r6 W2 ~9 Z0 }
7 y  \$ i9 x" |- J* {3 _6 J6 d

5 d# h. ?, e! ^8 m8 b0 d! P15.哪个函数能把换行转换成HTML标签<br />?5 j6 L% X- N; f' K  z& T

5 }' K7 I/ C5 S) e2 @9 }答案:____________
7 |$ [6 A& j3 X# l$ B# ^2 Q3 w! U, n- R1 ^! M

$ q, M5 l' x! A$ H* m' k- w2 {. X$ {' v. ^
答案速查
3 z/ P4 l. ~, o1:E( x+ K5 S2 X, Q% Z$ }
2:setcookie/setrawcookie
7 f% t; t  m4 V' W5 @0 d$ I1 Z3:B
8 z& W- ]4 R2 j4:BD
3 Q0 i/ C+ P. d3 T* S5:BD2 W! W. j. ~/ g! V
6:D! D8 c. ^$ |% a
7:A( L" w, o6 x) Q! ^$ Y0 @1 @
8:B
; n7 y4 n+ [2 X9:C( r: G8 Z4 J# _! y
10:B
' {$ j" ^2 Q4 h6 N) t6 D11:E
6 C- ^% D! ~5 N4 K( G12:A) l) q, ?7 h& J" L- }& h5 L
13:BD
: H2 _1 T, F$ a8 X! D) J14:B
5 Q4 T# t, J8 d$ V15:nl2br/ O6 L( j+ w& O3 s9 e) \
$ f- L3 r8 A4 {6 @8 w0 O3 P

) j4 n; ~- {- i
4 C' I8 H$ |7 ^. t! n5 D答案详解$ V. d5 T/ ~" x2 i4 p* ^

+ b) @6 A* r& y$ V; P1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。4 E( K5 w: W  ^+ D: y: i  b
+ I- u7 M+ `. b6 o3 v' C0 K& n
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
' E" C9 b: Q# v5 l: }3 t7 `2 D% o6 l% Y0 `) w
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
. H0 P- r! h  E  Y  V: e/ k# V& z4 B* o) [
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
& |1 R- O- d. }2 |  g$ O
9 H$ q3 w" n1 b' J* `5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。3 T, f) c( M$ m8 H0 z9 q3 q

) R% P( B  s& ?4 A& u6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
2 Q, C7 O1 r6 i% h8 f+ r; D) s1 P( u  x' R1 K
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。: E4 u% l. h, `2 H: J4 H1 T

' s7 v) s* ?9 I& R& U8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
* d7 K# J1 \; D+ i" D  _: p% F
9 t3 F$ s8 o# p, f7 K0 J, H: N9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
% L4 g$ P$ \) x/ ]3 K& _8 v" `1 P) @
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
# A5 h( N  j, O$ w
& i0 C4 W4 z( G$ y3 _7 Y11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
  s7 _9 z1 g" I1 a, g
+ J" u; P. c0 O0 P" f0 Y: k12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。( k! Y) k6 L7 v
2 F4 v0 e; B  y. K8 X
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。4 C0 L* T- G3 \; B: y7 X5 q; j  E

1 F& X: Z# G6 s& ~14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
  T: r2 e9 N/ s6 R. H( y2 D9 t
15.函数nl2br能实现这个功能。

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