  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14161
- 金币
- 2371
- 威望
- 1647
- 贡献
- 1319
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
8 u& O* R' ^+ G9 S8 g% j7 }与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。+ O6 j. y6 p5 N& I
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
1 d3 p0 b& e' j( ^( h. a$ m3 p# a$ v+ T/ M4 X
5 m& v- [# G1 M/ m# d- l4 E问题7 p. f) L) J; M/ Y5 |
2 ` }' t" v) Q- y+ I4 M1.如何访问会话变量(session)?
$ M* s% e3 v: Q y5 u
E; ]6 y! A8 ~2 Y: r5 @A.通过$_GET
^* E% ]+ ?* QB.通过$_POST1 F9 u$ o0 f7 C9 s5 d) u/ G! \
C.通过$_REQUEST) |+ n- q( t/ {% o2 ~
D.通过全局变量
3 O* J/ }$ h1 L, Q# Z+ QE.以上都不对8 Y3 ]5 m; v, P) k
$ ^4 ^: k p) y- N- ]
- C" e9 W5 K9 _& Z- N X1 w6 s
2.哪个函数能让服务器输出如下header?
, s: M7 k7 Z2 n
. l- ]( C( m$ ~( nset-Cookie: foo=bar;4 o/ U3 l1 o- f" C/ k+ L! t
, w& R5 r' T( _# { c
答案:_______________4 g, ^* ?+ V2 g0 c& M0 U
& i* y3 G E; w: y% u+ Z5 c% k
6 ?0 y& }& i6 G" |5 J) N. O5 t3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
) T' }! @3 q B3 U9 r8 Z% @3 {/ j. D, L9 `
A.通过HTTP_REMOTE_COOKIE访问
' X# |9 n9 H! U" T& RB.不可能
, `2 u2 k& }+ z! H2 {C.在调用setcookie()时设置一个不同的域名
- y( b" h- Y9 n9 d* jD.向浏览器发送额外的请求
0 n5 B( N) H6 r _4 eE.使用Javascript,把cookie包含在URL中发送$ }6 E6 X, J- }# w
L0 z" `1 Z" O1 i
+ i/ Z+ y5 O! G& e% V2 r
4.index.php脚本如何访问表单元素email的值?(双选) b$ m: q9 a+ u
! L; U0 J" ]2 e4 Y3 E+ Y, ^- U
<form action="index.php" method="post">
6 s# l* j/ \3 [<input type="text" name="email"/>/ e- X3 }" ?2 q7 J0 N/ Y
</form>7 c. Z$ K0 N1 g* R, t
& J, r, `/ ]+ O5 q: J
A.$_GET[‘email’]
7 G2 S4 W, [+ b0 _: I A; MB.$_POST[‘email’]
6 o/ t0 T/ [8 r" d# E9 _+ \$ nC.$_SESSION[‘text’]6 w( t" O& J5 @! ]! Y+ W9 h% S" @' I$ m
D.$_REQUEST[‘email’]) z$ b$ x& ^2 h: b! ~" _
E.$_POST[‘text’]8 Q# x6 X6 ]4 R' h- S
! f" g1 C" v* _9 ~7 l
. ? {, a3 _' K, r+ ?0 q6 U( g5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长" _5 Z. `) c% ?7 X( ]
B.没有变化( n+ G% z+ Z2 {& m
C.在浏览器上打印该字符串时,尖括号是可见的1 E; ~9 \6 r1 X) S( D, Z
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
; O' G; O4 e) r( k7 ^- x% Q# LE.由于调用了htmlentities(),字符串会被销毁
6 J- n# T( A9 C4 `3 F: O& u! W) T
4 ?- l' p% H$ r: ^2 B
6.如果不给cookie设置过期时间会怎么样?& u# c% [' e* ^. `8 Z. O' K
! N4 @3 p) }; l6 m4 I5 R
A.立刻过期
8 w9 T% N" V0 G1 fB.永不过期
9 J% P4 b/ N7 G9 @C.cookie无法设置
4 B6 z8 q8 J3 W& g8 ^! B; bD.在浏览器会话结束时过期$ w! f" V3 J2 a3 t) G( x, Y
E.只在脚本没有产生服务器端session的情况下过期
, h1 k5 h- t$ e4 b1 F0 Q8 ]
! M3 B6 s A6 [" x: Z( y3 ~( v5 U8 ~) P
7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有! c/ e8 l: s# X1 U
B.Array4 {6 E/ [; I2 z3 X9 p
C.一个提示
8 e! s F$ F" C6 eD.phpgreat
" Z! @( F6 A# h; ?! Y, jE.greatphp8 |5 H4 I7 I" y% j2 ^
8 V; \ E3 C* e& m0 r
3 h" a+ |& |" N8 k8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?3 }# h$ o( _) f! v# M
" B/ L) k5 P0 PA.这两个是明文传输,之后的信息加密传输" x3 }; p9 W1 e$ q' d
B.加密传输
9 N! J$ G- h U" D/ Q0 p/ {C.URL明文传输,查询字串加密传输8 f0 N7 E) ^" \4 ?0 q$ S
D.URL加密传输,查询字串明文传输
& [ T) N" q1 tE.为确保加密,查询字串将转换为header,夹在POST信息中传输; f' N, s( g! o4 c, b* x2 K
8 D! M* @$ T8 p% `. N5 T0 Z/ C) S2 o1 F8 _
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
: A, \3 U/ R7 r# {% b6 t8 J: B: w* c. |/ E0 I" i% ]4 N* q
A.它们组成一个数组,存储在超级全局变量数组中
% v1 A: T& H, J9 m& g% |; ~B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 _3 J5 K4 c# n) l0 T0 ?% t/ D+ E) BC.第二个元素将覆盖第一个元素
* c9 B, f+ Z) s7 y; Q% uD.第二个元素将自动被重命名
2 f( _: H$ ]( }, vE.PHP输出一个警告4 {& O8 G% A3 y, ]" L
* w) L7 X, `8 n: T0 \# f( x
7 ]& j# [6 h7 w* }. Z- R0 @10.如何把数组存储在cookie里?0 ~: ?5 r5 ?7 r
6 k6 G$ |1 {+ p: c3 F( ]
A.给cookie名添加一对方括号[], \( m+ w8 d+ ^$ |# _
B.使用implode函数
: B+ l( h% V6 z0 A2 HC.不可能,因为有容量限制3 u1 W- p) [8 b
D.使用serialize函数. Q: p. I! L( S" C2 ?* f
E.给cookie名添加ARRAY关键词+ [! E' R* j% `& g4 ^& e
6 F+ s& `( Y! @( W
_. s3 u5 o! P/ P11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789109 h/ G0 C; j$ R
B.1234567890
- M8 F% d5 q$ O2 e+ d* u1 TC.0123456789& s0 K% \ E* f; ]
D.什么都没有
/ a1 Y( @2 \6 L u X$ jE.一个提示
) G( ~' Y# t2 B _7 Y/ @
$ q9 Z8 K p% Q% E* e. [, _7 m+ b: w' O! g
12.默认情况下,PHP把会话(session)数据存储在______里。+ e. Y7 R, d. r
# s% c2 _) u! k/ B8 b% S( ?+ KA.文件系统
* z5 w. o, E# `- |8 i& fB.数据库
8 {/ S8 j' M( a1 g! C5 aC.虚拟内容
" t: ] e; q+ H2 WD.共享内存( s+ i1 B1 p, s1 d
E.以上都不是
% C) u8 {% d/ A* |5 D
2 g# Q( ]9 n& r6 Z4 x6 J- M
1 l* f6 ^; x; F* k/ y( c- a13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)- m) f( D- T" S e8 z9 D
- D( c, ]; A6 O: ]) E9 ^' IA.浏览器的程序出问题了7 O# k+ @ x" S) o- t
B.客户端的时区设置不正确# a! k9 e4 N7 ^2 C5 ^. y6 ?
C.用户的杀毒软件阻止了所有安全的cookie# W$ s( ?9 z* Y. E) l" D8 Q/ n
D.浏览器被设置为阻止任何cookie
+ D% J2 m/ A4 s% w! a* I# i2 PE.cookie里使用了非法的字符
' A8 ?, n2 H7 G5 Z+ u8 b
/ B3 h# Z5 |, c% r1 H3 M, ~, j
( Y9 N) {. E" q4 n V9 C14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?( d0 E+ F. M1 Y; y2 R
7 u- Z! w$ U$ YA.1440秒后
- y2 a9 |; G3 z& @7 ]0 l9 H2 yB.在session.gc_maxlifetime设置的时间过了后
/ o ~0 s) J9 P( ]. a s9 AC.除非手动删除,否则永不过期
( @5 c6 [. B- l' J" h: H; Z* m2 W: |D.除非浏览器重启,否则永不过期- ]5 U+ n6 L4 C8 Q7 |+ z. y: J
E.以上都不对# z+ I# ]1 Q5 N' d' {$ Z# N
6 ^- f, E9 [0 {5 u" g) M, n% g" s
( {6 z6 {, z# M/ j* q* X, S2 y% \, P15.哪个函数能把换行转换成HTML标签<br />?' o; H& {5 ]8 v& y
9 J: p0 ^5 A- d( y答案:____________
" `# V9 m) h) e, A. ]# Z& K( i( I9 ?6 M( F/ S
. D" i5 y2 m6 O% H. O+ E" z
) j6 {. W$ z: X9 W! }& X( s s答案速查
/ `! H! {* s+ b1 {+ h$ F% \4 C P) V2 U1:E
- J7 q9 f* w" J( V+ M/ d: ^! B$ _2:setcookie/setrawcookie
5 j3 P/ \1 J0 ~: |5 u+ u3:B' W6 ?6 d* O) K' w- V7 V2 V* c) J) N
4:BD
1 [$ _ L4 g8 X! A0 ]+ a7 ?5:BD
8 B+ c. V# b$ Z$ U6:D
" j9 d* {. K$ _( C0 S* L( {& x7:A
/ N/ S$ k4 U8 Q1 C# y7 H! k7 R8:B
& x+ v5 _; x/ U$ G9:C: n( i/ U2 G- c5 Y# S
10:B
$ @4 f6 Y9 R1 L/ v! g3 H. E/ p; c11:E Q3 S. I8 ^$ Q& r
12:A1 G, E6 i& A8 t A( ]
13:BD* ]& B8 c6 S m5 q4 u5 p4 e
14:B& @# d4 v8 X9 X
15:nl2br* R& Y- {7 l6 Z/ f: [9 _
( O6 e, B+ F5 ^% J0 X$ q
3 S, \" `% z5 X( |2 k( w3 R4 ]. P9 C
$ ]* U1 f+ I/ x# B答案详解' u, ^: \, [0 ~) K
, Z# L) u9 h/ D1 D0 Z1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。3 }" d6 V6 e1 U
: b. p* E$ y# A8 _
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。/ @! B: E- l/ s4 M7 u
& O4 |- p4 `# S( E3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
) P+ w9 o. R/ I) X, R& h3 L+ A- \1 `
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。8 ^* _1 t9 C9 r: p# O
2 o4 t4 D$ F# n/ S$ U* u, I
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。0 {/ a9 M! R% G( ?& Q
; h- p. Y' |$ ?2 Y6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
0 p( j1 D% F: M! c, b6 I& i3 w
) R1 w+ U5 O5 i+ D( _7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。8 ^' c T9 D' d
: X6 C- M: `; Y7 F8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。0 \. U% v, ]" r( F
2 a% w) f' B+ y5 E3 s/ T
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
5 V. H3 i; g2 r+ I
! ~6 }- k2 o6 R; P- E0 Z+ g10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。! M' r2 u! i/ F' M
( q2 U* q) Y& k) u$ F
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。 N/ m8 E3 D. K1 l$ Q
# G+ e( c. i0 V9 Q3 O/ d" m12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。1 m1 T1 I; h' L& ~2 K: h
+ K& }: R1 u9 F8 z" i
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
# x8 c/ J j- V8 s W, i; d3 t% O8 v* M7 b( G: ]' Q) P
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
0 U& M$ L# }! m! ]
+ J1 B+ O! P. P; d5 T* a- ~+ |15.函数nl2br能实现这个功能。 |
|