  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14249
- 金币
- 2415
- 威望
- 1647
- 贡献
- 1363
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。; @* w. e( D* }" j; z. b1 g% F1 }
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
4 P' T/ E& f% |8 W一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
$ U [6 F7 M7 U# S& U
: z m5 y9 h/ [! a ^; `, p. Z! g& z) k+ y1 _
问题
4 Y7 e0 e' Z) V4 r% G' }* a4 o6 u3 \
* J3 |0 Y7 c; L2 `3 p/ l) b1.如何访问会话变量(session)?+ N Z& t! J9 c9 j6 \( E
6 _% `& n5 n4 AA.通过$_GET
' F9 \% ~) |- aB.通过$_POST( a6 B" e4 U1 G. \3 z; ^. V. y
C.通过$_REQUEST8 B# N3 \9 V6 S
D.通过全局变量9 ]- X! [8 \3 r3 U2 }* X
E.以上都不对0 H6 i4 N, X, A L! a' }: Y5 E
6 d* m9 o4 T* X9 w
3 l3 M! T+ U* [' ]' v2 N2.哪个函数能让服务器输出如下header?, C1 G+ a: r Q d
8 S; u4 L* i v* W% V4 Gset-Cookie: foo=bar;
8 A4 ~2 l. x6 ^" w6 y7 l1 j
& c f/ F: n& E答案:_______________7 j& \6 G. d7 B2 q/ g. m
4 {6 {9 n# j$ ]% V0 x: Y
2 N2 K' `1 s* w2 y! g3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?1 `. L$ B& Y5 {! z
. O: c. l6 ~1 `* [( x$ }+ p, EA.通过HTTP_REMOTE_COOKIE访问
+ |7 T- h6 f& GB.不可能. m( H* m/ y! K
C.在调用setcookie()时设置一个不同的域名
7 y$ x- @" H( VD.向浏览器发送额外的请求
, o' f" B/ X6 TE.使用Javascript,把cookie包含在URL中发送
" q( M. m" t1 @' P9 v
9 D5 \8 K7 B. n+ ]7 b# Z, e0 J7 E6 Q5 r# p3 I& |
4.index.php脚本如何访问表单元素email的值?(双选)6 T* c4 o3 U! D! T: P, W% t- n6 \
8 z" O$ b" F3 }0 ]9 X4 s<form action="index.php" method="post">
: M, C* M2 K% Y( y7 q5 S<input type="text" name="email"/>
8 w! E3 x0 Z6 ^</form>
) b' S% k6 S- I* R, M& y5 h2 s) p1 d5 Z
A.$_GET[‘email’]
7 A8 }0 C1 u3 ^2 _& ?+ e4 VB.$_POST[‘email’]
5 V! ]& |* L( N' z7 [8 IC.$_SESSION[‘text’]; d% {. m* \3 K" R# M8 k
D.$_REQUEST[‘email’]
1 r& ?9 V& m3 @: f6 ~6 QE.$_POST[‘text’]
$ c6 w" R1 m! l
( p9 D/ C. L' [" |. N/ a& j6 ?
1 x A1 ]9 y; \2 x, c7 T( I0 J5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长$ \- U4 h5 k+ | ^; O( `
B.没有变化
- ~+ p' @0 n' W! m+ ^7 w- T6 KC.在浏览器上打印该字符串时,尖括号是可见的
, K5 T! A) p3 z/ b5 a0 C6 T, ED.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
4 ~8 A: N2 I7 J' _# _E.由于调用了htmlentities(),字符串会被销毁
o& {$ G% U$ E+ ?* N8 m
! @7 B! r. }# Y } }7 T! E8 }6 Q3 H# t# @* t. N* [- [
6.如果不给cookie设置过期时间会怎么样?
6 A A- d5 N! g1 F K- G
) i9 [+ u9 e: GA.立刻过期2 V- g' j: K( H- ^( o
B.永不过期
0 E5 h R0 Z/ M8 TC.cookie无法设置 u' d& U1 |# [$ \6 @- U* {4 u. v# c
D.在浏览器会话结束时过期
N8 O( D$ G, E* w0 EE.只在脚本没有产生服务器端session的情况下过期
. Q9 q3 V2 ^7 a0 @8 ]1 j! j4 n' b: I% l+ m( \# N1 ^9 R7 Z6 \% S
4 L. N( ?4 x. c& s/ z0 y0 Z+ | h2 R) n: 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.什么都没有8 x$ |! A( r' n# u) k m
B.Array
8 j! f& ?5 x# L- a0 P6 }5 Q8 B# XC.一个提示
1 ~" i4 `" x' X4 bD.phpgreat: [5 D: S0 S8 [7 N* R8 O" [+ M5 B
E.greatphp
: h) A& F$ J6 F- H. J) e- l
, I. I8 ~, n! @. B0 Z1 {% M9 W5 `& M/ s5 r! i
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
1 V( @; M v) v6 K8 U' ?% o( b% D- R+ v0 M% F0 e1 Y
A.这两个是明文传输,之后的信息加密传输
% U9 ^3 B/ c9 `8 [B.加密传输
8 o& z/ f" I2 _2 r: @C.URL明文传输,查询字串加密传输! H0 ^5 D3 q) M/ C' V
D.URL加密传输,查询字串明文传输! `! h* x6 P. |
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
; X2 L1 S* m; W# P0 r! F& u! Y# e3 b2 \4 g5 I1 I3 m# o
9 F2 P5 H. w( U7 N/ x _ c1 _& z9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?+ ^6 r+ w& ^! d6 Q1 w
* M/ u8 I5 L; R8 O& U# K9 x
A.它们组成一个数组,存储在超级全局变量数组中" \5 L( Y$ ?! J/ L0 [! K
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中' {3 q* [" h/ |( K5 c, Y8 w
C.第二个元素将覆盖第一个元素
2 z5 p, R+ g5 ^7 v) bD.第二个元素将自动被重命名
2 T2 H* k4 k9 ~* m5 U& }E.PHP输出一个警告+ L5 [& s9 s& g, H, ?) Y# q
" Z. E+ P- G. g
4 [- b; @1 l0 F10.如何把数组存储在cookie里?
! Q9 g l% K$ h" }$ M) M$ ]# n& y; H: A& G }* z
A.给cookie名添加一对方括号[]1 z+ v; ~! P0 h; z, F$ }- ?& B
B.使用implode函数7 @4 W. b+ S m7 c$ y+ M
C.不可能,因为有容量限制
f# V8 T* c2 v O L7 ?( y2 [D.使用serialize函数6 N& v5 _9 e7 |' e+ a/ g7 H0 d
E.给cookie名添加ARRAY关键词
3 `# z9 g. D% A# D" A1 d9 i& N( _0 ^/ ]2 i- r# {
' P: s: c7 c, g) i) u
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
5 c3 q0 o( R5 j' [B.1234567890- `" F9 R- _7 T5 P2 R i1 a
C.0123456789' R9 Q% P& G- k1 W) Q2 ?/ n: J
D.什么都没有1 S. }4 q) Y0 }2 g, i
E.一个提示
* |! y% T% u# j- }2 w
' z& Z; B+ O# C! d7 L2 e# {! y& W, }" x" Y4 g- ^% [1 _
12.默认情况下,PHP把会话(session)数据存储在______里。) e) z& }8 u2 M. {5 k% {
# A4 Q4 i' @* v8 s% O$ Q" v
A.文件系统4 O( T1 R5 ~6 A( G. g! Y4 d
B.数据库
* }6 O j/ n8 B7 ^0 w/ mC.虚拟内容
9 u e! t: n: c! a' }- N6 ~D.共享内存+ Q9 k: l9 u, Z3 U$ G& T7 E6 L0 n
E.以上都不是
- l) Z' N' ]5 N/ D+ e; L) R! L5 {6 o
8 `: w/ c5 U" w2 N: ]1 z( l
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
7 {3 E5 `: t& u( n E* s. b5 Y( R ~: t0 E+ J5 U, h6 Y4 h
A.浏览器的程序出问题了- m9 c- _4 Y) r- [) L
B.客户端的时区设置不正确8 ]. Q7 |5 w# g$ v; q4 m
C.用户的杀毒软件阻止了所有安全的cookie/ l* \1 T' E2 t
D.浏览器被设置为阻止任何cookie/ u. [0 ?. C% W9 Z) m
E.cookie里使用了非法的字符5 V; j' H3 q% t8 V, f/ h
' z7 B; j% E( Y6 `$ ], h3 t. ?% z! W3 y$ Y! X- f
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
# G& P5 Y2 M! f" q! U- @* h$ D; L+ U4 T
A.1440秒后; b( {# ^$ | c; \' D
B.在session.gc_maxlifetime设置的时间过了后
- D3 k( {$ G) W2 kC.除非手动删除,否则永不过期
0 u# n5 O" S8 @/ y6 e; rD.除非浏览器重启,否则永不过期# E: N S; @+ K) Z( t2 q" _
E.以上都不对% l# L {3 v v4 F u
' l* m6 Q0 o5 G, D8 p/ ^' u! t3 p1 s+ ~# B. z5 q; R
15.哪个函数能把换行转换成HTML标签<br />?
; d% d, d; t3 P8 G9 F a1 N3 l) e5 U& k9 Q. f: l+ J( y5 ]
答案:____________! ^5 r1 J3 ?% g8 G( m
]' H( r" W& Z0 r9 X; \3 G
) }1 V; ]* c, Q+ s( h6 b5 i( @- R% N7 N
答案速查
9 j: @9 Z7 m6 V, `1:E
0 t& j" Z, I" f! W5 _! n+ x$ ]1 e2:setcookie/setrawcookie; a" j. V1 t2 A9 R' k
3:B% Z; x6 |; a" w" d) H- T1 J2 d
4:BD
; B P- p. D( P2 q( q3 g5:BD( ^. K5 Z; Y! ?
6:D4 t# Q2 P. B# w! T5 t4 Q
7:A
1 }7 N% x& O6 J% H3 X8 `, z; `$ `8:B. Z) |- f: }9 v" \2 o( P( R! J" K( ~
9:C8 A% b5 P- @; s# e5 }/ ?# ^" b
10:B
1 T1 o3 P! ]! L9 S: I! N2 [" ?11:E; W! t" L" [3 t) ^& R
12:A# ? s5 J E9 e: R' v$ L7 D
13:BD
1 w! S6 B2 D; D" Z, @# L14:B
3 h4 O2 E3 P5 z7 g% Q7 s15:nl2br
5 C% y" Z- @* Q8 L1 g# A. O& R) C: n) |. u+ S. S8 A
) r5 z; k. M# E( J
- T( B/ E4 o2 a) l7 ?2 L; x) N8 H答案详解
5 \; v0 m, D- b* X2 }
% N2 T( @# a" x, X/ W1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。8 y( w) {1 C1 T2 M
6 e$ q! ?$ D# o1 d8 e$ ]( E2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
& i8 k0 Q E% L) B2 {# k! i- l# K6 } W0 ~ v% `' L. T
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。% ^" ~% N/ S- I# w
' ^3 }/ n; z3 F7 C) t
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
7 k% d5 T4 I5 ~) o/ E5 m" c- I6 n# l( E* G. J
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。- P' v) [+ \3 A) W; ^; T# C# G0 ]
$ H* \/ W! w0 k3 s3 _* x* P
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。' l' C1 L" w, _! a u
% U$ g, U' }- G
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。7 M# g% V9 Q8 h0 v* w
n: a6 `7 g# K5 z5 Q! `
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
- p \0 \4 }1 c/ _
* E' P+ U" M/ O @" D9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。- S) ~9 F7 k1 U0 ]) U3 w
" I& u/ M/ g0 Q, A
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
6 Q6 T+ j+ ^$ Z. G1 k" h1 d" ]
/ _- x) I% B8 t* e: K+ ~11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。. s' R" p% w& x2 L- J
) O0 \) x, z, c: o7 T3 [& e
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
" g4 r4 D j3 n) w! A2 F& ]2 r' M0 S0 J* U7 @
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。& l* p+ x9 y- @+ s; t
, {+ l ]( c" O) b+ B14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
& h) `3 d% g3 Z
i1 c" s$ z. L1 A) f7 q0 c15.函数nl2br能实现这个功能。 |
|