返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
9 ~+ K# R* F. t1 p& {- Q2 ^与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
6 _8 H4 s! T7 l' B9 b* C7 J一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。6 L0 b2 z) |7 V# W; P1 a$ w
+ s5 O1 U, {% T8 O8 v2 C+ }) N8 o' j! X

4 ^) r; u9 j- k& O2 Z$ n7 H问题- A! ~; I7 D7 H1 t
" d2 k7 B8 c: ^- P
1.如何访问会话变量(session)?) s! B) H, Y& F) z7 I- O

: q7 M1 p9 v0 m6 b7 w# N! UA.通过$_GET
0 r- N( _/ w: i7 rB.通过$_POST4 M3 r0 }4 l- M, ~9 |% B
C.通过$_REQUEST
- r) x- f9 x" a' }' y- BD.通过全局变量' ^  D1 d5 ^/ Z/ g, Y* D! R7 r2 j- ]
E.以上都不对7 S  v; h5 [$ n% {

4 e4 u5 K/ O2 F2 a' e  }
, n+ W& A  k7 n" u; M2.哪个函数能让服务器输出如下header?. R8 y8 g0 r# [7 u
/ T- F7 v8 z. T7 R2 [1 h
set-Cookie: foo=bar;
' x; z; S- A2 X6 v, e9 ?7 x
9 q: Q6 B/ \  E# ~$ A* r答案:_______________
3 T3 Z. o) J, w+ {
) p- z% H/ r5 t( t6 a  U
" C0 r+ x' J, y  ?* [3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
' J3 G: q8 j2 E. e
4 R& d4 q% w) L: U9 rA.通过HTTP_REMOTE_COOKIE访问1 u! X5 J0 h' I, V% ~6 G7 ]
B.不可能
- p4 g$ b( r$ S% wC.在调用setcookie()时设置一个不同的域名
7 b8 A3 u6 I7 B  C7 A3 _  q$ y% ?D.向浏览器发送额外的请求
: V; `1 X* L+ _* h: a) YE.使用Javascript,把cookie包含在URL中发送9 ~# D8 w: `. d1 a$ b
$ |4 x2 I" b1 P/ N

  x, m, U& L0 K0 p, G+ K+ Y2 g4.index.php脚本如何访问表单元素email的值?(双选)
0 f; X9 I- B. A( {: }4 e) w, z# x2 _; E/ r  g$ Z  c! V. T
<form action="index.php" method="post">
) o2 N$ O* S. A4 |<input type="text" name="email"/>+ U0 C/ ?+ q6 a5 c7 t$ \$ Y
</form>
9 M1 i8 ^6 }5 L& P0 ?% E
" f+ r+ g' p3 p$ L4 FA.$_GET[‘email’]% t) K; w+ F0 @8 h, l; j" _
B.$_POST[‘email’]
3 c5 I) P# [1 }6 oC.$_SESSION[‘text’]% {3 j- m9 f1 W& N. m
D.$_REQUEST[‘email’]
; g: H! e8 z" W0 {5 I2 N+ n% N) DE.$_POST[‘text’]
; {+ C/ U. ?6 @: h2 t  H
! [7 ^3 M2 w  f' J1 d1 X' ^$ e1 R% j& n  e
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
7 f- ]2 I$ b, X& T* GB.没有变化9 b3 [7 |: }) V: p
C.在浏览器上打印该字符串时,尖括号是可见的; I# o2 A# g4 c$ I
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见! o  S5 G4 J- Z- J) H4 S
E.由于调用了htmlentities(),字符串会被销毁
3 {9 m* K0 b- g- q& X0 Q: r9 ~- h+ [: G, [7 u

0 K7 g( S* E( b6.如果不给cookie设置过期时间会怎么样?
' S5 m6 S- w5 M$ v9 [. G5 R, T* `/ L
2 V0 a. ~) D6 s' L: L' M( QA.立刻过期
+ Q& M9 W! E- AB.永不过期
- W" @/ D8 Z( u7 \C.cookie无法设置
# z4 u$ x! U6 ~D.在浏览器会话结束时过期
! h* D; i" Z1 P6 n0 WE.只在脚本没有产生服务器端session的情况下过期
: C& f7 K! i' \8 t! E+ w0 Q! y5 G" M* b6 ~, a$ y. b

; R  W/ y+ [5 m" n. u7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
3 Q( k2 Y2 r* S  z% bB.Array& c% q! G) I3 i3 }' f' V1 s
C.一个提示
) J6 d, N& A* i4 tD.phpgreat
8 w: t# N* ^1 p. z6 k& N& J( ME.greatphp/ S6 Q8 C# y: L+ j

  v" l- h% Z3 d2 I( r
9 ^% \& R8 h" ~& f8 I4 t, M8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
+ ^8 r% x* J5 x' ]: i% f
/ W1 b* G' ^5 q5 K" h& u2 \( S4 yA.这两个是明文传输,之后的信息加密传输" N7 G3 x% J# S- W
B.加密传输
% J5 V" w) w8 Q& {& L2 w3 d8 E  HC.URL明文传输,查询字串加密传输1 n/ Z' x. G: i& }" f
D.URL加密传输,查询字串明文传输
) i' N* o( @# P5 H- oE.为确保加密,查询字串将转换为header,夹在POST信息中传输" @' I: M- n8 W1 C

  z9 Q  B3 B- }$ q, z7 Y" d9 L
6 }* `. n$ P/ w- m- x, S3 s9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?5 v$ ^; h" ]# i7 E9 B
: ~4 d, A2 G" d/ D) ?9 w+ M
A.它们组成一个数组,存储在超级全局变量数组中
1 J* D' m- B* k1 G. h) dB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
; {9 p. }% W# \/ n1 [8 QC.第二个元素将覆盖第一个元素
. m; m8 D0 _) b$ oD.第二个元素将自动被重命名$ J2 s1 I" w0 M  {9 y& y& t' U
E.PHP输出一个警告% w9 U# B# Y1 B4 j) C

3 q, X% K# c5 ?8 s& b' @0 a" Z& p! b
10.如何把数组存储在cookie里?
: j9 C' V4 w/ g/ j& u
  }$ @+ s2 g; ~9 K- Q/ S$ XA.给cookie名添加一对方括号[]2 D  k( J- {, {( s/ U# @
B.使用implode函数. m  U  U/ _+ X6 q- ~
C.不可能,因为有容量限制- |8 `) ~* M6 m  ]& i
D.使用serialize函数
1 A0 r, r" O9 L* xE.给cookie名添加ARRAY关键词* m( d6 K6 L8 N, c7 G

