|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14351
- 金币
- 2461
- 威望
- 1647
- 贡献
- 1409
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。$ F# K& H# X( R3 E9 s
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。: A3 c( T* `% X8 o
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。9 V' Z l2 i7 O5 c2 u5 I8 H
k. h. i& w0 U3 J3 u1 |2 ~# h' T
问题# T& M; N! G) q# U
0 z2 J: L+ t$ K! f* Y' @7 }# R; p1.如何访问会话变量(session)?
. M8 E( }4 b) W, [6 M+ ~5 f5 M2 C1 l/ P" L. C
A.通过$_GET3 l% K! q7 }0 f: B9 ?
B.通过$_POST4 R# I) k( v0 X8 n2 T9 a( ^ a& `
C.通过$_REQUEST3 l9 P. \$ G, } V' K1 c+ a
D.通过全局变量
! p* _- ]9 M! g! {E.以上都不对
: d5 }/ P2 h# ]# B1 C: H
+ u, |& t% F- ^. \- ]+ d
0 B& }2 G9 [7 ?0 {* e2.哪个函数能让服务器输出如下header?
* {' W6 h; b# O9 u r* a( {5 h; O, k; n5 x
set-Cookie: foo=bar;1 ?- z$ X0 R0 Z. k6 j* N) M( Y
8 O$ b# H% M9 t
答案:_______________
6 I0 l& I* I) R6 J$ `+ t9 w
8 ^7 X; N! Z; `7 }% w* X. s
& E& L/ j5 I# J) o, h3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?4 M' {# e* ^- @5 V
* U9 o' i( \$ X
A.通过HTTP_REMOTE_COOKIE访问# u, c* w5 `* _
B.不可能! X- I% A, U+ M$ E! I
C.在调用setcookie()时设置一个不同的域名
6 T. F, g" k. F; TD.向浏览器发送额外的请求
4 H4 x G, B! M' ~/ ~6 D0 RE.使用Javascript,把cookie包含在URL中发送
4 {9 @) C+ }/ V
+ x& S3 C" D G
; ?# I( d4 Y0 j+ ~; |# u4.index.php脚本如何访问表单元素email的值?(双选)( K' r# c- ]) S8 m: C9 k( \
( w+ l' _; @/ ]9 ^' x<form action="index.php" method="post">
8 F! [ A- K' ?<input type="text" name="email"/>( n4 b; N+ y, r9 z6 X, c: c& `
</form>
3 y ~0 f% U3 U% ^: b$ L# w% }6 g/ M2 l+ h+ `
A.$_GET[‘email’]. q' j0 t% _! Y& T, z
B.$_POST[‘email’]* S: D% b N4 p( d/ e% q& v
C.$_SESSION[‘text’]: B5 a' ]5 r4 O" | y
D.$_REQUEST[‘email’]
1 O7 V% q8 e4 S: T8 \E.$_POST[‘text’]
1 c- \- s8 g2 j& Y: i7 S: @5 j+ w; g* g
5 }8 i3 r p5 H2 k2 e+ |
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长+ A9 T( U0 z+ E3 G- N
B.没有变化% I, A- Q7 Y* E; _/ _
C.在浏览器上打印该字符串时,尖括号是可见的
+ T# H5 L* l# Q6 nD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
+ T1 D' H1 v7 K& b/ [5 ?E.由于调用了htmlentities(),字符串会被销毁( W8 @0 \; f0 s% m0 ?) d
' ~, \3 n9 Z) N7 C6 ^; Y7 c9 @ G' v* n3 g
6.如果不给cookie设置过期时间会怎么样?
' j* j# `6 o# i; L) @1 p( e
2 T& k# z) f7 `5 S) E6 r1 s( zA.立刻过期
, P4 G, z! s' s, h# iB.永不过期
# ?! K* W8 U t) Z- R' l) y+ M. cC.cookie无法设置+ x y( D' x% d2 D8 `
D.在浏览器会话结束时过期
9 v. Z! J* c. N1 `0 bE.只在脚本没有产生服务器端session的情况下过期) h. k d0 b$ i
1 I- ^2 ~9 @. d: c8 Z; k
$ U5 L! n! h3 \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.什么都没有
9 o" W7 c0 X9 A+ o7 ZB.Array
: K$ R$ `& |7 E. AC.一个提示
9 W" G( Q. \0 u& e W; XD.phpgreat% g' ~4 ^) i# v6 y, ^/ E0 q
E.greatphp
5 K8 ^/ l7 K. i8 c& G( g/ L* g I7 o4 T/ a9 e4 Y- T1 ~+ r
3 Q0 x7 b' u9 z5 e1 N8 ^$ r5 ]8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?' K- {! A; L+ r: j! C
0 H2 Y: j" b/ S* d" x, LA.这两个是明文传输,之后的信息加密传输
, ~! K" z; d: p) ?B.加密传输
/ J9 @! l) I2 q* A6 z6 w8 N! \$ HC.URL明文传输,查询字串加密传输
9 t* l6 T' J6 H5 _ [- s1 f! ND.URL加密传输,查询字串明文传输8 } R ~( Y2 H7 K* J3 c0 f8 Y Y
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
0 l8 j* u" Z9 B
- O) ?8 a6 k2 W2 M% k' G$ n6 D: g
% G- o4 F4 x: b G/ v! H: j9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
" l5 O* s( y: M5 `7 v4 K" ~7 }% R0 e
A.它们组成一个数组,存储在超级全局变量数组中
/ Q# k/ j* Q: L2 y! oB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
4 l: x5 h: c$ t) N# p4 oC.第二个元素将覆盖第一个元素
; E7 c+ G7 o: `$ ^' f8 w8 L2 ZD.第二个元素将自动被重命名0 v1 G5 [. P! W/ z& i
E.PHP输出一个警告
4 R5 s! C: f" w- ]; G3 k K+ S
) }$ h+ l' t% M* Q( O7 T w, C. q7 n9 [( d A
10.如何把数组存储在cookie里?
. Z6 D. ^2 l* w" T; l; W
2 }- \7 P: V# q0 B4 a& ] vA.给cookie名添加一对方括号[]4 v7 @% f/ H0 [7 a
B.使用implode函数
5 i3 }8 n: m; z/ {3 \' yC.不可能,因为有容量限制0 T0 ^" H- A6 f' C
D.使用serialize函数
9 E' _3 r" [, V- b3 h, D3 uE.给cookie名添加ARRAY关键词/ u9 m7 ?; t. o+ k& Z. T5 c
$ q2 y& Z& V7 l! \; v1 _0 w4 V( Z
) f" c+ o( P5 T$ N+ O0 a' C11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910# [0 O; T6 j! N, Z4 [
B.1234567890! U7 k& ~- S3 p8 k" ~& E( n
C.0123456789
* C7 x! f2 I* pD.什么都没有
1 F& j. |) r' v) e/ ~6 oE.一个提示6 Q3 m# m! {' e. u9 [
2 E4 o: W# ?$ J. \# F3 y7 r! X! v& g
* Z" X% y3 y: ]12.默认情况下,PHP把会话(session)数据存储在______里。+ h/ R7 N7 `( B& c1 W1 q; M& r
: f3 e/ M6 h( g5 b X( _& SA.文件系统
" D$ j' C' r, y3 j' f) x' pB.数据库5 o% W1 K1 X1 ~$ g4 X1 @! [
C.虚拟内容
+ p3 ]+ e4 ^/ A1 p( x' j8 gD.共享内存5 b% C% \' }& ]- \% ~( v3 C# |% w
E.以上都不是1 W6 o B x/ i8 y1 v3 n: _/ W0 i
) o, {' @( {9 C9 s: X1 b W" L$ B# T j
( L3 `4 L3 r. Q- D9 O1 D13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
5 r: \- F# l& |6 C9 y" }" i" r( l, o2 I& Q2 n
A.浏览器的程序出问题了( V5 T1 k7 J2 M' M" D% H
B.客户端的时区设置不正确' w. `4 k4 ]6 a8 r7 z7 i
C.用户的杀毒软件阻止了所有安全的cookie/ b/ v$ [" e) T4 }6 h. w+ w/ ~
D.浏览器被设置为阻止任何cookie" p+ S) B* q/ `9 O& c) A1 }
E.cookie里使用了非法的字符
+ q8 g0 ~: W5 X3 [; V
) S4 @* ~1 b4 c- }2 G$ l; G* q! x9 a8 d$ I8 e" Q, n0 ?6 Q3 m
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?8 m/ N3 `; F/ c& H- t1 K) I6 X
) Z2 ] _' \! ?/ K
A.1440秒后& J4 o( B o0 q9 S/ l
B.在session.gc_maxlifetime设置的时间过了后* x( e( `- ^) Z. W( o% H- O, l
C.除非手动删除,否则永不过期% h$ n8 }1 J; N% W
D.除非浏览器重启,否则永不过期6 u ~4 n- ~6 a+ M
E.以上都不对
* j1 [. W8 h$ l* P8 e" C$ A4 m( y) y1 B8 \) u
* e3 s# y2 S# @$ |# ?/ a+ V4 y15.哪个函数能把换行转换成HTML标签<br />?: h+ V. X/ _8 n" f
7 ]( W4 P( W* }) n$ W. Z
答案:____________2 e- @6 y( o- T8 b
# z) m) Z+ Z8 |# m; T6 Q) `- C* n% B4 m
, L! v0 O" ?/ h; n% z答案速查
9 v$ J0 A$ E8 f8 ?1:E9 i* [- |: H! t# m( O
2:setcookie/setrawcookie
" p Z( v9 ~% h3:B
4 g# H' y5 |! f' E r0 N4:BD
; ?0 y! E B8 v5:BD, \# j* v% V8 _$ }1 q) ^
6:D: t: q( Z3 f# k2 r4 A$ `
7:A
( s) X7 |1 ~! a/ G8:B" v3 h- R; z: o! |
9:C& l5 e% [/ w! a
10:B
+ j, K2 h/ d& `11:E
# V4 F( ?* k4 ?' y; q; x12:A
9 E2 V' I# W% H+ ~13:BD
, c1 S' w q, y/ G: Y1 Z14:B1 J: c. E: p$ h- h/ t
15:nl2br
! s4 V* d( T# U; p# J* P
Z y" T5 ^. c- P5 }
! j) S& `" }* q- U% `. I5 f
$ d4 m/ X5 s5 u答案详解
0 c( w8 Q7 ~& S& Z7 d1 |8 Y
+ M. U9 ~9 E t" F1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。3 k7 l( P8 b# C) T% K7 N
9 i6 i) `( O' A) v: N, W, ~# |2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
% M$ r# j+ [, W+ O2 Z$ A1 w
) T; u* Z7 Z# R: s3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。7 x6 x* \# Q; r- @% M
" n7 `- Y+ t$ k. ^% S+ n1 M4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。6 {! Q' ]3 N4 s( |1 \
7 i. A* Q5 X! F' i1 L! h( z1 Y
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。+ s. O3 y" e, E3 G, O* L$ M
8 J$ L9 `. z& J# D# z# _6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。6 z* I& V7 Z( G/ |; C( R& c4 w* d
0 w$ s/ d! J- S1 C5 D* O3 \& a
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
+ H2 S5 x* W0 p! H
; s9 {, P( l, T( V! m* L8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。1 e2 g- P/ c( K% O2 J
, y/ x. T7 d% i* W7 X: W q! S9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
9 [% n: ?0 z- U9 r0 p
& v5 `. Z0 w6 ~ y9 Z6 o10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。( g3 v' T" k2 G% ~
9 k( S" ]5 \ O, G$ Q& n2 i8 ?
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
& {/ K9 o) n8 K/ s
. t8 J8 E0 _) D5 m& I7 `9 [( s5 R12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
! ^5 n5 p! ~. F
7 t! P# Z' n$ E! b' o13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
7 A. p: U2 e. d) `! G7 x& }$ q0 A% _" c. x# T( Y
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
& k. G6 w5 q0 {( i+ p9 x
; F* v) p# o7 t' _/ d& l" T0 @15.函数nl2br能实现这个功能。 |
|