返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。* P8 Q) k8 T5 j% y4 p3 C# {
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
. h& S( |% T# a. D( M& _5 D一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
( _8 v4 Z/ i& ^7 T) I' @2 r
1 N1 u# h3 P. h
. U7 i: ~6 ^8 C# H$ P# R. h3 o问题: q" b: j4 ^0 P

& K' ], E8 Y7 ^2 ]1.如何访问会话变量(session)?
' y3 L7 I$ s- A) n$ e& \# W- H- j7 S; I7 _, a: P- P
A.通过$_GET
6 i! a( x( d/ v/ o" }. RB.通过$_POST
$ l8 [! d8 B; R  sC.通过$_REQUEST
- {1 q7 B5 |+ O7 I, J8 ]. jD.通过全局变量# F2 ?: H! s/ f# E
E.以上都不对
+ w  e6 K; S+ f2 P2 W6 r6 p8 W
4 G2 \' v4 L5 a  I. ?( ^0 j, D
2.哪个函数能让服务器输出如下header?3 q, k  f5 ^5 ~7 z$ d. h/ j. o6 O5 Z/ h6 w

: A* b3 m5 _' X' A+ P2 O& Z+ kset-Cookie: foo=bar;
2 D- o' r/ b+ W2 T, k5 o9 M0 d6 Q! [: N9 w$ z# g) ^% @. A, F
答案:_______________
( Z# a& }- b: T9 Y9 z
) m% n" `" B5 ?8 H' D3 k
" h/ }* h( g& m3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?: I: W2 l- v& \; `6 q' e. n
, ]  l. x" `! x# E" _) U
A.通过HTTP_REMOTE_COOKIE访问
, s/ ?* v8 T- DB.不可能
, j3 H4 }( m" H4 J2 jC.在调用setcookie()时设置一个不同的域名
8 Q) C6 l0 w8 o" [9 m; `7 ^D.向浏览器发送额外的请求" W0 L: L4 v; x& R! c
E.使用Javascript,把cookie包含在URL中发送
* S  s# N4 r% s4 A* s4 }5 E3 ^" d3 W3 K! z; t3 N

: p$ h& `* H) ~8 ~- y* k8 s4.index.php脚本如何访问表单元素email的值?(双选)/ G$ b1 B7 _8 O: z! Y5 }! g0 n* F

! \' G2 T2 M9 _- V7 Z1 g<form action="index.php" method="post">9 y, |6 a% J. k9 i
<input type="text" name="email"/>
' i' y4 d% b4 N3 N* p</form>
$ F  L$ `+ {1 X' D5 a% P
/ M9 M2 q6 J4 C. T: e  w7 ^# p, {" Y* kA.$_GET[‘email’]
1 w* d" k8 ^6 FB.$_POST[‘email’]) b, c% H% S. \
C.$_SESSION[‘text’]# }" R6 Z& r1 R# z
D.$_REQUEST[‘email’]
3 W4 B, r  u, A. n) _# t$ _" y( IE.$_POST[‘text’]$ N- _7 r5 a3 @" Z- c5 b: i  Z

! j- s, m0 \5 N- _) I. N9 r8 R. X+ d3 o0 V- E8 j( l& |
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
  {" X0 T' F- N+ X. x! v0 T  QB.没有变化
7 o, j' f' ~/ H) fC.在浏览器上打印该字符串时,尖括号是可见的% Y; m8 R  y$ q, d0 d- M4 ?2 N5 f6 q
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
! [8 @1 T' l& \7 e" l# `# IE.由于调用了htmlentities(),字符串会被销毁
1 H  o# ?# o0 \0 I0 o
9 L: V" G, ?% ~6 S. ?0 X, W% c) g4 L) y9 w
6.如果不给cookie设置过期时间会怎么样?
9 @. ^8 x7 f2 x" d- M- t/ f1 b8 R7 R* G' Z4 Q
A.立刻过期
4 n& H5 z, T+ e5 `. A8 b3 iB.永不过期5 @7 x: O0 K  ~8 _- G
C.cookie无法设置' n" O: o; S) M3 f0 M/ W% s" U, X
D.在浏览器会话结束时过期
. z4 g( a  \0 zE.只在脚本没有产生服务器端session的情况下过期- R8 i$ S) ^0 S# G! o0 ^. q; S

) {2 n. E/ q, t" n+ [
! l* o2 K8 U8 m5 p5 {- H, p7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
% g1 ^0 Y6 J  z9 s( i+ fB.Array& h; P( U! w8 h! I5 R& [
C.一个提示4 O0 H4 W: F) \$ t% a/ V
D.phpgreat
9 _( B4 P! ^$ e& \E.greatphp% ^- M3 M$ h* X( w6 S  x; \
2 s: ^/ E' m# v! I% g, d+ H# @2 X

2 X3 b+ L* e6 W" p: N8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?% O5 U+ B2 `3 M8 c8 p0 t( \; r8 `
2 M" R; i$ Q" `) I) z
A.这两个是明文传输,之后的信息加密传输7 b% |9 I" y; ?# p$ F
B.加密传输  _% E2 J8 F: T8 l6 l
C.URL明文传输,查询字串加密传输
7 t1 H5 X* `2 ^8 v# I+ a; ]6 pD.URL加密传输,查询字串明文传输6 M4 m, ~. r/ c
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
- }) s+ Q; d" L2 D0 E2 X$ ?
! p& ]8 l0 J1 T$ E: ]. M2 k( a- v5 Y  O; k
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
& r' h4 ~6 S4 h3 l- L+ c, J% o! f$ R! V2 o! H' j7 T5 G
A.它们组成一个数组,存储在超级全局变量数组中' o' T2 G. X# M9 o, F/ r
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
& z! k0 d& K- y0 p* XC.第二个元素将覆盖第一个元素$ ^# U% w% i9 [+ s+ \2 {% J# W
D.第二个元素将自动被重命名
( Z7 b6 V' |& ~4 R+ {4 J" H6 ~) h. |E.PHP输出一个警告
; l4 h) X% ?+ Z) v& _7 W9 a9 P% g4 i

$ _! t9 ^# ?( I$ ^- g10.如何把数组存储在cookie里?' x5 r% I2 S' \" |4 F

) a2 X6 X# t! i1 d; }! U2 p! e5 dA.给cookie名添加一对方括号[]
) O2 q% ]  j$ `6 NB.使用implode函数% G+ m8 b1 A  [8 Y
C.不可能,因为有容量限制; n- j' B) }( L
D.使用serialize函数
, q) o" P. o, nE.给cookie名添加ARRAY关键词' T9 Y% \  u7 O

% V! y4 a5 V; s, q. G+ w
# ^6 N+ b7 A  H, @- R7 G11.以下脚本输出什么?

  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
, E. \& J' \6 lB.1234567890
; ~* [: S3 D  F! _5 |9 \6 I, xC.0123456789
2 J7 P' k0 g6 ~" I" I) u# |- h0 ND.什么都没有
) X/ F6 L' w, z# @$ _& B- l3 ~7 A- _) s" jE.一个提示% L  m& |& w2 W( ~" L

) K! l: y5 O! u6 }& ~* Y$ g7 z4 O* l. m' p# Z6 e
12.默认情况下,PHP把会话(session)数据存储在______里。
0 q& S( D' }: u0 g* ~
& ^7 O6 }2 W1 o1 `6 S0 QA.文件系统
/ A) @) l! Q8 O4 R- Y" F4 k  R7 ?B.数据库  J0 Y0 f7 ?) s. w, V7 }0 b
C.虚拟内容7 {6 c4 S. h) M! R1 [
D.共享内存* d, F0 ~" ~8 \7 @$ ?8 F: k4 B
E.以上都不是
8 z9 w. \) Z2 ?) P& x$ g" \7 w' z% H/ L/ q8 S+ p5 B, [
4 ^6 T7 F! X, N& S* j' m6 z
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选), k  G9 I- f0 G( ], s' D# \

) f, ]0 r5 i' A1 XA.浏览器的程序出问题了! w5 s) q% d, d% P
B.客户端的时区设置不正确: m: A8 }  R5 q# b! z& p
C.用户的杀毒软件阻止了所有安全的cookie
  c3 D! A7 F& K  m- d& z5 I) `D.浏览器被设置为阻止任何cookie
