|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14325
- 金币
- 2448
- 威望
- 1647
- 贡献
- 1396
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
2 O1 I" n( X4 t8 \' I与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。+ z! C3 M- M3 v9 N% u8 R% w
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。$ @* t) |1 d- I1 d/ O7 U& ]
4 H7 E) I1 E7 H. y: s
! K/ n% \: M! w
问题0 v4 o0 ]* y& H3 W+ r
- o `2 G% L0 A+ E
1.如何访问会话变量(session)?+ x8 \! Z! c( `4 s4 h4 f8 w, I
% W; m3 K3 r& A9 Y) Q. Y3 KA.通过$_GET
9 z6 C/ }9 @0 I9 B$ ?/ s3 Z, vB.通过$_POST4 r- u% ^* `" O" c
C.通过$_REQUEST
6 |! v9 |7 \7 d7 F/ vD.通过全局变量6 r6 v8 a" c! `1 Z0 E, v' p
E.以上都不对 w) E* m5 p: j0 q) }+ e; F
; p- R$ x- P, q& ?1 \
3 O+ q; o* n8 ~7 q6 S- v2.哪个函数能让服务器输出如下header?
) Z! p7 {2 |& A$ n& o
) w7 |2 {( I) |$ ]set-Cookie: foo=bar;, i1 ^+ U0 s: I4 ~
3 h: Z7 S- R. w1 K; s h# U# i( }# k' P答案:_______________
' h6 @# i/ `& O' O' [) S1 V F5 D' {) w- t8 J
7 v7 M. w) w, Y; h6 |3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
* k. D# c) \1 M+ W. K# Q' g
' ?8 b( Z' F5 T }# ?A.通过HTTP_REMOTE_COOKIE访问, v8 I+ Z! F1 {; W: @( S" R
B.不可能& T" x2 U( h6 }3 b
C.在调用setcookie()时设置一个不同的域名% w+ j+ }, n- |( a t5 [
D.向浏览器发送额外的请求
/ C0 U, ~' q# D. W/ K4 m* ~& BE.使用Javascript,把cookie包含在URL中发送2 L6 k- m+ U" K+ z# p
, L! c1 ^* D. O: E5 H3 v, o' `* Z. \+ ~6 b# H2 A
4.index.php脚本如何访问表单元素email的值?(双选)) _- E; Q4 _" H5 Z: k
5 R$ J, Y6 m9 X. ]<form action="index.php" method="post">$ f# O+ s0 N% f1 o4 ^( Q
<input type="text" name="email"/>6 b& e- O( W2 P9 @% M( w2 W
</form>
6 A' |" ?% e/ e. P* c8 w% y7 ~- U0 c# ^( b% N7 H$ O; u* J8 }
A.$_GET[‘email’]
( q8 z6 L* M& l8 r, PB.$_POST[‘email’]
" a7 n: ?% W' Q: m: z" UC.$_SESSION[‘text’]2 W6 Y1 m# G# b L* L4 T* T
D.$_REQUEST[‘email’]
- S9 Z/ T1 K/ E: aE.$_POST[‘text’]
% K2 ~" [$ b: r$ n6 A7 ~" t6 i" ?% X9 Q" b
& u& P9 k. F" X
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长; I4 b9 P# O/ ~ d* U1 _# f
B.没有变化( S. H$ ^& k. y; p4 X& T& u* V d$ Y
C.在浏览器上打印该字符串时,尖括号是可见的! i; ^! Y! M. n$ M) q0 t- c8 s% w
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
2 F- A% y0 U. C. n- NE.由于调用了htmlentities(),字符串会被销毁3 U5 ~" @7 P9 N3 V1 R- V$ F
q; G2 i$ ]% u. V
9 `/ I6 U( N; G) v0 Y6 r. c
6.如果不给cookie设置过期时间会怎么样?1 a$ k4 n; h8 A* r5 L5 R7 | t1 C# z
9 S' C/ }' {6 v2 H
A.立刻过期) K) _& R# g" X& O
B.永不过期- ^6 }! N; E- V% {" T
C.cookie无法设置; g% y) e! L/ v
D.在浏览器会话结束时过期
. r, I1 _" h4 m1 v& Q4 AE.只在脚本没有产生服务器端session的情况下过期 c7 H+ G- Z8 x( w
- A/ E/ p0 W/ V; h! x
9 q- |6 i' G: C8 N7 W4 E% Y$ X! e7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有, {2 R5 ` E. r7 J7 k* V5 G
B.Array
) w" v. u9 B; A6 e) X; PC.一个提示$ L. Z. I3 M9 p4 N/ E* y% X7 s
D.phpgreat/ D* h2 r. q% n
E.greatphp8 t, ^; B/ Y+ g$ t& c% ]& _
: R# Y( G+ K: ]- g" G. f
! X; C3 d* F2 ]# l6 \. }3 f
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
5 j' u! A, F$ ^: H
" q! j- q/ x8 K( pA.这两个是明文传输,之后的信息加密传输
( n. s, a# z3 f1 ]4 Q- @6 u. _B.加密传输
3 m6 X1 M4 ^! V1 a8 s7 Z* d& jC.URL明文传输,查询字串加密传输
- _# f1 W# V- k: i, C; ]D.URL加密传输,查询字串明文传输
! J% B% u6 A2 A8 O0 q1 o. ZE.为确保加密,查询字串将转换为header,夹在POST信息中传输
% Z" B) Y1 d( o6 }) F+ ?$ b# L! \3 S7 t( ^* C* l: b9 N
" E E4 N ]) P) l9 J; s3 n
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
8 V/ F+ X+ S/ z7 n' j5 ]5 X
1 E* f+ @! x6 f, K2 U& wA.它们组成一个数组,存储在超级全局变量数组中) ?1 V ]- G% m9 w) c8 [
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中$ H& h1 z) n. d. @3 c
C.第二个元素将覆盖第一个元素& e- I5 `% B5 }
D.第二个元素将自动被重命名
2 D2 q- o! Z0 r+ F$ r! ~; lE.PHP输出一个警告
0 S E( i; A$ x% ^, n7 b8 D& T8 c R1 w+ P' O* _# m
e/ E0 N7 e' O& @2 M
10.如何把数组存储在cookie里?
2 a! Q, n; O5 E3 A% G: u% m
, K4 }9 \! d0 g- }0 I. V1 BA.给cookie名添加一对方括号[]
0 u+ F) z- Z& l+ AB.使用implode函数/ o% }/ w3 C) z j1 k" ]
C.不可能,因为有容量限制
. R! d( _# S- O* n/ Z( FD.使用serialize函数
9 h. n( v& ]/ R) K; W4 p1 o3 BE.给cookie名添加ARRAY关键词
0 i* F+ g- V, O; I q2 k9 H5 r% g4 F: T( p5 b4 P
6 ?' R# b& w; `. s( c7 H11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910$ c; i; R" F$ O$ Q
B.1234567890
% @) H' r0 F" Z9 R4 HC.0123456789
3 O% N5 X4 p# Y/ f. V) \) fD.什么都没有" U) V- m+ |. Q" H0 F; [
E.一个提示3 h. I: ?3 u& [% j5 L- o2 |
. ?' q* b4 K+ `
# o1 p9 l+ `* E3 Q) v12.默认情况下,PHP把会话(session)数据存储在______里。
, ?# g: M) C) d; |' i/ o' f) }
) u8 K) V4 _& G! N( MA.文件系统6 v& N# }+ ? R
B.数据库+ {$ l' N$ U+ f; o6 z3 |+ n7 x
C.虚拟内容 h' V+ \5 ]- D$ R/ ^
D.共享内存
! o6 V: H3 T: W( C. i* ]3 k, YE.以上都不是1 ?0 n; F& l! I6 S
) B$ @ }+ [- c, H2 Q; P* P
/ v& Z( @- l( C8 b5 G13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)6 U8 U% |' r* ]$ Q8 ]2 V; Q+ g' U
6 Q1 n& k& D) G9 S2 D& }
A.浏览器的程序出问题了0 l$ h6 A0 j3 O N( y, D9 c
B.客户端的时区设置不正确( V0 B- ]! c$ `/ t! H/ I( L
C.用户的杀毒软件阻止了所有安全的cookie
6 O% k0 a% T3 b; \3 v) {$ [D.浏览器被设置为阻止任何cookie
# P( w: P, A d2 W- [E.cookie里使用了非法的字符6 `) i) N& c# K* ?$ E
; f2 G" p. o, {$ O ]' n9 L& y: ]& Z8 K% X9 J) y, n: J9 e
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
& `$ c) V- E. W. i9 c; k3 ]* e0 x( N* m: N
A.1440秒后
: r) K3 d+ F% S( DB.在session.gc_maxlifetime设置的时间过了后( _# e5 l0 Q/ T% I
C.除非手动删除,否则永不过期& I- t2 ^ i1 J! z5 j8 E
D.除非浏览器重启,否则永不过期3 X6 Z' h) \# S* J0 D5 h# N$ L$ f
E.以上都不对+ l; Y- K; @5 ~
. e0 d6 K0 X* e
u7 g7 t. |( R9 ]15.哪个函数能把换行转换成HTML标签<br />?/ p3 ?9 }" c7 ~" x0 n5 A
# y# y% e/ S$ C4 X5 _
答案:____________
# G, `$ R2 ?- N6 d4 O1 f% s2 |9 U, o. A* F8 I$ x2 T8 m; e
2 d8 W$ s9 n( R3 }; D5 |; z- D$ h# Q5 x0 P
答案速查
5 k) M, G" o# R1 b- S% w1:E$ Z/ r6 @# A. I7 s/ K' t6 j- s9 t4 A
2:setcookie/setrawcookie6 Y- l8 u' @! T5 C- S! n! P
3:B/ m7 k: j) E( r+ s9 l" z
4:BD: ^2 g! }% G. x% ^) H! d7 O$ P! [$ w
5:BD) M: z# Y7 {9 j) M
6:D
5 {8 Y& N1 `8 p; P7:A
- J# }. o& D% ~, Z8:B
- J& D% C2 y3 S4 C ~9:C: _+ f; U8 u4 Y% Y% q1 Q
10:B
0 g0 H! W( m M4 F11:E8 w9 c3 h/ J V5 s+ r+ X
12:A
0 L! X; |9 A: X7 [/ h) }13:BD
( l; A2 ^* X. U( p14:B
8 U9 Q! A2 w2 v( [15:nl2br% e- s* O/ g( X+ i' M" k6 M
- V7 z) ^1 n- e' z' g' c( \# N+ o
# L x% Z$ \( j& U) B) Q
5 S" q, A+ l9 S答案详解
6 ?. d, r. v& V) x% E- z% q
' U4 p$ @+ h, q, b* j1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。$ r4 A) O- [, e, f9 a0 L
4 W1 ~6 F1 i# u6 X/ j
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
8 L3 @( b% [# Y2 V
0 ]" \# i7 A& x. a* G3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
. b1 L* p! L3 C* L4 N$ Z' w# d* H s- Z- V9 G7 R# `
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! {! S+ I9 Y* @5 B% J7 e- @
9 B; a' J1 P% o5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
$ k& ]9 w" v2 n; a" Q+ C5 Z1 p9 E) M1 | s9 M$ e* X1 z
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
& p2 j& j. Q$ O, W$ m+ P# I
+ n z3 P, M# g, Y7 {+ N7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
+ I" h6 ~+ Q7 E, x7 |( p, n$ M k+ q; C- G
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。 u0 L) x; G# l4 |$ \/ Z
' p; Z4 U _, x3 ?9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
1 ?) v+ N- T i8 s O7 Q* a/ ^6 l& u$ @. j" W) \8 ^! v
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。) `8 m- A1 c' K% d
; [3 r/ o& f( N5 l2 {5 I
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。( I7 m. c- {6 C
) U+ A5 a$ E' X) ?8 ^5 Y2 o* P
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。1 p+ |: Y* r# m- v. O
. C+ H0 t# m2 G- Q8 U# D+ w/ K13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
1 z/ [: g# }8 f
0 R4 U% L- I$ M( T14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。- [2 i% X; r3 [7 i' Y+ y
) U0 b: K$ Z* c" |15.函数nl2br能实现这个功能。 |
|