返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
& ]/ M! m: c0 p% A; f. O- T! Y与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
. R8 {; p6 }& b1 `0 Z一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
1 Z+ Q5 ~) O9 p- J: N' ]( h4 v- y. H4 |+ ^: X
4 [+ q) ?' w* }7 d' W
问题2 C0 D/ g! n& k9 T+ ?5 m
4 ?9 m5 [7 o/ `) N
1.如何访问会话变量(session)?7 E; h- z' i% N
/ M5 m3 t1 ^, D8 ^2 W
A.通过$_GET/ J7 U+ a5 C; H4 j' x4 L
B.通过$_POST
" g+ z* L! ]8 w4 L* OC.通过$_REQUEST
" Z- ]5 n" m* x: B0 ^# \! G. RD.通过全局变量# A8 U/ t7 R' a! K2 }  ^' E
E.以上都不对
$ I, t4 M: Z8 {( I. b, C* F7 Y% @2 y" ?2 Q$ T
. |4 l# K  i% `/ {( S6 e9 D
2.哪个函数能让服务器输出如下header?
6 ?7 r: m- g% T8 @( w9 }8 y; f
: p9 @6 F" l3 Eset-Cookie: foo=bar;
, r) [# H7 U$ n3 i" {& D
- B  a3 E' A, H$ |答案:_______________
9 d6 ]( {9 ~) a* T0 e0 V* C5 p' E. p

2 g; P) @7 b: ?; I8 c3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?! Z- U1 B0 v- d  @# O
3 k. \7 X0 Y/ p7 `1 `" W
A.通过HTTP_REMOTE_COOKIE访问
* k* t7 l1 q# u' F8 B- OB.不可能
; e, b9 z' ?% ~2 R4 |% j! A& x) c. WC.在调用setcookie()时设置一个不同的域名
  D% V6 ~( Y9 uD.向浏览器发送额外的请求
' \) ^- J* |1 C3 \+ Z/ t; a0 HE.使用Javascript,把cookie包含在URL中发送
' c3 {/ b4 J4 w- y! n+ ]( [
( z" a! w6 @5 F- p% u0 z: d8 ^
, b# f7 s6 X% b, _  ?' Y0 B4 @4.index.php脚本如何访问表单元素email的值?(双选)' L1 J0 D+ K9 D& i- u1 q4 @1 y( a8 K
: P3 z% N! F, _& }0 y. V" L- S
<form action="index.php" method="post">% m. @7 w/ D8 v2 K. Q+ q6 H2 w
<input type="text" name="email"/>
1 o5 R! t1 u0 A4 C+ A( e2 l3 c</form>, D$ ?) }1 I" L
2 Y& Q) M# p/ ~3 b
A.$_GET[‘email’]
% Z! }) d. b$ g4 W5 g5 yB.$_POST[‘email’]& Y# P4 c5 D- _) }
C.$_SESSION[‘text’]9 W4 e) r0 b, m  e5 W6 f
D.$_REQUEST[‘email’]8 ?+ v3 ?0 i  Z6 u
E.$_POST[‘text’]" N( F  j* y5 t/ b2 F3 q
' ]/ ]8 @+ d6 M. P$ b
! H; `4 c/ s$ f! l2 d! T% P
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
3 ~+ P. r4 t2 v, [8 \, mB.没有变化
! q5 k# x9 [& S7 b$ Z( p  NC.在浏览器上打印该字符串时,尖括号是可见的
- P1 i0 @7 u: f8 AD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
& Y6 s0 E& a2 y0 w+ C4 Q1 wE.由于调用了htmlentities(),字符串会被销毁
4 ~: W% j, l+ f
: l/ L- Q; }- T$ \2 {% W% u8 ~& y: `. _* ]2 h1 q
6.如果不给cookie设置过期时间会怎么样?9 d  Z% |5 G. j3 k/ \

