  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。7 ^4 a$ l% E! `; z& j- B
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
7 b' V0 q# ?$ w, ?6 i一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
( x7 `1 b4 @: y) T8 M, O
* M1 ] L" R1 Z: q! u! S. {6 o1 f. a( {/ d
问题) o8 U; {9 a$ D# X
- ]; V; c4 e9 Y
1.如何访问会话变量(session)?5 e# Y+ o) _, f! D9 m* Y
% F( e5 I- A3 g1 F8 Q9 cA.通过$_GET
& a$ d) V' P/ g, r- rB.通过$_POST% p3 {! c7 `( v7 s7 N R7 e x, G
C.通过$_REQUEST
* J* k# ~' g/ ^8 WD.通过全局变量" i7 U( K) \: m3 n# }
E.以上都不对9 y+ }. a0 Z5 }3 B9 Z
k. ^0 j. Y" `5 W5 d+ p w! T
9 y% u" U- S1 y# u/ Y: C* K6 L2.哪个函数能让服务器输出如下header?& F# a& W3 |8 u) w g
8 [. Z0 E1 K# {4 `set-Cookie: foo=bar;
% C* d) l( h4 w" ]* @( o' i( D- Y- r- Y# ~1 v1 u+ U% s
答案:_______________3 o+ i# H) I6 D- V V1 Q4 Z7 s
7 ~" i9 x- x; e% B5 _3 K* |3 d7 q' X( `* Z+ }7 v, O. E
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
3 Z" D. d. F0 `3 Y2 X* T1 D8 p. q6 i8 E( w5 z7 U; A+ g2 `. p
A.通过HTTP_REMOTE_COOKIE访问
9 l$ K, r0 y0 HB.不可能2 K l3 |& _0 m7 `3 Q
C.在调用setcookie()时设置一个不同的域名
& P( k: T1 y i' x( o0 K9 gD.向浏览器发送额外的请求
2 L. m* o9 R+ {) kE.使用Javascript,把cookie包含在URL中发送
7 k4 W7 C1 S, L" `7 m3 [# P" ^
# m- h4 Y. s% \! O: S4 q
" ~) Y, L D. j$ o( }4.index.php脚本如何访问表单元素email的值?(双选)* ~- p/ F G( E1 d* l/ e5 k
4 ~; Q7 K+ s3 D; d
<form action="index.php" method="post">/ z% O; v/ h: I2 J Y( X
<input type="text" name="email"/>
5 w; J" D, P1 P, e& C</form>$ H& U* c$ G2 V5 p- N8 R2 p
! g) z5 f( |0 X9 C4 z1 K$ WA.$_GET[‘email’]" V# p$ V" z. P6 {1 d% N# v5 _
B.$_POST[‘email’]; B: O; B. a# ^+ ~0 h
C.$_SESSION[‘text’]
2 h2 `' i& a; ]/ u4 hD.$_REQUEST[‘email’]4 _- T) Q- y! ~
E.$_POST[‘text’]
. V! ^+ E; g6 K3 A: s9 Y, ]8 w5 k' P" u. t* }% t0 S$ R- z4 E
5 D" `7 P; F x/ U$ ^* m
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
$ w$ r o4 r$ I* Y0 a7 o! rB.没有变化; m [5 H. Q8 M/ \3 e; j! {
C.在浏览器上打印该字符串时,尖括号是可见的
& k7 d6 w+ s/ WD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
+ l. e4 U$ \6 _; R8 Z9 F( kE.由于调用了htmlentities(),字符串会被销毁
2 `% W0 c, K" C- X8 n# T) a" x3 m4 c; H& ~) H
. p, w5 ?" T' p/ z W% f6.如果不给cookie设置过期时间会怎么样?( h" X p6 w1 P% c }1 u5 a
& B/ v& @% X; \6 C
A.立刻过期
+ f2 W- o8 z, B+ s" j2 C; i8 ?$ P8 \" qB.永不过期3 p$ a# |+ Y9 r# d3 h7 z" K
C.cookie无法设置
/ y9 E9 N& h2 o' x: r; uD.在浏览器会话结束时过期
) _0 L) ?8 M) T) r1 p4 sE.只在脚本没有产生服务器端session的情况下过期
& u/ i, V9 k4 a: l+ R$ ~! v. c ? ~9 ]( |* h6 R
% X5 u' R- U* b4 }* s3 `
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.什么都没有, R }4 j8 K/ }
B.Array
1 L4 |! f4 Y- l, T EC.一个提示
( Y8 `6 ?) f8 [D.phpgreat
9 V3 ~# ]: m" F: J0 AE.greatphp
& `1 o$ F* L; d
$ ?' F8 z. w L' g$ c: |2 B
+ C, I! Y' n; u8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?* U0 O7 I: j. e7 E/ l/ \
- d7 ]1 V/ v& S0 R. X! yA.这两个是明文传输,之后的信息加密传输
9 _+ g% h, c) sB.加密传输4 V) b- v. H2 m& a
C.URL明文传输,查询字串加密传输
\& C! d7 F- O- v bD.URL加密传输,查询字串明文传输
# U! ]; m5 V# D# p; pE.为确保加密,查询字串将转换为header,夹在POST信息中传输
" k" K# {7 U& i' R7 ~$ Y8 z* T# m! p0 g+ y2 I. T
, M4 f1 Z& p4 j( U5 r% t
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
6 {& D+ E$ }" [. Y& \" K$ B, m7 Z9 l
A.它们组成一个数组,存储在超级全局变量数组中/ z" ]6 T1 W0 h7 [
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
9 z! y2 Q K2 Z; ?2 b, Y( R/ tC.第二个元素将覆盖第一个元素, P( ?$ X8 G( J2 l, A- m* J( O( M
D.第二个元素将自动被重命名6 y0 c0 L/ v9 c$ F# r
E.PHP输出一个警告
5 u( J3 ]! K, w9 `- ~& d5 v5 A2 J7 O6 P4 E* c/ R3 T
% r3 @; W! G0 Q/ b/ j
10.如何把数组存储在cookie里?5 W! m6 R. z/ V5 ~2 G7 n1 y
6 w0 @" ^0 T: `
A.给cookie名添加一对方括号[] p0 D: P4 P" k% ]
B.使用implode函数 R$ X: p4 ~5 ^$ H
C.不可能,因为有容量限制
* Z. C' j9 ~3 f2 U" R, RD.使用serialize函数+ b }& ?* E$ }
E.给cookie名添加ARRAY关键词: v G4 R. Z1 u) K( M/ P9 O0 _
) A" p; G K# N J
- R+ n* V7 i, U" a: M2 ]4 c, Y11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910, k9 b+ e) Y0 q' N+ p; c Z) q
B.1234567890
8 C! V Z/ x) l B3 WC.0123456789
) v& G; Z* I- J7 u) A- {D.什么都没有4 I( u$ m4 A! c' C- t
E.一个提示
# l, H- w1 _! K, E" U% |
+ A5 F3 v* T* H/ e+ N/ T4 d
o1 \3 K1 c2 r c e0 O12.默认情况下,PHP把会话(session)数据存储在______里。
% F1 H( }7 R& k W( }( I
5 c7 b# r# K1 \# \/ a4 y, c/ q2 h/ sA.文件系统8 k0 i3 g( X8 U
B.数据库
' l+ t& U* p8 w! eC.虚拟内容
3 \# M2 \( W/ L( vD.共享内存0 }/ C0 F3 W+ e1 Q$ r8 v$ }
E.以上都不是 S, r; p2 G* k1 b. C
. [% A( U7 W/ G$ R d/ Y
! p( y# r6 ?* \0 V13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)/ r9 |, ]$ n7 `6 p
/ e% q' Y$ d5 v- n
A.浏览器的程序出问题了
) K0 j% g2 `6 M+ l8 t# uB.客户端的时区设置不正确5 o1 v5 t0 g/ @
C.用户的杀毒软件阻止了所有安全的cookie5 X; t2 L3 ]/ }; N1 s
D.浏览器被设置为阻止任何cookie
1 @% H, b: a0 D* r0 O2 J2 G# Y {" YE.cookie里使用了非法的字符
. B D+ z2 H8 G$ g& ]
4 e. H( z9 p) ?3 d7 z. S; ~* I( S$ |
- P/ E5 B9 C% U9 C; o3 z- o14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?' S1 C' u9 w3 Y( o5 [0 y
5 c9 L/ u* G6 l) ]+ ^! DA.1440秒后
" [/ s) t/ A% vB.在session.gc_maxlifetime设置的时间过了后
, J) u g/ d% C8 u( z1 \C.除非手动删除,否则永不过期- P5 b% H4 d4 R2 m$ K0 X
D.除非浏览器重启,否则永不过期* ~- d& `. O! S6 U; k: N- R
E.以上都不对
( K. ]+ p) E' [' y+ u4 w: i0 I( p: W* J H0 L7 c G
& Q3 M) M5 K5 @# h! x
15.哪个函数能把换行转换成HTML标签<br />?0 W! c8 r# j9 {: v8 H+ m* p2 h( A p
9 J. I2 [ m& D n1 K0 {# }
答案:____________
5 V- u6 f7 V% b$ ~8 e; M/ v- O; E: y) |" A" |
9 \$ e& i# C' F$ e3 r7 G
# A! ^) O$ ^. ~0 r答案速查$ |" r/ H& a% I( q, q
1:E
# n; Y: P7 E5 b$ ~/ _6 l! F2:setcookie/setrawcookie' D) j p3 a1 i
3:B
$ \, K7 T. S1 M [4:BD
) ?) W# Y7 B8 y3 a+ ?5:BD
" [* O1 f. j: N: i6:D
' Z! `7 a, \/ g. u7:A
0 p6 c; M e; c/ a+ E% J" Y5 c& _8:B3 x# l- q) n$ L# K; r8 ?8 n# z
9:C
+ U. N! m0 Q0 Q# A: G10:B
8 f% M" x) F" ]2 E( R' k11:E
. \$ A, s+ w# B0 r% Q5 ?- z12:A
( @4 p: v5 L4 M! y13:BD
. S8 A# L; D8 n/ h14:B( |7 c) v( ?8 Z! @8 E: i! p( [% f+ i
15:nl2br/ ?# {; O6 \" A+ N0 ^
5 v& `" V& b. z3 x+ p
* \$ r$ p. k* o$ s& [4 I% W
5 W% w; {4 _$ F3 R6 _/ a答案详解8 j# ]; J# W& ?
X0 d) {5 ?! A2 U9 U1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。3 t+ E y% [0 W6 W" i3 {8 Y
! p. V4 a8 _0 o2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
% \0 Y4 u* l) j' Z- I
3 B9 U5 ]& s5 z. ^) _) M3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
7 l' f% r+ v! m- @0 @! j9 _5 t. Z `) Q* ^. X/ {! ]5 F) O
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
5 R, Z) a L0 ]4 i# ]
$ t5 e% z* l e3 O5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。+ P7 @3 i3 i( Z* T
5 u) e1 ?) F" Y. u
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。2 ~% |3 R" A9 u h5 L r: O
) Q6 h( \) x q* b5 j) m
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。7 D! Z, k2 w1 l: Y5 s
* \) C0 r" j5 j/ b) C9 E$ f
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
# M! n3 r6 s- O7 k2 e& B
, ?% `- I# s3 r" Q/ o0 n$ a$ k9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。! {4 B% K+ W- W( a1 c; Q# l
" k) |0 ` P8 b9 M! l10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
/ i7 w( w) }& x1 Y
N1 V2 v. D5 j! ~) b11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
$ C8 g$ U$ a1 n g; G# Y' Q$ W) c- Y* T: {! Q9 Q( ?
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。) F. _* X- l' ^/ f- r/ Q& N" [
" R" R! `/ i* D- k$ ~& E# ?$ N4 {13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
! N V$ C5 c, x ?& A; t# |% e2 e5 L9 Y! g
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。$ x& _0 O6 q2 z6 D
& A) b; Z( ]3 `15.函数nl2br能实现这个功能。 |
|