  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
$ F) {# b: n! Q6 D6 R与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。! a+ m( ^% v9 T: G" r
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
' o! V, q/ t; n% e8 J
8 Q$ b4 g% e0 c2 o
: w5 C3 I3 Q% N7 n2 R: a问题
/ ]) S5 ]. x! V% V/ [2 H/ c I- x: s, U4 j( O
1.如何访问会话变量(session)?* x5 n9 S e5 y( j+ k3 u
3 v# f) o( L6 Q3 U1 q' j) D5 {A.通过$_GET
- a' i4 M3 l* ]$ P% l2 c bB.通过$_POST$ d/ _! k7 H: t
C.通过$_REQUEST
6 `0 I2 a; W/ m6 f( h( ?D.通过全局变量- z. q4 e3 K' q/ j
E.以上都不对
( z+ j. L* Q6 [1 v
, h6 @# d" }8 Q+ v: Q" R
, q8 a# ]( a' h" Z' ~/ F2.哪个函数能让服务器输出如下header?. N, l( L# Z+ |, x; k
9 Z) b$ q% Y4 h! C" N kset-Cookie: foo=bar;# _$ J( Y% m0 s# G; j+ L( c
8 h4 ]5 G- K7 a! {' r/ q答案:_______________2 O# ]$ x* o( K5 R A' g
. U& n3 W+ }7 h3 `7 O: i1 R G( L3 O2 |2 [
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?( M$ K1 E+ P# ~9 `: B3 u
3 `# _ e |. d5 s! |1 P# r3 E! LA.通过HTTP_REMOTE_COOKIE访问
( z9 U: m1 W( o* aB.不可能* K" y2 h5 K+ m w4 r `2 Z
C.在调用setcookie()时设置一个不同的域名
6 k. w& w4 L( C+ l+ `& ]- gD.向浏览器发送额外的请求7 k7 i% W- N3 t/ `' D# y
E.使用Javascript,把cookie包含在URL中发送+ ~, [# ^. W) B. j2 P, K
, E$ s) C; s6 q& j5 r
3 T# l1 f. Q& B* V+ X7 s
4.index.php脚本如何访问表单元素email的值?(双选) R) u$ L5 H" p0 p) A# |" o* `
$ {6 l& d. \; R<form action="index.php" method="post">
+ s2 \8 K7 M% Z3 k<input type="text" name="email"/>4 n- v1 d1 V6 |4 b9 Q
</form>' q6 j4 X2 j6 Q
& W6 ?/ }7 p8 W. K0 k. a& X
A.$_GET[‘email’]
1 c" k. |9 ]3 {" H# g( ?B.$_POST[‘email’]: a' e Q- T0 X: X! B O3 D
C.$_SESSION[‘text’]
! |2 e' E( K) n# AD.$_REQUEST[‘email’]
5 g0 r7 }6 T; j5 S" z6 zE.$_POST[‘text’]
- v9 o2 v- f( c2 J) z7 w+ l0 i* D4 k" s4 g$ I, r
; r2 ^# n3 N9 d2 p3 s
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
& t% m9 w: h) }7 C# U2 u' u9 LB.没有变化
+ u+ q8 D9 h6 P0 qC.在浏览器上打印该字符串时,尖括号是可见的- {& O) Q: T* [: v8 O
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
: u! D/ {2 \: ]' v; x5 _E.由于调用了htmlentities(),字符串会被销毁3 I$ c R: {+ z0 _9 _ g
; R% Z/ _3 F- b1 ]
6 c L4 W; R% x3 s. g7 e6.如果不给cookie设置过期时间会怎么样?8 s' S* m8 b& V
! t6 s4 j) D% A8 P/ `3 MA.立刻过期+ X& K. j( s/ C2 L: b
B.永不过期
9 b* E) H: B, D4 X2 }! [: @C.cookie无法设置
8 \5 j+ k: V. M, J- a) r0 cD.在浏览器会话结束时过期; I0 m# B. o" ~ }5 h$ a9 H8 W( I
E.只在脚本没有产生服务器端session的情况下过期; \( a/ z7 d4 l0 m
; D; S3 R! I- C$ { U4 ~% c
0 Q; ]6 B* ^1 x3 P& R7.思考如下代码:如果用户在两个文本域中分别输入“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 a( B6 Q- u8 D. Y& f4 ^( y
B.Array
% q* h/ H0 L vC.一个提示
% B% t- W/ V* W3 ~D.phpgreat+ D# w2 S: I% }- I) a' @
E.greatphp
' w! }1 u: a1 E$ f) w& B$ a7 ?6 r. I4 u7 ^
1 a2 { h" _' }8 l
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
5 M5 |% C0 Z3 l: h
) w! T0 f3 i/ G0 k( C& C- HA.这两个是明文传输,之后的信息加密传输! w) h/ p0 t. c
B.加密传输
5 K X" S- R% C2 S1 aC.URL明文传输,查询字串加密传输( m9 w2 }3 @9 c F: c
D.URL加密传输,查询字串明文传输
% Y0 Y5 P3 n* ?! \# \6 FE.为确保加密,查询字串将转换为header,夹在POST信息中传输6 I# q1 ]4 k8 g+ |8 q: b$ g0 D7 [
[) x7 [1 p1 J
D4 r2 r) y1 U4 {, [9 j
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?: e6 e& ?0 { L4 \4 X2 E1 M/ a6 [
4 Q- D6 j) K$ K& S8 k5 Y) XA.它们组成一个数组,存储在超级全局变量数组中3 B/ m4 O' O& f: n0 M
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中& H- ]! ~0 {3 h6 B( E: w! |: k9 s
C.第二个元素将覆盖第一个元素
2 D+ ?* u& |( p: ND.第二个元素将自动被重命名
1 N ?+ W$ A5 l2 a7 w2 jE.PHP输出一个警告
- X( {6 i3 }* q7 N+ H" U2 r$ x
- s' _" y% l& M1 c) U/ D( M
+ d$ c7 G: x- k- B3 |10.如何把数组存储在cookie里?) T/ p9 ^. i% [" P' E9 Z" p
3 ?! H" d) K' b* k
A.给cookie名添加一对方括号[]" U$ D' A9 D, ~. W7 [! Q, F
B.使用implode函数4 }6 Y- n6 Q7 Q
C.不可能,因为有容量限制
+ T& i7 a% B3 mD.使用serialize函数
8 |& ~. B% Q; C, d& O6 [5 DE.给cookie名添加ARRAY关键词
7 h( r1 S' } w
+ a; N; M, ~6 J/ f+ R- Z+ r
) w2 h; w+ A9 R) I' t; V11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910, S Z i s1 e3 I" _1 T, v
B.1234567890
6 o) k, n6 W7 |. h$ q+ l1 vC.0123456789& w v: S& b& h" u/ J4 d
D.什么都没有7 q2 x% h1 r: l! k! G3 y# e- Y4 v' L
E.一个提示
/ C5 }2 R! v: Z7 O4 J
% _3 ?, O; t; T, `9 ]
. j, d& i. I, L( R' H6 }12.默认情况下,PHP把会话(session)数据存储在______里。8 Q* g6 m$ B; K% j: ?+ D
0 G+ _/ e6 L& [9 @5 g
A.文件系统0 I' a: h- r% t5 A6 j
B.数据库5 n0 a2 D# }$ Y, A2 F
C.虚拟内容
: _" h. |+ o* c4 aD.共享内存) o% `! a( P P- I4 ^% p4 W$ p( d
E.以上都不是
8 t D% u5 f3 e. a# j
1 Z L8 K5 _* ^( M
0 e6 y; _; X. n# ?0 e' {. C6 v. @13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)7 a( g9 L! c& L, z$ u
6 N# r' D7 H8 d8 ^ S6 C( S, V) |A.浏览器的程序出问题了, ~+ F7 [ i( Q2 l1 ^
B.客户端的时区设置不正确
2 l: A) D- z7 A, N0 N7 ~: [, vC.用户的杀毒软件阻止了所有安全的cookie
/ L% x+ `$ G" d. m0 |9 P- ^D.浏览器被设置为阻止任何cookie
! u, i, Q# j7 `/ eE.cookie里使用了非法的字符' x$ }, K$ Z0 C" r; N2 q
3 c* e) l, q0 i5 p' ]( @8 B
8 \9 w& R' B% q. s0 c; ]( _14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
$ I' K2 b1 }1 X3 C( Z" l$ U7 F/ l: g* I5 A; b$ V$ T4 H2 a3 G* R
A.1440秒后
+ [" X! V: m v7 l! i9 G( H# mB.在session.gc_maxlifetime设置的时间过了后
- U; Z# Y3 Q5 j$ g6 g5 ~7 }C.除非手动删除,否则永不过期
, U& Z0 N$ F3 v. q# iD.除非浏览器重启,否则永不过期2 {) N2 p7 ]7 }' C0 A% d$ y7 V3 F
E.以上都不对& h& w$ G+ C% ?
7 s( x4 Q' h2 g
) M0 G: ?' C) F15.哪个函数能把换行转换成HTML标签<br />?
& r0 a E: o7 r* N" H( f) S) W+ x' Q( @6 O# u$ g* J
答案:____________! u, s8 l t2 Q) @" b* N
7 ]& [% M; h% w. V
2 e0 y. ^1 m' X
& n. ^3 x& ~$ |( D) x
答案速查8 w9 Y4 { w; n
1:E; }9 J: l( p/ r) J
2:setcookie/setrawcookie
l! @4 V1 J. z! S7 n, U3:B: H& Z* ^. `* {% K
4:BD5 H5 c2 N4 f% i6 h# Y
5:BD
3 U7 O8 G }$ C, B$ d* t- ?, \( x6:D$ I, t! W. _; @
7:A
5 k8 j, T2 R2 V, K( l8:B" r+ T4 N$ ]( E+ ]* f& ~/ o+ S
9:C; E/ U/ x' h. B4 y L: `
10:B! ]! e7 j v" y, |" |, ^! i7 F" ~
11:E+ J. Y; G% { D
12:A' n, O/ c6 C" T. ^
13:BD- v0 O2 x/ b) V- u4 d
14:B
# n# C* u. t( H* K* [7 A( R15:nl2br* v( x- h* [- @% T5 [
9 Q, Q- o7 e4 v
' t/ G. N# z( \8 Y5 Z
9 p1 V" R$ m! G* l; M答案详解
6 B( S. V9 [! k9 j' Z/ _; A( A7 b
3 x; S8 N% z4 H1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
3 N, k8 y' G$ T5 S, h; m; i. Z5 i5 H! z1 s$ n
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。. O! f! Q- e& @) y+ j
/ Y( H( W, _7 P4 T/ ?8 l& s# o
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
# k, U! l; E( \& ^+ z4 o, k
n3 L! W+ L Y1 ]( o8 s# _- t1 e4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。* d# l. F8 F3 ~2 w! D) x: l# ^
: l5 N2 K) H; F, E2 e0 H& _; L' s' L
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。/ c5 U S) u7 z9 w: g: Z
5 p9 a4 ~8 N. \3 K1 V6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
# i6 X9 ^2 _* s
- P: [/ R' f, z5 U4 g5 W! r7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。/ t7 [5 Y* V, \( p6 p; A
: p" g% }0 z, N+ q+ C; u" l
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
% Y+ S; a2 R6 i$ W Q$ G3 Z. H- Q# F! J( C1 f3 N% x! j1 t! H3 L) M
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
2 Y4 l. U, O( G' s
! s; w! K/ d, h/ m' n U2 r. A5 {10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
1 g- x, \# D+ g9 |: G0 U1 ?; e
6 r* _9 v. L" U' w2 \ [- T0 D11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
" H6 a2 t5 G x6 S' d( T( R' K
7 m' m+ C, N- z9 f" D# V2 P12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。2 X( x' X/ G6 _" O j8 M
2 L2 _. g% x' I2 H
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。& n- @0 R# [5 {
" D4 G B/ ]/ g14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
& S* x% }, y/ [- g) {8 a
G" [, O, m6 \4 h/ x; \. E15.函数nl2br能实现这个功能。 |
|