& c* i( a  `  P" ]A.立刻过期
& J% L  V: Y! t7 {& ?( QB.永不过期
' D' K: O" _" V- Y+ f. d2 cC.cookie无法设置
2 w2 R" u/ P1 B# y3 e. {+ E, |! @7 iD.在浏览器会话结束时过期  B& h# K, w2 }
E.只在脚本没有产生服务器端session的情况下过期
' b, Q; J9 C& q
5 x" K& J5 G- r5 C# G8 G9 f2 ~! ~/ P0 R# x2 L/ h
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.什么都没有
: O0 {+ _$ {  W( ?9 A$ l7 |B.Array4 {8 z! L8 k) h2 H
C.一个提示
8 X. w. c2 i8 VD.phpgreat
9 d( H* V# ~+ p8 _E.greatphp
* [) x, C- W. [1 \. k5 [7 g( o# w5 H) O% N

& i, K  {1 D1 b/ I0 x8 I2 m* J8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
7 ~0 a5 V% B5 Z; @1 T4 q3 l0 V1 ]3 ?; `1 _' P
A.这两个是明文传输,之后的信息加密传输
; _- C& r5 ?% ]  [% D% D. t* eB.加密传输1 h! @0 w4 U  H7 A. L1 t; O
C.URL明文传输,查询字串加密传输
; J$ G4 ], ^4 R* a; S& \% a# jD.URL加密传输,查询字串明文传输
8 E/ A0 U- E: m% uE.为确保加密,查询字串将转换为header,夹在POST信息中传输6 |. m: I4 j; d% g5 a9 S- P$ r! g1 O

