返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。* n" P, |  m7 Y$ g
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
  |  @+ g% ~- D一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
% u7 a& g  R7 C8 R  k0 N
2 L1 H( b% U: q$ \1 Z
) x1 l9 C/ v5 V问题
' ~- g" D9 T9 O4 F, _" I6 U4 G$ f1 y1 q( a! m
1.如何访问会话变量(session)?
( s6 \! s* k: ^, G. F1 s! Y) s2 I, M& p4 i1 t
A.通过$_GET- G  p: j& K' s, y
B.通过$_POST; B. {+ N/ M) t: f
C.通过$_REQUEST6 R. V' a4 N) }" ~8 {$ l
D.通过全局变量
/ Y; p  C: J) n& v" K. k6 lE.以上都不对5 I; C; t4 a( }  w; B, i  P/ A

; B7 }; p) ~, S, U# \' J2 {- f
8 @# }& L5 k5 e+ j2.哪个函数能让服务器输出如下header?( O3 @' [' }- }/ ]0 B+ @
% l* |' O- _0 X' l6 d# Z4 f+ g# R
set-Cookie: foo=bar;
) e7 b$ A, p. C8 J" T  u$ k1 }. `: Y6 K3 R
答案:_______________! I! C# L8 j, ^$ J

4 S6 d% Z& S# D, M# L7 O/ X
+ n" Y- {& {  T  T3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
! F, S1 T- F' v$ j9 f% U+ W6 ]  W
4 f( ^  t( H" O. z" e, q8 C5 V0 jA.通过HTTP_REMOTE_COOKIE访问
! k1 @# w. Q3 O8 y0 h6 r0 YB.不可能( L; V* X# }; T2 B) Q" u
C.在调用setcookie()时设置一个不同的域名, v& Z4 F! Z- X  w8 c' D" o
D.向浏览器发送额外的请求
9 G" q3 [# X' M% Z# {7 kE.使用Javascript,把cookie包含在URL中发送
; D' M, J4 r2 u# f* T" ^# _2 {. s1 T8 {% \( L
5 `: z+ p4 G+ \1 c* j; h" O
4.index.php脚本如何访问表单元素email的值?(双选)
0 H3 S5 @& ^1 B$ y" r. |0 h: }+ K5 \5 B) L# c/ ^
<form action="index.php" method="post">
& [5 n9 W; C& D/ J: O( I<input type="text" name="email"/>7 q# a2 e2 I% U& R9 R
</form>
7 w! Q# v" o% `& a
9 X+ S8 G- J% [4 m; b! xA.$_GET[‘email’]
' m9 }  ?! P+ MB.$_POST[‘email’]
, m* c+ ?9 z5 sC.$_SESSION[‘text’]' c# d4 T# d. X9 @9 z0 T
D.$_REQUEST[‘email’]
& A; u+ j$ X8 |6 C/ cE.$_POST[‘text’]! G: ~" @( K9 c1 W1 J* K' B
6 F, p4 M% A) H. e. Z
9 ^6 @. Z- }" l2 M
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
, Z! q/ s0 y6 mB.没有变化
  N. U8 @- w7 g' ?+ i. y* ]C.在浏览器上打印该字符串时,尖括号是可见的
! T! Q, o! k6 ~9 H+ L7 X5 @: D7 P2 GD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
& P: h! i4 _/ x$ `7 x+ yE.由于调用了htmlentities(),字符串会被销毁
, l' h# ~6 [8 j# W9 W6 c  Q
9 L/ d( `3 A' h# C, r3 \' a& J/ m, v4 P" }: d* F3 t, H/ h# m
6.如果不给cookie设置过期时间会怎么样?, r! M: x. ~+ r4 k: V5 Z1 d, G
  E% H0 a; A4 U8 V0 P3 h9 W
A.立刻过期
* M# x, r+ D  B0 L; ]$ I; N; l0 HB.永不过期
2 [' A# D6 b. e/ V6 r5 QC.cookie无法设置  m# u1 s8 U1 }2 E8 m
D.在浏览器会话结束时过期
! {% A8 x& J* d! R7 jE.只在脚本没有产生服务器端session的情况下过期# L, f; S  t+ n2 x( R- Z9 H% e

$ ^5 D7 \+ f0 O* B) v" j+ B- ~7 _' 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.什么都没有
/ K2 R4 B) a7 K$ r; j2 YB.Array9 n6 _" ]/ d* H; ]+ y0 X- C
C.一个提示* P# h7 b6 e! F/ c) c  ]2 r" R1 |! e
D.phpgreat
  U6 D$ ]8 V( @. ^! zE.greatphp
: Y# Z8 l0 @$ \( O8 Q5 z3 o" _- S+ U( e& y- o
" r, k% m+ k. M( c
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
3 Q; x9 V, ~* o/ {- l$ f4 ]1 v3 j- ^9 P+ P3 Q; E& B; Z
A.这两个是明文传输,之后的信息加密传输
& v! G) h% H! AB.加密传输' Q' s( K' D1 }
C.URL明文传输,查询字串加密传输
& ]9 ?6 y* s- m$ h3 _7 ?6 {D.URL加密传输,查询字串明文传输1 e2 `4 x! y; t6 Q' \6 T+ V
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
6 u2 V# Z8 u( Y8 y: c
9 w( r. {3 g. G1 I+ ]
% J8 j5 d9 x4 N$ S8 @+ _/ ]# z9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
+ ]/ h% z+ n: G8 X) Q2 @8 h. u9 y4 [, S5 Y7 }
A.它们组成一个数组,存储在超级全局变量数组中
" J3 D, l% j$ D- bB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
7 }& k8 y, Y. oC.第二个元素将覆盖第一个元素
0 K5 t# }4 `/ H: \; KD.第二个元素将自动被重命名6 _; n* a" H1 v+ l& _" Y
E.PHP输出一个警告
7 J/ h! [/ h  V- @/ V; f( |- R( h7 q" a3 ~; a- F
! W$ r8 |% h, O5 t1 U; Q1 |
10.如何把数组存储在cookie里?
7 [: |! J/ O; w! \# y! K* ~, q
0 ^* H. o" N# l7 O0 uA.给cookie名添加一对方括号[]9 [+ O& C, j: K' t2 h
B.使用implode函数
: X$ \. w4 @" q# AC.不可能,因为有容量限制& q% S# H: |0 m2 G9 J" I
D.使用serialize函数
# o* D2 D3 K( P& X4 m7 t: D& j: Z: SE.给cookie名添加ARRAY关键词
+ c, n5 u/ J3 S' l: f2 T+ W' `5 M
; G  a8 m& G9 j3 S
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
$ r0 G( H+ o1 {B.1234567890' c* D' F1 Z$ ]
C.0123456789- K" r8 ?- b) J& _3 b
D.什么都没有, n0 `% [. y" u9 X
E.一个提示
  {* v; X5 K) l9 }6 z* G8 I; u' Z/ l" }' @$ R, m

' o* k  c0 B) ?7 s& \12.默认情况下,PHP把会话(session)数据存储在______里。- h3 c4 g7 D$ c/ ~& \
. O7 D$ a9 F; u- @7 H" `
A.文件系统0 W5 v1 i& M4 s. I5 o/ v1 a
B.数据库
2 Y- @5 j/ X& l  A' z5 V0 ]C.虚拟内容
4 u" A  A  c4 |0 u* ?D.共享内存# f  U" p1 D+ a! i" F- h- v
E.以上都不是5 |: G6 j3 E2 k& n" r5 A, x" v) \
5 f. |- I. {; a6 O& h

; o& G# A' u: u) ?4 p5 Y13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)/ X; Y1 W9 i6 d# J' Y4 k

3 i- d" x* S) K0 \9 {* W1 N+ CA.浏览器的程序出问题了4 ~' u% p4 g. X) e. A8 K3 b. q: Q
B.客户端的时区设置不正确& U9 s; F. R. W
C.用户的杀毒软件阻止了所有安全的cookie
% G3 c% T( W  D/ g/ G5 nD.浏览器被设置为阻止任何cookie
7 [) R. E% ~- c  \2 ~2 r. V$ x" IE.cookie里使用了非法的字符
6 f1 h) ?" v  @) I0 W4 t
$ w8 Q4 X9 ^# u- }$ m; `* Z8 ~
) Z0 l4 G' y& Z$ H14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
8 L& K& J! x6 n7 i& @  i0 A4 \7 l% v  ~0 g# y3 ^
A.1440秒后
$ m" s; V& g5 [B.在session.gc_maxlifetime设置的时间过了后
, `2 Z5 [, Y+ Q' Q8 @! b6 nC.除非手动删除,否则永不过期
' W7 }; A- q4 J' qD.除非浏览器重启,否则永不过期2 ~$ s: l' {) A8 n  p
E.以上都不对1 P! r% C- g% l% {- G3 a
  s3 Y4 F( Q* U# m' m6 i

8 C. P5 ?+ B9 R0 A& u7 q15.哪个函数能把换行转换成HTML标签<br />?
: m8 u$ u8 k1 p* K$ y; |( ]9 }8 j6 y5 J. L7 i" c2 K+ {9 G
答案:____________' e% F+ v- C0 P: B3 G

# f) b2 T9 F3 }7 Y* J. h% z
* s  G8 s2 ~1 u! U
7 H; ?3 j0 k3 f( j答案速查# B4 Q4 t& h3 W! a: H
1:E
$ U# p0 S) F- Z8 w, V2:setcookie/setrawcookie
' R+ S4 D) Q  w9 c+ o/ l3:B, c* N0 r. O- O3 _3 g1 K# \
4:BD
1 O" D2 n2 ~% W6 f: g. |  _5:BD5 `' ]' N; d! `8 A( q+ R
6:D7 f* F' x; g3 i1 I
7:A
, R9 v( m$ X0 T4 @, W& T8:B+ C/ u% q/ i' Q) k9 p5 Q
9:C* v" x7 w$ D3 k" K) Q
10:B
$ j1 n# o, E- d# x11:E
6 E- _- Z" k1 }0 k12:A  h: L2 V/ N2 |. \, k: |
13:BD: J% u& b9 x  R( D! d4 m- M% @
14:B7 `& y, ?7 `1 w6 @2 z9 z
15:nl2br
# j! \2 `  y* C/ c: S7 C. V
8 [# \1 X8 z" w8 ]9 Y* Q
3 P! i; n4 U3 f" f& T- K0 A8 H/ v+ I' Y6 h3 V9 C1 ^) s
答案详解
5 `5 S& r5 E" u$ x/ J; t4 z8 W' r/ K" S, v1 ?
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。, u& ^* {3 U, p; V- ?2 c
4 T- P; N( }" N, H
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
3 U" |0 L+ T, ]( n! k8 _# N9 ]
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
  S/ `% f# N% o' {# f& ~; {$ m- o  N
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
8 ^' M2 U5 \% d$ X  v( i, F# S$ T  r/ {  |$ @2 y5 H# B' S) u8 i$ K5 U
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。  _, x$ N8 i; ]3 u; P
6 D9 B* ~- A& u" o
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
) I: J- E0 P& Y: t' q$ k5 Q8 I) |0 a! D1 P9 `, z7 n
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。" j$ k% Q( A. q5 ]
9 a9 ^6 W% m% H5 k! N
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
  n% G" K9 x0 `* e0 a1 ]. d- h6 x! n0 B! @8 p! R: r1 J
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。9 O' f/ m2 G3 s: D9 J. |1 S
$ b" J7 g0 s) T2 [3 p& u7 c2 R# s0 q
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。0 d3 s3 W5 O* G! ^

! g' a$ }) E8 x# g11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
( \5 Q$ b# u$ q
; U) z  {: Z% y- ^: c4 W2 M9 N12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。& h# d: Z& i  \

# P1 p& C3 p+ _13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。2 I! n, Z  b( K, ?# n/ _

; d4 t: D" ^3 s* j; H0 \* k14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
  o( @9 |, B3 P9 T- `( r7 F* ~8 F4 g$ t# o+ Z% k3 g) |" |' ]: s/ K
15.函数nl2br能实现这个功能。

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