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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。: b. j! y$ f' g- S- D# u8 P, f! b
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
- n( e) v+ `/ G* e一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
& \2 [1 Q7 ~# u3 E2 J4 \2 b* \' u2 E0 C  Z% M

0 D' Q9 f- R8 I* @7 Y4 u) B' e4 q' s问题
$ {" Q! X" \- ]) U5 b  f$ d: Y% [3 N, I4 _2 O6 L' r
1.如何访问会话变量(session)?( {" o$ Y+ m7 o& h: @" P' v) q0 o
) r0 ]2 i& h4 A6 N6 F5 C, H
A.通过$_GET, q4 S5 U5 c" ~, T: Y) d& ?7 ?
B.通过$_POST
3 d. h6 t: s) o/ T- m  a# d/ CC.通过$_REQUEST( F, F1 I( e5 J& x
D.通过全局变量
9 |; b6 h; o% j, [: D- a( s+ AE.以上都不对
* e; T+ i1 v9 I+ ^0 x& c
# S  ?+ r4 F' D7 S# N, v2 Y5 O; s" q$ V6 f
2.哪个函数能让服务器输出如下header?  h( r  T& g% P2 n0 x* `

/ p3 c. y- Y% Z8 iset-Cookie: foo=bar;8 R2 @/ o' W# z" \2 ^6 t/ e

2 i. O6 M9 v6 p& I. f4 L答案:_______________
: l, e3 W2 b& [' m% L4 _' \. J) u7 [% A+ U' F% }) W2 \
# j# y2 E5 b& N  I$ T! _3 c% L
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
4 }: e- d- P8 c8 G" @* H3 P6 U( A! d1 V; t6 j) s
A.通过HTTP_REMOTE_COOKIE访问, r( C, r9 y! c
B.不可能
; D6 g/ C5 \0 ?. e- l: tC.在调用setcookie()时设置一个不同的域名- t5 a# O8 O5 h2 X
D.向浏览器发送额外的请求
+ l! K( c8 M$ FE.使用Javascript,把cookie包含在URL中发送
2 k+ c2 q* [6 v8 y, ?" @5 x1 W) b: t# F9 K5 D
& d" f+ b: O# [- q
4.index.php脚本如何访问表单元素email的值?(双选)
) j" `' E: M6 ^! M- N8 K3 J3 X; A7 W' B9 e( I* ?6 c( K
<form action="index.php" method="post">+ G7 U2 v+ d. k+ ]
<input type="text" name="email"/>
1 K% W' n3 Z. t: {0 k/ m1 h</form>
; S1 R7 ~$ d5 W' Y" A/ t/ X) v- U6 t+ K# |! {( E
A.$_GET[‘email’]1 n& X2 g/ F* e& H
B.$_POST[‘email’]' s$ I) |% U4 M% H, _( L
C.$_SESSION[‘text’]' U- W, \/ l6 q; _" g! J% E4 U& o. U
D.$_REQUEST[‘email’]
- y0 a/ w8 ~" TE.$_POST[‘text’]( M( \$ `+ Y/ {

6 X  J/ U8 P( J% h6 \
1 W. X+ |+ U2 N. h5 N% V( N- k5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长. j& y6 r7 G0 o  G
B.没有变化% }0 q: |7 o+ q) H' H8 \7 q7 d
C.在浏览器上打印该字符串时,尖括号是可见的
  a/ p! q  t4 fD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
) b9 f& v. N/ B* o* s) z9 A! RE.由于调用了htmlentities(),字符串会被销毁8 |9 t; E% p' |% _' i2 q- d

