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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
$ h+ _2 }! |; O' ~/ t与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
2 C$ R, R8 E' ~, f( }$ G. _一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。9 B. w0 C2 x6 r* A% U  v* O/ k
6 U" l- v* H3 l1 P
! r! Q$ t" k2 A0 I* c! o
问题; F# n8 S5 ]' l+ t
# @7 ?; O" d" \; a$ {  z6 g4 B% }
1.如何访问会话变量(session)?
9 D5 \: \0 J) G# d) C
& k% @9 B4 `/ x9 q. T$ N: Z& kA.通过$_GET
$ p# E' d# ]: t+ e: X# xB.通过$_POST' T4 q4 S8 J5 R8 L" W7 f: i; O
C.通过$_REQUEST
$ B; Q& ^: {' u% ED.通过全局变量8 N( I0 C" h# a" ^; ?
E.以上都不对
: \, T' E- }0 e, I, c% X1 u+ c0 t

, ^9 z/ x% l9 w  c# C2.哪个函数能让服务器输出如下header?
" }$ I1 E8 c, j9 Z. ~9 d$ p- s6 F4 E* ^
set-Cookie: foo=bar;
- O$ I) @2 ^2 Y2 w1 Z. i# D# b0 T5 I6 H) {( b) D- c
答案:_______________; h+ \7 p& X% H+ K4 x! O3 t! O; `

