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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
' H; b0 s% W% F% ?3 ]9 U' e! `与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
  E1 |7 E4 X( t# [9 w一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
3 W  j  a- A  @1 ?) D) T7 R" W+ Z% h2 O. j, G. `, |) v
0 O2 q2 G& r, E7 t% _
问题
. ?4 m) K0 U3 X: X) O6 o: d7 P" Z0 Y2 I' k7 H9 ?/ H2 O
1.如何访问会话变量(session)?
$ p$ {4 d6 A- u3 H3 U( l2 m
" j/ v8 h' j3 a  l/ Y, iA.通过$_GET2 A2 j. E+ ]1 D8 x* I
B.通过$_POST
  m6 B8 M- f- D5 T8 \C.通过$_REQUEST
. T6 n& \- R7 w/ m; {6 j6 n" ~2 `: tD.通过全局变量* @# @! L& y" ?/ E7 P& M
E.以上都不对5 u, b$ K6 `; |5 L( \

0 {& O" s1 W( A( \2 V, k3 D3 f% d/ K$ e' o8 w* m- V
2.哪个函数能让服务器输出如下header?) r. }3 [* Z. u  a# J6 E3 V, _6 F, |

, A$ E$ }. k8 f7 @set-Cookie: foo=bar;
% g! D9 y( _5 i3 F9 w1 `! \8 t: n5 n8 F! G' G- ?3 ^+ _" k+ d9 j
答案:_______________
: |' @5 p' r; [; t! ^0 G& V% O
. C/ \- q* x9 d5 a' s& V! M% z0 O
  R  Q8 ]+ d1 w% ~3 y3 \8 p3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
& k. @5 ?) I7 J/ U, N2 [7 Q) {! S3 [- J
A.通过HTTP_REMOTE_COOKIE访问
0 o% z# s( T) RB.不可能
6 }  s) T+ K' m# L  R% z, uC.在调用setcookie()时设置一个不同的域名
! I* W# d) X5 @+ b5 }4 LD.向浏览器发送额外的请求
( M& y0 i: ]' P( u$ pE.使用Javascript,把cookie包含在URL中发送
4 h+ d, R* N  \+ i1 R: F: G
/ S! P$ U! j; [# t
: }; v+ W8 e' }5 _- ^# A4.index.php脚本如何访问表单元素email的值?(双选)
0 F! X  v; s' A# T; ?( e$ I6 q7 p% W: G6 Z, B
<form action="index.php" method="post">, @; |# d& t+ K3 q  E  m# q2 H
<input type="text" name="email"/>' R4 l  x7 P$ C# a! ?$ B
</form>
$ [0 u& f7 J/ [% W0 d' K
$ x" ~  m. N  JA.$_GET[‘email’]& E) ]+ G8 o: A. F9 a7 C7 g
B.$_POST[‘email’]
. @1 g) I+ P9 I; ~' ]9 MC.$_SESSION[‘text’]
& ~, w: x6 D) d( z3 KD.$_REQUEST[‘email’]. S! Z% E  m" L/ Z% [: j% Z
E.$_POST[‘text’]
8 ~6 ~/ f$ h# a$ u: ?9 D5 h) x- X$ y: h" x0 Y
- H7 n, K9 _; o0 t1 a/ X
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长8 e( _7 b, H- i( D
B.没有变化8 Q7 f* W. G- G, v- q
C.在浏览器上打印该字符串时,尖括号是可见的
  A/ t$ Y$ f7 y. O- n' c& uD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见9 W4 N2 J( |, P. |( x$ j- x, N
E.由于调用了htmlentities(),字符串会被销毁' @8 q  T! j4 f1 T

: h( [6 |6 E+ C, X( n
" l; x  ]4 I4 a& _4 ~( ?6 B6.如果不给cookie设置过期时间会怎么样?: b$ K; H1 f% C" c

! U* z: r- c1 c# }* e$ j5 hA.立刻过期
$ N' ~! P: e, [. W( sB.永不过期+ X5 u+ p/ O0 H, I: a5 [$ l; ~4 t0 G
C.cookie无法设置
' y8 b% ]8 E  _# \( c" A; w" n" yD.在浏览器会话结束时过期
5 l+ h" ~& y$ r$ f" e) ]E.只在脚本没有产生服务器端session的情况下过期
# M' V4 N  U  ?& q/ L' I- W7 N/ ]" V# E8 Q% F* y' e- Z: i+ |8 l. D
5 _& K6 J" z: e
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.什么都没有' o2 {# K' B& i6 w+ z) q
B.Array
- f" Y* {1 C6 I. \C.一个提示6 J/ V) M5 d/ d# i
D.phpgreat# e! g6 D& e  H+ o# Y
E.greatphp+ Z1 _! j, W) P# w) Y/ k
( D4 i2 B6 l6 c8 {8 ^) R4 [

; \, h% j; I8 x+ h8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
# k- E$ u% I- T/ S% c0 z
  [3 |( B, n1 M2 FA.这两个是明文传输,之后的信息加密传输
( W2 r4 v# t$ F: z9 T' jB.加密传输
  h0 ]+ v) ~# j0 Q" ?C.URL明文传输,查询字串加密传输
/ N) ]. ~. c$ DD.URL加密传输,查询字串明文传输
, v1 a. @: `% l% fE.为确保加密,查询字串将转换为header,夹在POST信息中传输
' \! k4 n( B4 C" o+ ?: ?0 i
7 S( h' {6 j4 r
7 U% Z, \% y6 W/ s9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?, n; }+ v8 j0 q# Z( |5 W
+ \4 B! h  ~6 ~7 |
A.它们组成一个数组,存储在超级全局变量数组中6 `# B6 w/ k; G
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
: d+ D. ^1 Z: e( n4 H9 hC.第二个元素将覆盖第一个元素
0 s' ^) y, c6 r  h3 }, N" Y* gD.第二个元素将自动被重命名
, r8 ^% E' ?& |/ A& r9 @/ gE.PHP输出一个警告) m6 T7 C5 O% m1 u
% v4 ^# n& C1 ^0 S9 d
- A1 @5 }9 B- o. @# ?
10.如何把数组存储在cookie里?0 W1 P2 {% ?& K" a* K2 [& }; b3 O# G

: I, Z, \* X7 |& n0 M& J0 @0 A& NA.给cookie名添加一对方括号[]
9 }' Z8 v3 X+ H/ k, jB.使用implode函数; ~* j- O1 X9 w7 p: L
C.不可能,因为有容量限制. u- g* M; o, {* ^2 p7 U5 l/ R
D.使用serialize函数
8 {1 ]2 S. K# z/ q8 w6 z# x0 |E.给cookie名添加ARRAY关键词4 q& J8 l' L0 s& _9 R- s

+ S8 W# V: _+ u) s' z4 P- B' ]5 S2 [5 J. c
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
4 U! V) ?  Q3 [* R' [! C# l% cB.1234567890
( a( d; S' y) ^( _/ e0 q" ^9 IC.0123456789
3 W# V% }/ c4 VD.什么都没有+ k9 Y) \; D5 S- w; d
E.一个提示
( w" ?$ A# \: E- f
/ `9 t6 R7 T, ~5 V, y+ F+ y6 q
; t7 l2 a3 Q7 q6 o. D12.默认情况下,PHP把会话(session)数据存储在______里。9 F1 I. ~5 O. v$ `5 z

1 l$ D1 j6 s. W$ d7 zA.文件系统- N8 t' M7 a) Y, o5 x
B.数据库( |& @8 J& D2 ]/ @- v
C.虚拟内容
8 R( Y& J  U/ g7 o% dD.共享内存
- p) R$ E$ }% X. Q( T& q: [( G' uE.以上都不是
! [6 |# o+ Y* t# y5 O
- X; k( {7 Q# I* u  T; x9 Y$ q( ]6 s- ~; k5 y
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
; ?7 u! G  u7 ?' Y' Z8 G- R6 l% _" I7 G' I& O6 h( U0 ?
A.浏览器的程序出问题了, q; j; O# M. R; l: ^7 l7 L
B.客户端的时区设置不正确
( V4 P/ \. H3 S- B% G" B- r- DC.用户的杀毒软件阻止了所有安全的cookie
, S8 r$ t. \/ ]' _# vD.浏览器被设置为阻止任何cookie' ]7 b& E1 n5 m+ @0 Y
E.cookie里使用了非法的字符; H, ]$ W. v. C9 J: w4 t) p! ^7 l0 L

. @& G6 Q1 a+ |& `0 h# h8 _" \$ f7 C
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
7 Y4 O, ?7 J  k# L; c- f) Q* x9 q% o7 j; l( l
A.1440秒后, s: [$ Z% p( M& t2 B$ i4 O+ k5 @
B.在session.gc_maxlifetime设置的时间过了后4 W  ?5 C1 V6 ]: W- L6 d0 f
C.除非手动删除,否则永不过期1 m- y8 I  x8 ~9 P" S
D.除非浏览器重启,否则永不过期/ x5 p$ r4 C& b6 P3 x6 ]$ v. C' D
E.以上都不对
6 @( u/ z* v( P* K8 J
. ?, Y8 L: g) [$ x6 w) M9 `+ ?9 }2 |
15.哪个函数能把换行转换成HTML标签<br />?
" I9 [$ ]- w3 o/ e* K7 g/ [6 n* a% ]2 X* K! O
答案:____________
. P0 [7 \2 L- q* x! L
+ e% Y5 U1 G# K2 c% V# S7 W! G( A! [9 B- m5 v! v, e
8 z- @" g! @3 x; N9 p( K
答案速查
: Z+ \; T* r5 W- T2 V7 J1:E
7 D8 a3 w7 S; Q6 Y& m2:setcookie/setrawcookie' A2 V" c9 v4 v
3:B7 s: A! M/ t( h# T' U$ B
4:BD# a+ }% j* \! f0 @' k  {$ E
5:BD, l. U. l, E; P2 n0 I
6:D
6 v3 i" u3 n3 l7 w7:A3 M. }0 F6 D5 `* p$ n" T* `
8:B
7 Y% y% i4 V! e% Q) G9:C! z, ]& ?& ^7 a' g4 G' G
10:B
. O2 H. e" b4 s" b* }6 s6 f1 H, J2 N% O11:E8 v5 N' q5 l+ `5 \+ Q: C& Z0 J- N
12:A! W) |( g, i( Q6 ~5 _
13:BD
0 D5 U' Q% ?/ `14:B
, j5 Q7 u; e3 j- w9 h" R$ v6 K15:nl2br0 v3 k& S' n2 z( X9 S, A
1 a3 y! u; r* e$ y! L$ G5 L
% g% @, K) \; X9 c2 q  J9 g

0 A! f) r* i( \1 X5 h/ g1 {0 @答案详解
1 _# h; V2 k$ z; K  i5 s$ y2 W0 g; _+ t( T/ w
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。5 j- {  d: F1 l' m

: {* I% r( r6 T2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。, |$ S: m9 G! G! z0 h1 [+ B+ G8 z
* z( F# C! g, M$ }7 J
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。0 q) L, t" A% N6 t6 j

4 H" J7 e1 q! I# J: }4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。6 w* T1 I+ B3 ^

6 O8 j( \/ K0 o' m1 f% A* ~. r5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。2 I& H& s; q7 b8 Y- @( v

; X2 b" J, ]+ j6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。* f+ v6 t2 d1 p3 ?& _

1 y: r) S0 y3 j2 K! H6 n( V/ C7 [7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。0 p0 _  }" e) f3 ^

( t/ {! |- M! i) Z8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
+ X% p- [4 i. S1 j. w- d1 |1 z+ A  K, K3 r
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
) j% ~& d( s3 Z
2 L$ f$ c& Y6 W/ S# Y10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
; I' s) ]( t2 b( c9 z, y
3 b" x2 l) S$ J- R. }2 V11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
& N4 m) x$ J. z" \4 J% v4 N8 y0 ~! R; c& f. h
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。+ y( {; q. t$ m- w4 x

( |3 ?) o7 V0 w2 u6 w) T13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。3 }% g9 R: b4 J2 c3 y' R, H% M
8 {3 b- @( l7 Q1 Y
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
, Y: z# f0 w9 q) N6 }
/ G( n7 o6 P/ ^' i& b4 E15.函数nl2br能实现这个功能。

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