! b  o1 u3 o0 ~" y1 Q, h) g6 pE.cookie里使用了非法的字符
4 x) H0 V3 ]- e; U! F; N* F' h
4 b' k, W1 e1 b+ `+ ]
9 [4 h# L$ `; |- k- ~14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
: K2 |% T. e- n/ _# p8 x+ {& X; B5 l4 _8 k) t! C$ }9 E
A.1440秒后
9 N4 Z9 ^, E( U, r. W& WB.在session.gc_maxlifetime设置的时间过了后5 g  v5 T& U: U' ]: D& `" R
C.除非手动删除,否则永不过期
# _( s/ V9 m* o5 ~- z' A- {D.除非浏览器重启,否则永不过期9 W9 M+ Z( J; i0 `" @2 F' {
E.以上都不对
. i6 X# V) H7 v+ q9 R  ]8 {8 A' d' k7 U" P: s9 s) B7 {% K

0 V$ j4 S3 L1 T& `+ @; a15.哪个函数能把换行转换成HTML标签<br />?
; h( v! q. j) ^% w% V+ V& [. I
. @: H" h4 L! g: L' l. X6 w$ h答案:____________+ _$ x4 z% o/ l/ V

8 Y2 {; `; r, T2 o( _, j7 J! e# e9 d

" \+ ?- o$ N9 `8 m, f2 V答案速查6 l4 C5 W' Q( {$ z) a8 I
1:E
# L# r3 x4 o  n( Z/ @- T) z9 X9 d2:setcookie/setrawcookie
3 ]2 }' l6 C( B. U  Q, }3:B! m! r  ~  A1 b
4:BD$ y. v! w7 V  m0 U* D
5:BD. u  d# v+ K/ H; Z
6:D$ `8 Y' z* H9 L! K9 |# N7 T" C
7:A
  c/ m5 ?6 U3 p. M  C( X1 V. p8:B/ c  t5 ~$ f# M- O
9:C
% }1 M) o4 W6 y6 G+ i10:B5 \- k- ~7 m% R9 q$ ]
11:E
/ }3 i7 y3 l7 o: c' @12:A
- x& Q, E* T5 t& B" y% e1 G* _- g13:BD# M) k4 a8 D( h; ^0 c+ V
14:B! Y1 ?6 u6 _4 n9 i6 p
15:nl2br
! F- }& Y: Q% E  D3 U9 r2 K( G0 C2 ~" @% w# I0 h$ s9 L% l2 ~1 {  v
' t5 W. {3 W& P/ ]) M* R
" ?: V1 D- _7 y" i! ^" h
答案详解- G. t7 v5 _! V$ h. M0 y" L( g
* C8 i- U( [; G* j6 _
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。% n" p- I4 M0 @3 |8 \$ Z

* _4 t1 Q" M3 w7 v2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
; t  Y7 y* l/ j7 R! G, \$ d9 |6 Q4 a' h- t' r5 m3 u
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
+ c& b" A4 k" X. ^3 [" C( ~7 o( w$ i4 ~  p! }! S" Z
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。. N6 Q9 y7 W! P8 e
/ h' `! T4 P' A- X+ y9 T" l
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
0 ^  r0 _/ g2 u% P; D. [
3 ~) W: e8 Y9 v2 ^+ N) N6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。2 J: ?9 D$ P/ [) x0 [( v1 `' H

6 f# W! s1 o! Q9 R( E7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
  v* P, X- ?( T( _
9 D# j  I- G# I/ o  T  U' u8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
6 b. X; c7 T4 D# E) V" y7 M; ?
) e. k; g7 X2 g3 A9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。/ U3 @1 n& e& S7 k' P7 ?5 `2 u" w
, c$ Z' C3 L% O
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
( ~4 }% k3 Z1 c' w' ]; o0 D8 C2 j; b* n: e' ]2 V
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
0 m/ ]5 A+ }; i5 B- |6 v) H( L* |+ I3 Y
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。& o1 j' c: L3 _: [9 K1 _1 ~9 v$ f
: B  `# f" q2 {: M. g5 Z  H
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
# ~8 Z1 {0 n' |- `- S' J* u7 W; ?  Y3 D" n# L7 m
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
0 _: w: q$ j2 \: x0 {* s: C
/ G% `6 C! |  V. \3 B# u' ]( d8 {& H" y15.函数nl2br能实现这个功能。

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