: ]8 c5 ]/ @) P, Y' P4 O6 u3 L" U8 b) s2 q  o
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.123456789107 }( e" R; }6 h8 h5 r6 y1 L  e
B.1234567890
% x1 Q: }7 |3 H" dC.0123456789
$ v7 ^6 K7 e* u# W! H/ E) L% f+ CD.什么都没有
( r. ^' B; N8 n3 Z% a* t7 sE.一个提示+ P  N1 {+ e0 a3 V7 F% X* q8 o: M# {

, F5 R- m# z* i! g1 y7 O: Y
: ^$ k& B  f; \! |5 Q; |12.默认情况下,PHP把会话(session)数据存储在______里。
: v0 e/ y" c; m6 E. N( ?
" F% o3 S2 }* C. YA.文件系统6 q) w2 g, j3 P) V
B.数据库6 `0 J8 W% \# M2 m
C.虚拟内容
% ~' v# y( w4 C. x' n, E- J6 c' }, ~D.共享内存
. n) ^& P3 N$ i* @' b1 gE.以上都不是5 R) z! C: O2 T/ i$ Y
; w  C5 F) }0 a& Y0 Q

4 [+ I5 V  J$ X' k13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
; u9 G2 O+ _" l7 R3 b& I6 R( y2 v
/ ~* h% k  u5 UA.浏览器的程序出问题了
& t! O) q( Y. QB.客户端的时区设置不正确
5 a2 [, c3 v. {5 W; C* S+ TC.用户的杀毒软件阻止了所有安全的cookie
  U: M+ O5 \- H5 SD.浏览器被设置为阻止任何cookie
9 Y! P3 W$ {# G; aE.cookie里使用了非法的字符/ b; L: \. u, `( h" A8 E
+ z  ?8 [5 O' x& F' i
+ }3 z+ M: A- V0 Y" N3 |
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?  z" A$ B8 y% h6 t5 H' G/ W/ P
1 X& R2 m# f: C3 [7 p( a
A.1440秒后) h! k% P7 b& k7 u4 x' [3 m
B.在session.gc_maxlifetime设置的时间过了后
# K+ [7 l# ]3 a) K* a' |. R) v' AC.除非手动删除,否则永不过期- \7 ^" o8 ~' u2 \. [+ }' {  v2 m
D.除非浏览器重启,否则永不过期
: C5 m0 ~5 x: Q4 Q; nE.以上都不对
5 F9 h2 C5 Z+ z& f5 L. g: l' k  g- |" Z6 S* k

  X( t1 c9 p3 M" L: s15.哪个函数能把换行转换成HTML标签<br />?$ D/ w6 h9 S$ N) F9 `% A- F- E

7 J1 ~- ^% ?5 x# O答案:____________
4 N9 \. D, H; P- F) p. q
( m* X4 K8 }1 v6 P% V. ^( G% O! ?# H$ ~# I" ~+ v( Q
* C' Q" k; Z1 p, p
答案速查
9 A5 R- ]* x1 q3 }' ], q1:E% }7 k3 \7 G" D1 G- y" d/ W
2:setcookie/setrawcookie
( l+ \" s( u! i& F  D8 F2 }3:B
0 G2 S  G) p% _4:BD& q4 t" o) Q+ s7 l# {
5:BD
6 Z# q4 H9 H. Y# b( P6:D& G* G3 A* t- P/ F3 G  n
7:A
2 o$ X, A& T: v2 [' q8:B/ I5 W4 r+ f3 K5 T/ z% v1 T0 s
9:C
2 D+ g/ \7 A5 ]0 w; h6 W$ l10:B
+ Y, B! _- g/ f3 U+ F* I11:E
: r+ ]  F: ?9 U' t12:A
0 c# C7 {' K$ H3 W7 |5 f: C13:BD
# S4 ^. ?5 T% K4 {* Y; c  S; b14:B! L) k: \: v( _& d3 z+ f$ b
15:nl2br& `4 U! M# F0 n0 Z0 x

' _. A2 k) J$ Y; X1 m3 F" T. J! ^
4 y! i8 C, V6 P$ N: v( j; T8 U3 s, w* A) P0 i, ?4 l5 v. I
答案详解
$ i9 J; w, c$ p& m# K& t* w; P9 D& H+ A' j
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。7 g* H3 I: X! H* d0 O+ J

2 Z! x3 ]$ e; G& \3 U4 m2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。* r; v: \6 q3 o" h( r
/ |5 C: N- I% e2 K) q# n
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。. {7 F6 |. f8 ~* J
% a% Z# g- q  F( C/ @; e4 I3 h8 n
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
; q' @# I6 o* G, x; N4 E
6 [, {& h" Z/ B- H- Y  s5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。, s$ j0 D* h# f; j
6 {* s6 g8 k6 B7 N0 `* e3 F. I9 Y
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。3 K9 L! |! ?$ q% B+ F

- j) \' R7 u$ V2 Q( h4 ^7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
. |1 q; R$ S7 a# o( h! W3 j7 O
) ^, m7 [4 N2 C8 }+ T+ r# j( @" w8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。  G- e" V1 Z8 O, y1 g

! D4 C3 u6 X: w. m: H9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。) T( c3 D& J3 X! k0 w4 w, h
& L; [8 i7 `# J+ W
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。6 a4 J/ ?/ u0 ~2 d% O3 e; k/ l
7 _# _/ l9 x" }3 j1 k
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。  h# Y; P! C: J- j1 _
5 A  ^) h: K8 m5 K) {
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
0 L$ j& f' N. N, D
) O. t+ t: i& o, [13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。& O% V  I! A1 x  ^& q# \# P4 u+ `

. X/ [$ E; u; \- a  t; h14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
- G9 {5 v- a. _- G2 e3 s: Z+ v$ S, Y4 K7 Z0 W' r4 p  z0 A
15.函数nl2br能实现这个功能。

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