  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14159
- 金币
- 2370
- 威望
- 1647
- 贡献
- 1318
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。. P' f' M1 J: p# {! f
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。# Y3 w/ t! v, J7 z
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
7 q+ v( V0 q+ u4 C3 @, [7 R
9 z5 U( z1 G9 K5 \& W+ w. V6 K C: m$ G6 G3 Y! M. k9 F' c' @
问题, [5 [) o, \, e) q9 Z3 b
9 V0 `+ ?, [' s3 D1.如何访问会话变量(session)?
* {' A# `! C. g- I5 Y) P& f2 r7 C& j) v; W& ?( n8 Z9 b
A.通过$_GET5 p+ g) J) a% n+ B I2 z
B.通过$_POST
5 o6 G6 F: V) h: oC.通过$_REQUEST
" c7 L$ d3 `6 K& k& j/ S9 N( nD.通过全局变量
4 M7 U3 R+ P4 FE.以上都不对
& n; h& ~% T! c( r. z! H. S1 |& d" l. A2 ^- Z, [2 L
7 z0 B# u+ u" @6 W5 |- f7 y
2.哪个函数能让服务器输出如下header?
# v: Z k% J) y2 ?) ~" _! p+ ^9 G7 |6 q. t$ Y$ T- m. h! j
set-Cookie: foo=bar;
3 O( B8 ~3 _% \7 G4 Z+ y/ H- |4 @# k$ u4 G+ ^9 B6 U- ?% G
答案:_______________+ X8 D) _( j5 f, [
: H- q7 X2 N# ~0 Z# K! C1 ~) M
9 P) s7 U6 {0 w4 l8 g- c
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?- |$ q+ w0 Y+ B7 g* W1 M& J
8 P, a1 C& F6 P# p: G8 _A.通过HTTP_REMOTE_COOKIE访问
! ]2 |$ d; a' A( C ?5 \B.不可能
8 P2 o/ T- `) N! Z$ d1 _C.在调用setcookie()时设置一个不同的域名4 L5 t1 d" F* c* s
D.向浏览器发送额外的请求
; y5 D7 M" J8 J! _2 X3 e* qE.使用Javascript,把cookie包含在URL中发送: d' j+ ^ b6 ~: A% w( B
. Y0 f. n5 ~- L0 j6 l: ?( g2 R) J( s9 g" d; w+ [( }4 R: `
4.index.php脚本如何访问表单元素email的值?(双选)
+ D* B/ a9 u: V+ p8 N/ }9 J g( j, @( U. q
<form action="index.php" method="post">4 g2 h4 T. R+ p* }9 E# M+ ~3 G% z
<input type="text" name="email"/>* U4 X# a& B- ^
</form>+ Z& |+ r' Z( ?) m- z( w
/ H3 |* }) @9 V: `4 N: t! S, w! pA.$_GET[‘email’]
& z! p9 C4 @+ M6 DB.$_POST[‘email’]
/ W# R9 x/ Q1 m7 z* h, p# M- qC.$_SESSION[‘text’]
' h) w1 P& X$ O6 f- a' C" ZD.$_REQUEST[‘email’]
9 v# R1 q+ A6 l. h6 v J0 _! JE.$_POST[‘text’]2 s* g8 |& q# d) v, O: k1 W
' J5 E4 v" A6 g3 ~ W
% U# M' Z) f! l. g. e* t+ D5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长( ]3 n2 m1 X, `( R
B.没有变化2 m- K$ Y5 }6 r
C.在浏览器上打印该字符串时,尖括号是可见的
% H' x4 j2 X! q( d4 J8 aD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
$ F% O$ h9 _& r- @5 NE.由于调用了htmlentities(),字符串会被销毁- [# h f- B2 F% z, v
W. o, e! Q1 C4 Y6 G% p% Z/ t' w, a; T. ^/ ?( x, J& `6 D
6.如果不给cookie设置过期时间会怎么样?. Y3 x; k+ ~0 |% M" c
( \: m& i5 ~6 k, m! B8 [ s2 V
A.立刻过期3 q! z1 R; ^1 [1 ^ }6 s
B.永不过期
: D; F! `# d, v) J* I! S$ O) a" y# QC.cookie无法设置
0 r) a% U1 W: K1 @D.在浏览器会话结束时过期! s( Y& A8 @5 X) ^( Y$ k& F# d
E.只在脚本没有产生服务器端session的情况下过期( ?1 {" F- T4 }8 G' W
, K* ^1 ?6 f% l4 `* F. p2 U3 |* W3 Y# O4 T2 x- X% t- k4 K
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.什么都没有
) `) D1 E+ F+ \1 L; J6 q+ v. `B.Array: I+ z1 ~. R" K* U
C.一个提示
- |- q9 ]5 [8 d; ?* P( lD.phpgreat
! D- N2 J. i. F& w# [E.greatphp% D3 T( ?# t& c3 o. U+ e0 n1 Y
2 G# C) ~) l" F4 ?
" Z+ H [5 F" [* @2 P8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?5 [' i4 D" }$ E& k6 r; N9 d- F B
7 L( a' o+ r% d$ T
A.这两个是明文传输,之后的信息加密传输" M0 c% c& ^- y3 l' S) ?$ ^
B.加密传输6 r/ [( {9 ~( ~, f
C.URL明文传输,查询字串加密传输: a5 p; m& _; {* e
D.URL加密传输,查询字串明文传输, g* Q' c& A4 `! K
E.为确保加密,查询字串将转换为header,夹在POST信息中传输$ M8 q: U! a9 X: e
1 X) P9 i: R$ U1 ~% f
: a+ @; d% m8 @* [9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?! h6 T, A4 k6 I7 W1 Z
( d+ ~. L( ^" }
A.它们组成一个数组,存储在超级全局变量数组中
[5 Z6 y! P$ d; h$ R2 U4 cB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中, A, u/ B& y0 y2 _
C.第二个元素将覆盖第一个元素$ s: W) x& z# T4 R W2 ~5 G
D.第二个元素将自动被重命名
. B3 x3 |: z$ ?# H0 P3 ^E.PHP输出一个警告
- r5 j! _/ _6 S
9 t6 q1 `7 Q0 g3 ^) }5 q- t
( |& v" L+ z7 _* \$ g( ?10.如何把数组存储在cookie里?( j( ]/ b* M- i: @. i
' ~! _: H; c+ J4 J3 EA.给cookie名添加一对方括号[]
; j- c/ J0 p3 x( Q( p/ aB.使用implode函数
% t- F+ u# C0 p1 h! D/ VC.不可能,因为有容量限制
) Y1 b& {. ^# Q6 m# T0 D0 QD.使用serialize函数2 l6 X7 ]4 w7 q% Z- n! a1 O
E.给cookie名添加ARRAY关键词# p4 n2 p& z& y. T$ h$ J
& N- ~6 |. |1 {% ~1 g
8 W6 p" M. e) L0 \) E8 D# G; E
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789100 q) B% U1 k1 U' y, Q5 ]
B.1234567890: r$ V) n- m [( J! ?! P
C.01234567898 z6 J* ~+ h% b5 @1 ?/ ?! k
D.什么都没有
$ z g$ H: \" c; y: ~4 vE.一个提示
4 D8 H* Y* K; m8 }& R. K- J( @1 ~' q; S+ T; `# U' C
/ _+ X+ r! X. ?& h8 ?. e12.默认情况下,PHP把会话(session)数据存储在______里。
@% D8 H) H- k0 L* Y4 p5 g0 }7 W, p8 Z
A.文件系统6 p, {; d9 E* c/ H$ c
B.数据库
( B8 Q! {: X6 T5 g# {C.虚拟内容
9 w$ P; f: X1 O7 x LD.共享内存& M8 \+ _3 ~) x' y; p
E.以上都不是2 W# A' Q1 v2 \3 r3 Z' [
: W+ L7 x" r$ h% Z d/ a) _$ ~ T# V: ?* O" x( u9 w, d: @
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)$ n* g: E7 H- c% w) G) L& ]# W
: `2 ~7 q" B9 m$ L9 R1 ?$ i
A.浏览器的程序出问题了) Y) t3 Z' u4 l3 z, W. {5 i+ l
B.客户端的时区设置不正确
2 W ?7 W+ w. W; |C.用户的杀毒软件阻止了所有安全的cookie8 D; }9 {/ e L" Y1 b1 z! ]
D.浏览器被设置为阻止任何cookie
7 g7 s# ]/ u2 L/ Y$ m* r- {0 oE.cookie里使用了非法的字符+ g. T5 g* z- T* H
0 C- p7 M" [- }7 o' N3 c- ~
: l. n' S* u* j% f. l14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
# l: l* ^' L4 Z# ~" J
) H; @1 f6 V6 nA.1440秒后
) r. F/ D6 z! V% Q: R. G* FB.在session.gc_maxlifetime设置的时间过了后
4 V; F7 v, z3 a8 CC.除非手动删除,否则永不过期3 H+ ?- R6 j8 W+ V7 D; n4 h
D.除非浏览器重启,否则永不过期
. Z4 m! I7 {5 w" fE.以上都不对5 e2 t' H4 _; O$ l# l0 H4 o# B
m$ k) d1 e4 N- M, b5 e" L. m
, W, z5 d V' b' U15.哪个函数能把换行转换成HTML标签<br />?
2 G. l; g8 x1 b; T2 h# D, x
; K9 T, k( D: p8 f4 ?# E答案:____________1 K. E% g' `6 Y# ]7 z
+ [+ u Z6 ^4 M7 b/ U- W' t) B: K5 n) X- F
3 N% _0 z9 v* s, G, E# X2 @ s答案速查
; R% d+ a. C8 G; D2 r8 M1:E! c4 ~8 r% G: n. f4 x. e! Y
2:setcookie/setrawcookie9 U. c# [8 h6 L4 C# s
3:B
/ c. Z: `! u3 q0 \6 X4 A0 R1 \4:BD( E% s4 D! A( q% ]
5:BD5 W; m2 E4 v4 _1 V
6:D
) p0 z) ?; I& |+ b, U7:A( y1 B, m: P3 e' N
8:B( v* {: o% ?+ Z- J
9:C
2 h& y0 e a/ |# y" V10:B% l. s9 @3 u9 k4 x' g8 m9 _8 z% M5 N) a
11:E
8 ], d. }+ |/ I' Y! C12:A
2 \3 q$ h) C. c$ u13:BD
; }5 q" z1 n# B/ H. C+ V* V14:B2 o$ S1 N8 L8 ?, l' r: ~
15:nl2br: U' a: e4 K# b( _) a$ r# g4 D
- {3 j7 N- {. s3 |3 c' m# l& ^( h: f: |# l0 S% B
9 T O7 Q$ J/ p1 T
答案详解
T' ?5 k6 l- K% [! d8 t) ]+ E! |% H6 n. h! W0 X
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
# }6 g' g% j1 r5 c+ F$ b, M% m* F
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。3 I# Q- j# c- p! |$ X1 x4 v/ ^
/ [! u, a( \$ {% l- S# P4 D: ~ t9 K* `3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
1 G" f! O8 L# m3 M/ E
- H! ~# k. o3 a! I- e4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
4 o% }! s+ `- c. \, g& a
6 b6 r4 e: J& p0 k9 {5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。3 h& s! B8 j5 i. i; O
1 l+ b; B* L- r2 ? }- ~6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
) L, @' @3 h8 }8 h, _6 z% @' Z. q% b6 d3 m; j/ [) {
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。8 T! H$ A- }$ Q
- B0 p/ A8 m' T/ R$ {& p6 }8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。% w1 G" ~ o: j4 E, E+ h M
( j/ [; `$ K$ v( A9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
: E/ S$ O h# f# W) K9 j2 H( Q1 |3 a/ |* A$ u9 A
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
6 c3 m% M) D. S- S9 u$ I8 c+ n! V
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。. B" X- ^" I! Q1 H7 K' k7 Z' `
' `+ }% a3 D' i" n; c* U/ A
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。! i |, C9 J; k4 C
! r* ?8 R3 b7 m# o+ T: S* i# m
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
- D+ C- i; |4 v, f9 k' s' x' x7 C# s
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。" T( e. X- C) H( L, u
3 M" ] Z0 j8 R1 v15.函数nl2br能实现这个功能。 |
|