  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14221
- 金币
- 2401
- 威望
- 1647
- 贡献
- 1349
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
9 B; g: z+ q& S5 w( q5 J与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
% k* Y0 q* _# p3 Y一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
; j2 J, ]' Q! j7 |- L3 p; @6 l7 Q) F+ C* I6 c5 n# e
$ f$ U" |$ n1 e& J1 A9 ?问题- d# K8 }+ g" N5 t, v9 u! D6 v
7 W/ E7 `2 Z- a( [, ~: k" E
1.如何访问会话变量(session)?4 o+ T) {0 y4 I8 Y. u) A
7 h8 U5 u% c. I
A.通过$_GET# b2 K& N. r+ M& p3 T# G
B.通过$_POST
5 ?( ?% l& w9 k* g. E1 J CC.通过$_REQUEST2 E7 T+ T1 Z8 k/ C
D.通过全局变量
, x, B- ?8 w$ ?2 o% o0 sE.以上都不对
, n+ D8 ]0 ]* B; @. ^- ^
3 N- `- b9 J/ O/ D. i, {
2 L" s$ h8 y. T, t# g. B2.哪个函数能让服务器输出如下header?
6 ?, N+ b9 U' q |( N) `
* ^5 \9 o) j3 e7 m) U. I0 cset-Cookie: foo=bar;" ?5 f/ u' P3 \! c/ q% P% D8 n
2 O: S5 T6 S1 Q0 X) T答案:_______________/ p( U! @7 u* a: J
/ V6 b4 f# n# [! C. L* z
' i7 k9 t/ o/ z! o3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?4 E/ X# F e- ~1 k d6 r
& j' j* s3 i; z Q# M3 wA.通过HTTP_REMOTE_COOKIE访问
# D _$ _3 E* ~* _) W( b2 m6 z Q1 pB.不可能
; Q, [" x6 L+ ^' J6 a& N# O- IC.在调用setcookie()时设置一个不同的域名. F1 Q7 o& C# t7 k0 {
D.向浏览器发送额外的请求$ _/ S% r9 A0 j+ r+ _3 k3 X6 B) V
E.使用Javascript,把cookie包含在URL中发送
7 ]5 w! G( E# b6 w3 S4 d6 o& [, k
3 `/ v' t) W9 c1 `$ X
4.index.php脚本如何访问表单元素email的值?(双选)4 `7 ]$ w2 ^1 |; n: m
6 t3 ?( ^9 t3 \ m4 V* u, B! Z3 e: K<form action="index.php" method="post">4 Q+ B* g4 a/ M0 H
<input type="text" name="email"/>+ S- c( ]4 D9 R8 o4 y9 Q
</form>. E- O! F8 m4 h0 {- t
/ ?! ^9 p2 `/ s1 `6 I5 p% Y5 K# y
A.$_GET[‘email’] Z3 c) e6 D3 ~0 O. v* [# S
B.$_POST[‘email’]- h6 [- O4 n7 n
C.$_SESSION[‘text’]
1 x/ ^; c& [5 h- RD.$_REQUEST[‘email’]1 B q8 j# J- a# y/ m
E.$_POST[‘text’]
0 e0 ?& |2 B& h* e, i8 y
1 H! @: G7 t% f+ i: D5 }1 e) s+ o5 z, ^# e0 R3 k
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长" j, c; d/ d# |+ ^' t
B.没有变化+ v) f, |! E: Z8 o; u! A
C.在浏览器上打印该字符串时,尖括号是可见的
F" N' C$ T. j4 M4 s6 PD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见 ^- O( w( Q! [7 m
E.由于调用了htmlentities(),字符串会被销毁
. ?) @: K5 g2 t( S: a) L, K1 h Q: T! {2 y# }% u% c
2 d1 V, A9 B* @5 K
6.如果不给cookie设置过期时间会怎么样?
P* S% B- S5 J; \
2 D3 p9 ]7 i5 f5 ^7 gA.立刻过期
! V$ [1 D7 ]4 C' s( A% \B.永不过期
4 |! l, r) s5 H5 ]7 x0 DC.cookie无法设置, y. M5 ?3 @1 U1 C2 q
D.在浏览器会话结束时过期
; E" }/ {- w4 M% X0 d# ]% QE.只在脚本没有产生服务器端session的情况下过期 z4 p6 ~) k& ]( E5 n& {) T
0 s, X' m8 B9 I5 K T8 i" v
4 ?: b1 e! ?1 [; H' k" }9 H7.思考如下代码:如果用户在两个文本域中分别输入“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# z4 J% }* D& {& ]( `B.Array
; q, a: } F. ~, m* {3 d1 w$ O( `C.一个提示
" B& I: C) U7 [! g% G' |/ |2 eD.phpgreat/ }' C* Q% m2 V* G* \
E.greatphp
( B6 v/ t8 j8 b& j3 Z9 j" h
5 O6 n" s; \' `1 ~3 k p
" V, n3 _: R* `6 x E- d# d8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?$ [: L4 I/ U0 y, c& I
& _6 V# }7 }$ v2 t+ h; d
A.这两个是明文传输,之后的信息加密传输% d$ h- \$ v) E& d2 {
B.加密传输2 o9 H# K! j$ o! R
C.URL明文传输,查询字串加密传输( K$ U9 K6 {8 B9 V8 F; G
D.URL加密传输,查询字串明文传输
/ E4 E( V( q0 K% SE.为确保加密,查询字串将转换为header,夹在POST信息中传输
[" m/ r! M5 c6 M; X6 e) n! G1 D3 m( W' d" b
( F/ A) [2 H: b' I
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?9 }' ^: L7 x1 L9 b' h: i
. H* z( X& e& p) m) zA.它们组成一个数组,存储在超级全局变量数组中2 D, D+ j! G7 b6 c& |! n
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
9 S9 R5 }7 K7 |; w2 jC.第二个元素将覆盖第一个元素6 ]# o: I3 I4 l: @3 U$ d
D.第二个元素将自动被重命名' i8 ]' S. Z+ R* @5 z
E.PHP输出一个警告
$ i3 Y7 w" [9 ]) u1 o" G* O/ b! }: \# E( r) L5 \4 ?2 e
* ^; y6 V$ _# r' C0 M0 {10.如何把数组存储在cookie里?
! Z' n1 P8 \8 h% v
1 D: W' z4 C* A J3 m5 A: v2 p9 `A.给cookie名添加一对方括号[]8 ~. V% V" D O5 w' P. H/ a
B.使用implode函数2 W% S) `! B& i6 e1 Z5 H: U C
C.不可能,因为有容量限制
. e3 a& v/ g2 h% m/ s6 jD.使用serialize函数
- X! {: J3 \' {" C4 I1 |E.给cookie名添加ARRAY关键词 _4 _& N1 X9 K& U, X ]
4 V0 | X6 f1 O5 F7 k
4 U4 z0 b) g; p* ^8 D, V8 c' s
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
" d0 H, |0 _* z2 @B.12345678905 a3 M# m1 ~5 u+ X$ A3 d( e- u
C.0123456789
# l" ~! |$ h/ C$ q ~# C* D5 nD.什么都没有
8 X z! H m$ ~E.一个提示6 J, M& K3 L0 d/ j) ?# E
9 [9 \) y* R2 r- J7 |
# Y; |; H$ m8 S# `/ s* O% a
12.默认情况下,PHP把会话(session)数据存储在______里。7 H3 j9 s: c5 w# U0 z
+ }) o2 i2 v; {! G, `A.文件系统% \" Q, F% f( ]
B.数据库 i& d4 U/ z/ y( n; m% X6 U4 P
C.虚拟内容
7 k" ]! a+ `# C4 eD.共享内存( C2 T2 t6 e: U
E.以上都不是
" U& z1 `: s1 m4 B6 M3 a; n/ |9 ?
0 z+ U1 P% ^+ V; J# `/ Y( _8 V2 H8 ~2 M1 e5 _" F$ b$ G
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)' ]# f, F6 N. t( F" I+ g
7 ?$ b2 ~/ K! `! a1 _8 p0 b
A.浏览器的程序出问题了
5 [. {+ _ K! [+ s W8 pB.客户端的时区设置不正确
& b( |+ u3 B3 `$ ?8 GC.用户的杀毒软件阻止了所有安全的cookie4 ~! {. c- K5 n3 T
D.浏览器被设置为阻止任何cookie& k& X% N2 {4 A
E.cookie里使用了非法的字符$ U% g9 U) x/ f) U6 |
# T; `3 K) ] A
, n3 m% M: j* U14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?2 z) e) ^. h, ?
# P( w! u) O* P# l9 z+ R) ?$ \A.1440秒后
1 e9 H, c2 Y0 {B.在session.gc_maxlifetime设置的时间过了后0 x$ E! H; z5 q- h6 |9 Q5 f
C.除非手动删除,否则永不过期
d% P B) Y: c8 ^! D9 @8 u" l7 `D.除非浏览器重启,否则永不过期
# o8 O- u. B& O/ D/ OE.以上都不对7 D. W9 G$ I6 P/ c
$ N$ E$ }( T% d J
* ~$ }5 Y* d2 L' d9 r* G
15.哪个函数能把换行转换成HTML标签<br />?. S( C8 D8 A: h+ \7 I5 D
% w! e2 V( s, o( q答案:____________
4 H) M. t" H1 r) G: n! g) g* |
( F) J/ r. H. K
! P* c& }! g" e) w/ J& Q
. ^' i, Z( j! ]# z答案速查
/ P1 v6 d0 x! X3 p% @1:E
b0 C+ v' v/ u2:setcookie/setrawcookie& Y) u; g7 w$ }1 y7 e' ]
3:B
2 I& ^. B4 S3 x4:BD
# K0 F v) F1 V# _5:BD
0 O8 ?5 G y* u6:D
2 s: t; i& G: f7 P! i2 h, D7:A6 Z- Y; H& q4 X
8:B
: ~! J" E" W* G* H9:C. ?6 y0 @9 T* x$ y' [; i
10:B, Y, H% n1 K J; O; T# e" t9 v+ V
11:E
' O4 D0 N' w& M: s: |2 s) B! g12:A+ W7 C! b+ x# C1 D- L3 V
13:BD
^9 y( @1 ~/ `! O0 V' e! n3 C14:B3 W* Z4 \$ I9 d
15:nl2br
' u: Y. G2 A8 j5 w9 ]
}2 }. V# a7 W0 w q1 Y
+ j9 s) _4 G! i# F w+ W$ K9 V9 g( l& b" z
答案详解
+ F4 z" E/ x) x% }5 X" q3 R- U0 |3 U5 l2 \% ?1 Q1 x6 k3 v% X6 _2 {5 }
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
+ ~. G6 L4 `1 o$ r8 [: b7 A
1 Y: z- P w7 o) }% s. ]2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。" O; r3 C8 I8 S$ e% a! a; m0 _
3 W5 e9 X: [$ B" U& B7 _1 ^. F3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
2 b1 k, `7 |; r0 s% s o9 v3 P/ M! G0 {6 F" B% n G( n) A+ Z( v3 M. h! P
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。: j6 U1 ^2 g+ r& i. B3 Q# ~
; ~- U' ?. O8 x5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。1 N% z9 a5 ~ Q6 P
! y( M! v4 s0 a" N) L. R0 F$ u+ j
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
1 t% Z: H+ L- V0 s s* W1 N
( J$ j$ k7 p/ @: p1 N6 c7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
5 R9 W) t$ R: C2 Q' j/ D: y: `. S
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
$ n% M' S6 ~( ]5 |8 |1 @, E+ I
* b2 O' r' w& N0 B) e G8 d9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。4 r& p" |/ x' ]9 I
" ?3 t5 H6 v9 d6 K; V10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
9 O# f, y4 k$ D1 ^4 }
* ]! F& l) B, k+ |; o11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
% Q2 d% u$ b1 q; h" }$ t/ i/ F) P( l+ L
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。; V8 ^- K. @. J; \5 }, I4 Y/ K
3 `; W" H; B5 ~& a3 L; b2 d
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
& W: {5 M# m- B! g0 v: H+ e0 |
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
# ~$ |! }* D7 q+ Z8 D
% k+ l5 V( W3 D, |15.函数nl2br能实现这个功能。 |
|