' n$ s% p0 h9 j. X+ ~/ j: I, t
. P) h" T4 K+ y: H3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
0 d: h. S7 }/ I& p7 L( z! P* x, |% A4 C( W& U5 p0 t+ {; C. V" {
A.通过HTTP_REMOTE_COOKIE访问
& s# _& u7 G* A; \7 E, w6 R+ H4 dB.不可能, G& P% ]) e! J/ w
C.在调用setcookie()时设置一个不同的域名
. Z$ v' |  k8 ?9 r) s: E. yD.向浏览器发送额外的请求; Q/ w$ N# T  Q- F* m) l: {$ C
E.使用Javascript,把cookie包含在URL中发送9 i7 L9 R+ S6 r/ A& B, d$ Y, j
& }. d% N" Z1 C  y1 G% Z
/ c8 |: T4 r* |2 D
4.index.php脚本如何访问表单元素email的值?(双选)
# ]  `5 i: E  p; b! F" j+ P0 `  m* z. ?* W% @
<form action="index.php" method="post">6 v' k5 x9 W1 T1 b
<input type="text" name="email"/>
( b5 i" ~3 O& m; ]! F</form>; j2 r! ?6 P! H8 A: }
; a3 a* P( B- E0 U) w; p! L
A.$_GET[‘email’]
. L7 r) B9 Y  D- lB.$_POST[‘email’]) u+ U/ k% l# B- H: a$ m
C.$_SESSION[‘text’]9 a6 O3 W9 \: J3 w
D.$_REQUEST[‘email’]
0 Y, l6 @" ~4 U! x) W, rE.$_POST[‘text’]
  U# \. d8 j& C  j; Y% {, C0 V* L
* u- n' y8 o! p& o( }/ G
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长, b8 [$ i. U3 t5 m! q& _
B.没有变化/ T% v, c8 q7 m+ j( T' ~8 O
C.在浏览器上打印该字符串时,尖括号是可见的
/ p, M0 {! V9 p$ q! G4 P5 H& q2 XD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见% X! a) h. a2 g7 u' h
E.由于调用了htmlentities(),字符串会被销毁
9 G+ W/ w& X4 }' F/ _# y! K# H) W

. l+ g; l" r; a5 T* w8 q" \( O4 j6.如果不给cookie设置过期时间会怎么样?
2 N9 e2 m5 N: `% ^# T# A# j$ ^' X% J
/ ~$ K! ^' c- H8 Z: `4 b' ?8 cA.立刻过期
2 g+ H- M- j5 k7 C: BB.永不过期( h3 f& [& T+ T$ a9 W+ N4 ]( o
C.cookie无法设置
0 B  W" G: d9 p2 Q' dD.在浏览器会话结束时过期
# C. w4 S9 ]+ H# Q/ r0 XE.只在脚本没有产生服务器端session的情况下过期( Y% F% |8 B. M7 \3 G
4 n8 ]) |, A4 A) Z
6 C1 i$ V) z' O+ K4 ]% W
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.什么都没有: ]! v4 L; N4 l% o( j9 a" ?
B.Array
' X/ F2 X, q( M* ^! wC.一个提示
6 d  i5 ~5 ?+ S1 @$ YD.phpgreat
- r3 t7 |2 o2 g$ s( \0 [E.greatphp
/ s9 G( u) ~) m" `% ]" W2 R) r3 D, K( J) x
8 u- A4 F9 |7 g7 C
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?; ^; {/ c7 i( F& r4 T
# i: @$ [5 p" `
A.这两个是明文传输,之后的信息加密传输: W( h0 d1 `3 J! _# ]
B.加密传输
, H) P$ `( I' X& VC.URL明文传输,查询字串加密传输
9 {! t  E7 W5 l6 l( n* p: g& T- sD.URL加密传输,查询字串明文传输! ?- u9 P- u" c. H
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
; j* H8 A/ x$ R) [& i
1 z! T5 ^1 n" _7 {. m
) m9 W1 w" N( V5 C) L) M1 \% i9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
& G; c; a1 S: Z" n+ x  K( p/ h& R9 [. X+ N/ S- w& _
A.它们组成一个数组,存储在超级全局变量数组中$ }/ }) M; g3 g
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中% J- o1 F' S4 I" d  M) Z
C.第二个元素将覆盖第一个元素9 [" e4 p% ?! g5 }$ w( n
D.第二个元素将自动被重命名
' H- v! A9 I$ d0 |' W$ J8 E4 HE.PHP输出一个警告0 L/ I! U% H* F+ \2 X4 t! T

8 H0 v( N. |; v+ t) [: Q" {7 M4 K& e
; e3 [5 m/ i2 t( `0 n) ]10.如何把数组存储在cookie里?
9 C" l+ v) B4 J# Y- ?, Q9 L6 T9 {+ `+ y5 G
A.给cookie名添加一对方括号[]
/ M, G! G* O# t! S* M) b, hB.使用implode函数
# z# j/ A; G6 B# e. yC.不可能,因为有容量限制( g2 U) H5 Q6 W4 A# h( V
D.使用serialize函数
9 G' P  S/ z: n/ k- hE.给cookie名添加ARRAY关键词( f5 Y0 W: s* I2 Y; p$ C
! P; d: `9 e4 s1 W8 b8 c

* e' t8 c0 ]6 }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 V  U2 u8 ~9 t$ C0 |B.1234567890
! Z8 A( s- `, c$ BC.01234567893 Z: k( ]9 E& P& j* Q+ N8 g9 v
D.什么都没有2 \( Z  {; e8 S  U5 N
E.一个提示0 _( n5 j" C) Y7 l3 O) K7 F$ A& r

1 b8 ~5 n+ s, b! [4 E1 X3 I6 F4 A* i
12.默认情况下,PHP把会话(session)数据存储在______里。, J! ^# L5 g5 f4 G! e
( I( m. ^  H# j$ o. z* o9 S0 J
A.文件系统* l' s) x3 `/ h" K. ~! M! @! L
B.数据库) B; a5 P1 q6 j0 Q
C.虚拟内容
* Q- N( o" R$ r8 }  UD.共享内存
; I( E- P  {2 o- p2 JE.以上都不是
# }  L) g: m( K/ q$ ?
6 [% L; ~6 |4 n. [% K# W7 x+ t% b
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
7 G1 G" c: q' `8 X3 y5 S
1 S' i3 M+ R# S( PA.浏览器的程序出问题了4 k; Z2 W. E1 O; m- j* b' i
B.客户端的时区设置不正确
) }9 R) f3 z+ a$ QC.用户的杀毒软件阻止了所有安全的cookie
9 x* }, r# W1 ?2 E  H/ [D.浏览器被设置为阻止任何cookie
/ ~. W) W' P, v' p, A* A+ ~0 b, fE.cookie里使用了非法的字符
3 P' }! Q) B4 k0 v: R7 L  q, l6 g6 _; [4 C# C2 X0 p. G9 ]
- k# O5 u$ u( P9 F4 W8 M
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?- v) I. X3 A: Y# ?4 Z6 [

7 V; N6 V- O" R# ?$ @A.1440秒后* E- q: @4 h5 m! u' G' K1 s
B.在session.gc_maxlifetime设置的时间过了后
- k, a6 B' a+ j, H$ {- YC.除非手动删除,否则永不过期2 E4 \2 Z& z1 [; z  x2 K
D.除非浏览器重启,否则永不过期+ P! V$ ~! R$ I9 K
E.以上都不对
" \, ~0 D; W8 R& S; m$ n) G
, r) Q) N& n! g3 T2 L
2 a4 G4 V9 V: N1 n8 @15.哪个函数能把换行转换成HTML标签<br />?
+ z6 x3 K: o# R& |; o* |) b$ Q
$ R" t6 Y7 V) j/ R4 V答案:____________6 U3 c. O1 W% O

0 v1 ?# ?6 {- I' [6 r1 L3 |
3 L( S  P: c* }5 h- D9 e) B' [6 h
答案速查' [& H; [3 [$ w: H
1:E
+ o" t4 g6 O- g2 d; F% o& g& D! L2:setcookie/setrawcookie
6 X1 a' @9 Q2 [( y2 Q+ L3:B
  u1 a! s( C: d! J4:BD+ d, C4 K: o/ }# d
5:BD
' ~4 E& _0 z# n; Q9 Z6:D: G6 `7 l; b  ^3 }- `- P# w6 D
7:A7 F' A2 N& X8 N5 h6 Z: k1 q
8:B9 E# d% o  n* W( F9 r; y4 H8 s6 Z# D
9:C
: A+ {7 U/ N, ?# G+ J% K10:B
. f, l( h, a4 C: }11:E0 B. i4 \$ [, R" L* |
12:A
  }: W! K$ J$ U13:BD6 p$ m# `/ P: o& m* R+ |4 E4 i. m
14:B
0 s. S" q5 e' Z" f9 b% Q$ T+ b15:nl2br
' m- _# H! g# K  V8 N
3 p+ {- N: r6 r! r1 q( h/ s" i: [& n, ?/ w

8 O9 n8 o' K& F( x: c; H6 ?答案详解
/ ]3 g" q1 Z/ r# f$ M& ]
6 R; n' j  d* g  D+ y- X$ v1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。4 ~8 Y) `& ^7 P' O7 }* C& M
0 X  o0 V- A( o& N  @; r. s7 a# n
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。% O, v" }8 f" @% Q) m' g
. R, [  I* `5 f  G
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
' `' e! K" c( i
9 Z% l1 E; ]( b/ l9 }4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
8 j8 Z" o9 Q& Y& H7 u. M  w
' V# N  d; z# R% K8 U4 d# q( p' I* i/ U5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。( b3 Q+ a3 g8 Z5 y  J  S/ D8 a2 w

( }* g9 E# h4 c" m# r2 S6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
* b; A3 T3 X( k5 j
; S5 S7 k5 `2 ^: P* k$ a7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。. p7 S2 M) K, q1 r1 b3 {

- K4 o  I* E8 X+ O9 ^8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。& e$ L& f. s( X4 b0 `; Q
9 @8 f4 Z7 P# k
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
, A5 |4 V) e* M3 P0 c0 e, ]& w
- _6 R9 y+ M/ p1 e  V( ^10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。2 s) _8 {+ N4 N! I: y" C+ b7 Q& G1 ^6 U
* ]% f; ^! s6 C: F0 }
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。& W5 s; |$ `' {: v
5 x' h# K8 G6 Q$ L. k2 F
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
$ ], U9 q5 f$ N% q. p. y& u0 h$ x. V
- i( w9 a$ P; G; ]" {0 p13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。) b! J% I# K( U6 j& |2 T

& u6 ?. {: O. Q8 L1 q$ h14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
% W) T8 X' m9 j* U$ H7 u1 J* O8 p) V. F- y  b, b3 f3 G
15.函数nl2br能实现这个功能。

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