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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。# h  d* g% y# T/ z1 l$ M% ?6 B
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。$ a- ^6 @8 }" ?: p: O5 B
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。& D& p& k6 R! N
4 A2 \/ M! Z5 [) F1 I

5 P; i- k3 o/ n; O! c3 _问题
/ G- K+ c, O! |4 }+ R0 |5 ]% F4 k  d
6 [7 |, [. {8 d( i1.如何访问会话变量(session)?
1 ]3 d: ~1 L4 H2 h5 o2 P
% u1 {' c0 Z4 o" d) D# S% \6 rA.通过$_GET
8 D7 y$ Q& t1 |; p" K4 `, hB.通过$_POST
8 Q' ^1 L# w/ z2 o: xC.通过$_REQUEST
, B- B: j. u+ Q/ A, a3 ZD.通过全局变量
/ q- H3 v& L& e: N. }E.以上都不对- }) `" f5 U0 n3 \5 P2 {
- V! q' i; e. O3 v+ ~( A0 {; \, l& H
( o9 W3 m0 z8 t, T/ O* G, p
2.哪个函数能让服务器输出如下header?
+ P0 v( f; T: m2 Q9 o
$ c3 m9 L$ a3 k, D. sset-Cookie: foo=bar;
8 Q7 y7 C$ t* |8 A" [* c5 ?) m
. N3 _- I$ P' ~; K答案:_______________1 |( F% S/ f% q; R

' C5 E& K/ x- f2 \; x* K7 K  E+ _1 b6 t) [: x
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?5 C9 _' [. h3 V! g4 j9 ~

& M9 z( k4 H  X* w! ^1 HA.通过HTTP_REMOTE_COOKIE访问; }- H8 d' O. e5 w# l8 P" K
B.不可能( W' m3 C4 V& M5 q- [
C.在调用setcookie()时设置一个不同的域名
0 ?; d7 [9 [( p; X& q0 sD.向浏览器发送额外的请求
: R6 r: l# ?/ u) C. s7 FE.使用Javascript,把cookie包含在URL中发送% K. }3 k# ^! X

, u6 [2 p2 u2 P# j* C- Z2 N% g
6 M! d5 n" U6 n6 Z4 V  W4.index.php脚本如何访问表单元素email的值?(双选)5 y0 P# a9 q& S5 }, F" g# h

% H4 w/ v2 J1 h( q<form action="index.php" method="post">5 X8 g! j( t3 i! }1 a4 Y( J  L
<input type="text" name="email"/>' U# j8 x7 K. T; R& f9 S, S
</form>
/ j! h! r" v; C- H& k/ U9 @- @9 Q# c
A.$_GET[‘email’]
5 @/ [/ Z: }5 W* Q5 _B.$_POST[‘email’]
9 }: x3 {: p1 }; k) UC.$_SESSION[‘text’]
% j' R7 s% k' s; G; R& xD.$_REQUEST[‘email’]
2 a9 B7 h$ M) ^7 P) i1 @1 wE.$_POST[‘text’]
4 q! v  v# c' u: L
/ g0 u" \$ p4 v. J1 |: V1 J2 [
- j# f; m$ g" n) }! \; |/ j; \5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长; n# w# `, l1 ^" `( S
B.没有变化4 ^6 F7 D0 G, r1 D6 g
C.在浏览器上打印该字符串时,尖括号是可见的
! W+ J: W; s7 ?+ B5 vD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见$ k, d' {7 n, Z" y+ a! H$ ~
E.由于调用了htmlentities(),字符串会被销毁" |8 ^, V+ U; f* K; V- j  x; M8 l
+ J1 m1 c/ R$ z5 e% m

+ ?! }& C: y3 [  f5 h6 Q6.如果不给cookie设置过期时间会怎么样?1 P# h% T, n0 c6 a4 p
( b4 p! n  H/ K5 Z% a  w
A.立刻过期# Q2 d# A! a9 t5 e* ~
B.永不过期5 d: P  n0 C9 e; w3 Z8 B7 J
C.cookie无法设置6 |9 A" k3 z5 Y1 A
D.在浏览器会话结束时过期3 S- X3 A( I) j, `) x+ Z& Q/ H
E.只在脚本没有产生服务器端session的情况下过期/ Y" ?" q- f/ V# S
/ x$ r7 c' k3 s. {  `
( `) M2 B6 w$ b: m7 r
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.什么都没有
' E4 a6 {! g1 y# f$ E9 I' M& ?B.Array, q& J* s$ `" _) g8 \, g+ E8 t" E
C.一个提示
6 E9 |( I, t2 k. n, T- CD.phpgreat4 u! D" F/ c& ^7 t/ g/ ]& a
E.greatphp
. f. B& ]. `  e9 c6 ]2 Y
  g& B, {4 D, o" ]& [( L5 T
9 f' Y* [/ A9 c' \8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
" J* Q# W5 ?7 M2 |/ \
, S. I$ ]$ n1 RA.这两个是明文传输,之后的信息加密传输
' T- N& N6 ]9 m) [( zB.加密传输6 D% }6 z$ X5 A4 b* w! z5 q& O
C.URL明文传输,查询字串加密传输
. O; t9 M* q  n0 ?6 M: a) h! CD.URL加密传输,查询字串明文传输6 R5 }0 F) ?1 E: y0 C
E.为确保加密,查询字串将转换为header,夹在POST信息中传输) T! }4 c9 c: U3 }

; N4 V: {* _/ u# E* n) p1 s! x% M+ X! z$ H$ h7 V$ [
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?. R  a+ B  ~9 Q9 E  I

$ [) c: A  A: E/ J2 cA.它们组成一个数组,存储在超级全局变量数组中: A- p6 o. }  D8 ?! z3 B, c8 D
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中1 {0 r5 h0 V3 r2 i6 Z
C.第二个元素将覆盖第一个元素' z- f; a4 o& t$ Z; C2 \
D.第二个元素将自动被重命名' }# K% z- V7 [8 X1 U
E.PHP输出一个警告
" ?0 x# A3 J1 E" \9 ^, Q' [( c8 n5 p

2 R0 V( o1 R, V7 w" T7 N10.如何把数组存储在cookie里?3 ^9 g1 f6 B) u5 Y$ k

! X. N; `  {' sA.给cookie名添加一对方括号[]
+ q, f* y; c) Y! Y* r0 wB.使用implode函数
7 u) i$ }0 K$ Y- g9 ^& sC.不可能,因为有容量限制
: C  F9 z2 F5 s! ~1 M8 GD.使用serialize函数
- n5 g: U. l9 `# G1 n: X0 K% RE.给cookie名添加ARRAY关键词1 \7 D2 h& L2 m' q
4 \) M1 g# a; I# T. k

+ B5 Q9 P8 L0 u' _! [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.12345678910# n! Y4 Y5 U0 N- t  K
B.1234567890
, S: _( a  I. _- g: O$ |  O4 PC.0123456789
; l% k. z( U+ f8 PD.什么都没有
& z) E* |- v+ z6 H7 I$ LE.一个提示3 U. E5 q: X+ x/ k

3 [/ F. t# `3 H6 t5 E+ ?! g6 c2 `2 f5 ^$ V& W
12.默认情况下,PHP把会话(session)数据存储在______里。
; ~2 E. E  s# x9 }8 C/ d
4 p  \; e7 X& {- B* [* L" ]A.文件系统
- S& w# l- B2 U8 U) D' P3 U/ s9 k( UB.数据库
4 m) m2 W# Q& U: c. w' r3 P0 ]3 VC.虚拟内容9 k$ M+ z% v, r- N' G5 v/ \! S
D.共享内存! ^: R7 f0 R8 @) b% @8 }
E.以上都不是
4 ~7 @3 G2 q8 W6 g: j( E' u* G2 Q, ^+ n

, i" A3 A+ R" ~, F* F6 m13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)! E( {; F" S/ u$ B& A
7 \# W' F, E: g4 m% m5 C$ h- J
A.浏览器的程序出问题了4 w" c2 ?6 w* C. {! q4 I! t
B.客户端的时区设置不正确* |% b- ~( a$ P1 X; ^
C.用户的杀毒软件阻止了所有安全的cookie
- U1 `$ l& N' ]4 `& S* BD.浏览器被设置为阻止任何cookie& h9 M" f; c1 B2 ~1 V1 h8 B) N% X, z% t
E.cookie里使用了非法的字符0 T2 v2 B  v" C( q

1 a! u( a  {2 O: s3 R' B! R$ |# h/ Q9 W4 F' _! Z0 `) G
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
1 [" B# ]) c6 z6 {% y& `# R3 J0 {& @& j) k1 v& W$ I6 {
A.1440秒后
( p: T: Q# p9 S/ }B.在session.gc_maxlifetime设置的时间过了后0 l% O4 y  [# G4 c  j
C.除非手动删除,否则永不过期* ]! ?3 M7 r$ A$ F. z
D.除非浏览器重启,否则永不过期! \: \( Z% W; t, f$ s
E.以上都不对
/ W) s& N/ Q+ ^8 G6 H: q* \$ u0 o
4 T) T! B6 z4 g" |$ d# F/ o. N/ g  S
15.哪个函数能把换行转换成HTML标签<br />?  v' l3 w) L& G# ~4 O* Q; C0 Z
# Y8 c' `# E3 o! v  a3 {( C$ R4 U
答案:____________
( m* m& G3 x% g, G4 U) Q- c3 k& ^( @. E; @9 z6 N, j$ A5 n

0 F2 `. T2 [2 J* l4 F+ }) s9 G  j& F* B: C6 i* |" A0 W1 W! @
答案速查
: [6 c  A6 J' b' C: ~1:E
7 k0 f! J& ^. Y% S# Y* T% q2:setcookie/setrawcookie
# i2 i# Y! u7 E& e( D  ~/ Y! _3:B( q# n! ~* p$ F4 I" K9 e/ W: D2 G
4:BD
) @9 m4 Q' a, q& q/ k& p5:BD
9 A. u: D+ E4 `* i( E' M6:D$ ?  m/ i. ?) H: d
7:A8 V* P& E" n* ~2 m' X; a
8:B, h! l% K; \% d
9:C; k2 `' b# d$ \' I& Y
10:B
, j- Y- x) h  p( m5 g11:E
/ o5 R: r0 y( p8 B9 a12:A
- O: w# M( Y. t4 g9 C13:BD( X6 d$ }6 h# M0 L! j+ Q- a
14:B
9 p9 a: Q: D& a/ d" j  B7 Y9 h15:nl2br  c: v5 \  B6 z

# I7 Y# V- I8 @8 x' }7 B- Q: q
+ h, w9 X, B+ g+ g3 m( C* z% U4 l, z7 W- L' B% C
答案详解% E) j, l. `; p6 a; h. h( N

7 c5 F) W) ]  I" q2 R2 `7 ]1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。  U* T+ F: L% ~4 a# @5 d( Y
8 |, n0 k0 ~6 m* [
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。; k, W7 z" @! ?3 t: Q) A! P  X

& F' Q  m7 f0 a' Z6 T& A3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
) x  {, J; D. S0 u4 u9 m& o+ J; |1 Y& H2 Y. o$ O! v# c
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。1 r6 d8 W6 Y7 H9 O1 [

) G4 q, r* w7 _. }5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。: y0 R' D- Z6 V* D

' O5 A0 q7 N( f: p+ W6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。1 {0 J: |1 c" B' A( ?
. s' O# L2 l0 g9 [8 C, \
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
& \6 n0 o% |3 i% }& f1 O+ e# `6 O4 K/ L: a7 x5 m) W0 c
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
1 A9 l, ?/ D8 y5 ?" G$ ?7 l' H: A- B: j* `$ _. \
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
  }, \- h, t: `: l' A+ w. ]3 I0 F' h' `+ s4 ~: s/ x9 a
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。# @, a' v7 b# `6 z* [& Y' Q

8 @' E* R+ C' K  }( l& {11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。8 H$ b# A* m2 ]' T  C+ l

/ V% q0 O* X$ h+ J12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
  f7 Y- \0 l1 a; D
- D3 R. S( B% M6 p! f8 l13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
, ?$ c1 o( u9 h; s5 d8 P0 x& }" n% D7 K1 P# s' J
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
. k! r$ O+ M6 M! N& [& ?2 r& |1 ~! C, D+ c' o* v8 }7 ?
15.函数nl2br能实现这个功能。

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