: W& q0 r0 }0 t: N$ F8 c8 n2 O! [9 S
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
: [# I1 i6 R' j$ z* K( p8 X- {5 a0 ^- O: P
A.它们组成一个数组,存储在超级全局变量数组中
; q# T0 H  H! d. VB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
; F5 N2 d6 W. Q4 A! ]; k6 eC.第二个元素将覆盖第一个元素
1 U# P1 i7 W1 w' ?D.第二个元素将自动被重命名
1 G5 j- |9 Y: V% sE.PHP输出一个警告9 W6 U6 [# ?+ Z# l7 l

2 ^( P, P6 e" P( F. ~% v4 O$ ~+ x" v9 f
10.如何把数组存储在cookie里?( S7 ^# u% P6 s0 A6 Z
! U! q" H8 a. [
A.给cookie名添加一对方括号[]
9 {. {! q- L  T- V2 rB.使用implode函数
+ n( m1 d8 i! n. j2 Y1 {) p* jC.不可能,因为有容量限制& _, a0 J( ]9 D6 W% M+ k
D.使用serialize函数
# g5 w5 z; |; b: EE.给cookie名添加ARRAY关键词
4 f4 K0 `* @- k$ D* E2 a4 G2 v% _: x) A, C
- D: {$ |' u4 U: m, V
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
( C9 y/ \3 c5 ~7 [6 L! ?  L9 Q/ ?B.1234567890
/ o; w' S5 g! X! t. {5 z& iC.0123456789
- U" ~, y/ i6 t1 p! e) zD.什么都没有
& [7 B" _+ ^! W5 o+ b- o$ uE.一个提示
  E/ \$ ^' F% a5 h! T  h& B$ K; t0 {) B" o+ F

/ _( H' |- P3 C6 N& n5 a7 E12.默认情况下,PHP把会话(session)数据存储在______里。
9 z  _$ x* a3 r3 `- n/ ?# u. D; h1 F- x7 b9 B
A.文件系统8 f) V; n% W: U9 b1 y
B.数据库
* q7 J5 {* s4 F  |8 Z- X$ x: `0 o# MC.虚拟内容7 @" S* [# g3 p, t, d
D.共享内存
* ?9 s7 b; a& W. L4 G" B9 YE.以上都不是
- j1 z1 V+ W' O  ?: y: m  S* ~1 J+ b* c; @) ~) O" W

5 ?, r8 ^% m: J. W8 `2 x/ m' x13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
5 j& [* u  y  L% G) j6 C" B7 k  _
! l9 S+ J0 w# m2 h% V& `A.浏览器的程序出问题了
9 U. Z3 ~0 y- h* i- s$ VB.客户端的时区设置不正确
& ]# T: n( a! SC.用户的杀毒软件阻止了所有安全的cookie; [; r0 |( U0 Q" S8 x' }
D.浏览器被设置为阻止任何cookie2 R* F2 p# e% m+ X+ S
E.cookie里使用了非法的字符
) w2 G. R# m6 G* u0 ?: u* p9 y: i# g5 U# x5 v
; J6 Q% D. y5 i, a8 ]8 a
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?+ ~& T, ?- P6 m) b
4 B& l2 w7 }) A1 s# j6 s. T2 Z7 K
A.1440秒后
, {5 P  m+ e) z0 NB.在session.gc_maxlifetime设置的时间过了后- Z' U7 b( x  ?+ G5 K5 w
C.除非手动删除,否则永不过期
0 {3 M) Y6 o9 c9 d2 K* @; `6 PD.除非浏览器重启,否则永不过期, n7 m3 Q* B, k1 ~* T9 W3 j/ W
E.以上都不对
* {" b* V8 L& u
" ?! Q1 d/ Z. S* F9 E4 Y/ C
2 Z9 V) \8 s0 I) h& W0 v4 X15.哪个函数能把换行转换成HTML标签<br />?" R* d5 B0 \6 x3 V# }, D
" m0 t- z. o: O
答案:____________
5 H  Q# x7 P; `" z1 b
( u" A! h& Z: l$ ^% V' o4 Y
  }- P5 U8 Q. X1 A4 k3 |' Z" m9 a
+ a0 d- d+ |" h. s4 {2 z1 R9 |答案速查# J9 }& c5 S, w* r% _' z+ G
1:E5 t- m' P6 Z# q% U
2:setcookie/setrawcookie
+ V5 F: e* C- y7 {3:B/ b: i# U- e. c4 _/ C7 M2 ?$ l# f
4:BD- f+ \+ S+ T8 w! n; g* K6 @2 y$ I
5:BD( L. P) L0 \4 `4 r5 R' F. Q
6:D4 ?2 U: o! y2 x9 A3 e' `+ S8 r
7:A
' R  a! d* J9 b8 i2 [* j* n* Q8:B, b2 L/ H$ d% N1 q1 m% o1 p
9:C+ l- H- a3 g' j  s# k/ W% l
10:B2 i: Q- ~- X4 k& h8 @# I& Z
11:E$ D  y' d/ Y8 o
12:A/ p# j, W5 B, B. V9 w
13:BD; ^/ s4 y. w! b0 ~
14:B/ V; `9 i& P5 Z) t# M
15:nl2br1 u4 h& n% Z0 {0 W+ D/ u0 N

  n. R4 X% J: m9 d, T4 d6 ?( B/ F; t+ r

1 y# O, T3 r* J/ L1 ?( J+ i答案详解! u/ d2 l# M; M# n# B2 I: c
& e  K8 q6 C  w( ?
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
9 q  u, j! T) t9 Q$ x. O# `* g
$ |% U* l0 i8 k7 [- F* i2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
$ v  s+ X, @4 F  S* b5 e7 i5 S' }/ V( n) F: N/ Z
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
" |9 {# E! L& L7 Y% \# F. X7 J
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
$ `) c' ?6 v: R1 i/ q& [7 V9 p' W- [; |$ ]# f% _% d( K
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
9 Y! K: Z7 v( d) A# x7 ^, G% i8 Z+ b$ x4 |5 x: C) M
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。% f! ~* Y, Z! C- l

- {$ s. m* A6 s4 z7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。. ?; E# V" F7 W) j$ x( t
) _% K5 Z3 H: M" }) P+ d
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
  v* _7 p. Y- \/ F3 `! m* k0 j1 `( S+ ?# `+ ~+ L
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。! d7 b* r$ R6 N: D4 ?

. y6 V1 C; B8 `- u. e- E8 d10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
7 j) k( k! K: E9 d. L$ ^2 w3 `/ i8 N9 i
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。" \8 T" t" w/ w5 ]1 h- B

4 q, W. c# F9 C1 h) J12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
9 P9 I6 _3 f1 s$ p$ ?: v( ^( K1 k) V3 e" y5 K. M  x
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
5 T3 K' y. i$ T$ Y1 t6 r' G* q( A% O" W' h% N% W5 z
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。$ Y' [% l4 g3 @2 x( ?
6 ^5 Q, w/ w3 x+ |* [
15.函数nl2br能实现这个功能。

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