$ [  y* Q! j8 g$ D% S8 G" m, ^
/ g6 M) _# P7 @4 G6.如果不给cookie设置过期时间会怎么样?# |; s- x- S  b
' h, L4 x$ g6 X5 \( T, v
A.立刻过期! ?' L: B" i' W# d
B.永不过期& e5 k# q9 T% D* W# t# o4 V
C.cookie无法设置' w$ E8 J# Z, g& h+ S
D.在浏览器会话结束时过期
5 v% `0 ]& U7 [- X* u2 v- U% E5 dE.只在脚本没有产生服务器端session的情况下过期
; v7 e+ }" c% T+ u2 G/ @) M# o2 v; M/ T# W2 P: m! v

1 q% T+ I8 A9 [. ?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.什么都没有; l- Z, g/ h* X! ^( v2 Z
B.Array- a$ {) L( X5 x4 U: |/ y1 ~
C.一个提示! Y/ g1 @+ F% }! R
D.phpgreat" u9 ?7 L! \; \& K; R
E.greatphp
/ [* Z0 L  e' p# X( ~
0 G0 n7 X1 J. c- A8 X% Q. k- @0 S( V5 x4 ]2 O) }- ^# b& p! D
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
7 Q5 q, D! H2 G6 C
+ i2 w. {( }' c+ j. `1 |A.这两个是明文传输,之后的信息加密传输( u: |  r7 f7 r
B.加密传输
3 O# Q. C( w' |+ cC.URL明文传输,查询字串加密传输4 v9 M9 J' o# J: {; u) W6 G1 L3 ]: c
D.URL加密传输,查询字串明文传输: G9 f1 E. P+ n9 J" Y0 H, l3 M- p
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
4 \: ~  I$ J' T+ j! {8 L: B; }) X3 Z  u) B$ f  K1 L

* h3 v3 X5 d. t+ [$ f6 j# c9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
4 s. c4 r+ _$ _9 m& {: d# b" F0 g+ U6 U" _3 D  k3 T
A.它们组成一个数组,存储在超级全局变量数组中
! b5 F6 N; e* L) PB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 z' D" t8 R' A; ^* K$ Y" WC.第二个元素将覆盖第一个元素) r6 u7 R+ f6 O% z2 E. f3 z; X
D.第二个元素将自动被重命名
* S6 H* w7 A7 ~0 RE.PHP输出一个警告: V4 r, ]; z& x/ O

6 J8 Y7 i7 o1 s9 }3 `& d5 `6 J. w2 v, d" B- e
10.如何把数组存储在cookie里?! B7 e% O1 K! R6 B6 U  k# v$ p) C
3 Z# I. p& w, ?3 w+ ~( r
A.给cookie名添加一对方括号[]
2 F0 G4 @7 j. I- NB.使用implode函数
7 b! `5 U+ m  g' w% _' H& cC.不可能,因为有容量限制1 C  m6 s. _1 z5 M0 t# L  r8 J: _
D.使用serialize函数
: d% s2 U* H+ BE.给cookie名添加ARRAY关键词
" }! I6 W1 M; R" f3 `1 Y
% D* s# H# M9 {1 s8 y8 W- E$ f* X9 w) t# I( t& R  m2 f2 b" k
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
9 _, j7 g/ E' {- F( AB.12345678907 a% {9 l" d& j
C.0123456789" x. W4 b2 e$ \7 y( h, s" e$ a
D.什么都没有0 J2 Y: e% }& H3 q
E.一个提示1 e& a( {8 Y9 `( @+ V; l

5 N! B5 G! p* `6 p" K2 r9 N% @6 f, e* f% S. A/ ?4 _
12.默认情况下,PHP把会话(session)数据存储在______里。  `) U: F3 ]+ l9 J0 |& N& n5 X
8 ^1 C( A0 A# q; O: W$ g: u
A.文件系统# S5 m/ s' J. `% T2 W
B.数据库1 D: [& X. e2 {1 J$ S* H
C.虚拟内容
2 O: }) p' I  S6 B, j1 q: Q% XD.共享内存
& g8 X' F' {1 H1 Y! v& `" G1 f+ w9 GE.以上都不是; i8 V( A( W8 i2 C

8 E4 J" ^6 I2 I1 b+ v. D: S6 ^5 M4 t1 q. T$ {, |$ H
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)) N7 X* Z6 [* {, z! R
0 ^! c1 }7 A/ ]3 M$ I9 Z2 t7 w
A.浏览器的程序出问题了
( G8 n' W# u# Y& G% j: MB.客户端的时区设置不正确
) R2 T2 \- e( Q$ U! gC.用户的杀毒软件阻止了所有安全的cookie7 ^. ]$ o& f% m' [# i
D.浏览器被设置为阻止任何cookie
3 t4 P1 W5 f, D  g2 XE.cookie里使用了非法的字符/ J1 W: W* ~" G1 n# ]2 ^1 H

! F6 p: U, P3 E+ b
7 A3 n0 \. z) P. ^' O& L, ^1 W* |14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?! A  }8 Z: N7 n7 l# N1 f
; v/ T2 U3 J& X0 G2 q
A.1440秒后
) Z0 S# @  {' D& S0 p! T& B) T) bB.在session.gc_maxlifetime设置的时间过了后$ d( N6 N+ m2 N# j6 R; m; @
C.除非手动删除,否则永不过期! Z! M2 p7 s: p' D7 U
D.除非浏览器重启,否则永不过期/ F# V" m. g- r$ n6 Q* \
E.以上都不对
: r2 W3 f1 Q# J( k+ ?, [9 P; U6 p! ?* e) ?

8 U7 U: {2 f4 e1 D1 N; F, B& l15.哪个函数能把换行转换成HTML标签<br />?
1 @& |% g: z2 h
+ Y& ~( f1 r1 X1 \% \答案:____________
7 |" K0 x) h8 Q0 l2 c. X. r- j5 X/ }% }& y5 Y- K) j/ m
7 X0 P; k; J* e% b5 y
) E% E+ x9 `+ Y- V8 {6 {) z
答案速查7 z, ?4 Q+ z# s5 l2 N) B6 M% R
1:E
+ g; C6 s( [6 e  G8 [2:setcookie/setrawcookie
$ p/ [: p% [) H" l% r  G* S$ @/ y3:B. |/ v( l8 _# J1 N2 P8 X
4:BD7 z$ n% `# s0 Z& R0 Q
5:BD
% e3 `- m3 n& c$ N* Q( N4 p6:D
( l5 n3 k9 m$ y  t( k$ f1 b7:A# p; M- z: N  J7 t, f: K; u
8:B
# ~7 \8 i5 o0 f. o( f7 {0 x# C, ~8 e9:C7 {1 w& `4 w2 j& |" z; G+ n
10:B
" u4 ~- x" [3 O" d) n11:E; h5 m! I, g: T7 E
12:A9 L/ G. a4 G2 _; Z
13:BD
% `8 z) O/ n3 ]  x14:B
6 X; V4 _5 v/ H) g0 X+ X) F7 x15:nl2br" [$ T% P! {- u
% u) c  t( e. I

6 h  Y% S4 X; D: I2 `, y* F- w# h+ n+ L
答案详解
* U4 q; {4 M8 {* P, L9 Y0 \1 Q3 j' U% J$ y# P0 N( a; j! `
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。' f% K$ L" Q+ Q5 R0 `
- f( f% o. V" s. ]9 U1 |7 R
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
" K6 O' U& x0 }2 O; x$ p2 x/ l1 Q  J) b* z' ?. N2 h0 b1 e# m, L
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。  \# y0 G/ K  y  o) w# Q

- N3 A( F: A3 z0 [2 U4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。( m% j1 \: A8 u0 R$ H3 B6 e

& F) B' [6 [; p* r3 l5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
) A2 O. K+ J) ^' r: N* Q3 L; Q, v* d( j
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。% _6 l3 V, w4 E6 L9 T3 ?2 Y

) l: U- s7 B( o% R. q7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。5 j6 @7 B7 Y0 {! S) e1 \/ I* \

3 x8 U7 v# k$ a; A: W& J/ p8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。2 ^! h9 }$ \& ?( L
2 w/ M, X0 ^* P
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。. `1 P, ?+ }; M

) f# |" v( k. [- b3 o5 v. I10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
) G  p5 b  m# q" U! E
' q2 o/ Q7 `; ]7 X4 j3 p8 Q! U11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。7 [* B( `# q  n+ p# J, t% L" u+ _

7 \3 V$ y  P9 Z12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
7 J3 H  D4 ~5 w0 q) j
, g- c" F( d" n9 A9 }13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。9 ^$ e& H; n$ O6 j( z: r( l3 d$ t
2 g" K3 f- X% y% O1 L& H$ }
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。0 ~: H$ {( e8 K6 P5 A; l7 t; d% `

. e7 o! a2 x+ e15.函数nl2br能实现这个功能。

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