|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14351
- 金币
- 2461
- 威望
- 1647
- 贡献
- 1409
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
) Y/ T8 m( Q a! N8 c% q0 g3 S4 S$ V3 E与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
3 D' z& \; W6 s4 x一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。6 ~. J3 F; {. x/ X# X
* O4 {) \0 p# Q1 w
+ z1 n' ]) }5 Y( u! ~8 D
问题' D& M( P3 l1 M5 g6 N
( g4 V) w* A3 ?! F3 J
1.如何访问会话变量(session)?
7 q& T; v e! P; ^% s Y9 D- ^3 H" \ B" J) u" `
A.通过$_GET4 j9 A8 ~* R3 c8 x) [0 V
B.通过$_POST8 A+ @- K& I7 J' E7 ^0 ]
C.通过$_REQUEST; c- ^6 i- Y6 C, ?5 N* @
D.通过全局变量
0 A" z8 f2 Z2 R) b$ `E.以上都不对! x/ h, X! P! B# v7 N) ~5 W
& q! B2 I. ~7 H! n: \ P" \* Y* C* s+ ]1 `
2.哪个函数能让服务器输出如下header?( a& Y( g) t* ], q9 r
! J) B/ s5 e( I! R# s: U9 G. o
set-Cookie: foo=bar;4 @) ]# Y2 I+ x2 L
, Z Z' h. V7 `- a" J2 B& n4 A答案:_______________8 M2 ]0 G7 m& D5 C
. D4 k. c" ~" j0 I! j( O5 `: F% H. o$ k# m; H
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
& `2 `! j3 c( o! ]8 [) o0 H7 i# U: l1 V
A.通过HTTP_REMOTE_COOKIE访问0 q5 a5 M! w" w% f# o
B.不可能
1 ^! Z9 a- ?: o' ~2 {C.在调用setcookie()时设置一个不同的域名9 h' V# c* K, b- X4 u4 a8 d% C5 p/ S
D.向浏览器发送额外的请求0 f- w/ l, m$ [3 J& i
E.使用Javascript,把cookie包含在URL中发送 N) W* V/ T* a9 ^3 P
% k! |' ?' f r: A
0 x5 c; V2 Y1 ?4.index.php脚本如何访问表单元素email的值?(双选)
- F: o/ u* M$ G: G( x2 G6 _7 h( S! K8 G7 n9 }
<form action="index.php" method="post">
/ R! ?' J3 _* }: v; L4 u& C6 z L<input type="text" name="email"/>! s6 n: g2 ]6 i1 r
</form>" `' }. Z+ L8 P0 E/ I
9 A3 O2 {6 J& PA.$_GET[‘email’]
8 t1 ?8 R7 w% FB.$_POST[‘email’]9 F7 R; a: m# d! L9 t+ `
C.$_SESSION[‘text’]
# m6 X1 S0 b6 ?. lD.$_REQUEST[‘email’]
( q* v2 z1 J" uE.$_POST[‘text’]
7 S0 t4 M {! }1 p9 v9 S' P% I k5 d7 {; N7 G% v( f
[$ k5 H/ j; i: M5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长2 M0 w( V# C% `* [+ ^
B.没有变化" `$ P6 D6 X' F, h5 h$ S; {$ o
C.在浏览器上打印该字符串时,尖括号是可见的
3 Y4 Y" B0 k/ b8 [, O D( R+ eD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
6 j9 ^ F( G: F' SE.由于调用了htmlentities(),字符串会被销毁9 O, ^- y: h) j2 u1 k, d1 s2 ^7 L
- L! E/ h6 r% k9 }/ \: o* t# {
) f: O, ]# O% C/ K6.如果不给cookie设置过期时间会怎么样?
. x* t8 {+ n& @, w2 w1 `$ z; k
E- D( e2 N: b3 w: wA.立刻过期
* R& \7 v* k9 r' C" HB.永不过期
9 z) H! j/ d8 j: nC.cookie无法设置
8 L. C/ m+ o' f7 Y6 DD.在浏览器会话结束时过期
9 o! l; s! w; rE.只在脚本没有产生服务器端session的情况下过期
/ k( {" [6 h8 u: V7 O; D8 H- ?+ w
: p8 D6 w" u* m0 x! f7 N
' Z- P* o7 Z s7 B R4 e! [2 C4 \+ k7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有3 f4 [) u5 w. N N% `' j% E
B.Array6 |6 c) o9 X8 }6 i9 ]' _
C.一个提示0 s) R' \1 c9 V' t, Q, _0 O7 C
D.phpgreat
: c$ `/ Z6 @) I5 |( SE.greatphp. @9 f$ }; O) P% d4 x
4 t7 \: @$ M% q! |
8 @8 _: A. Q0 K- n$ h% o8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
; ~9 ]2 N! y0 ]0 f$ h
9 V8 ]# n+ \6 h& ?: N5 O* GA.这两个是明文传输,之后的信息加密传输: G' }2 d2 f; f4 r/ f. [
B.加密传输 t1 \3 }5 H9 A" Q7 D4 c
C.URL明文传输,查询字串加密传输9 ?3 v/ R3 ^2 N/ p7 B" b
D.URL加密传输,查询字串明文传输2 V9 @4 p0 w4 N ?! k2 F! h! {
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
" _/ s4 W7 K2 O/ y$ m# ]
% b/ Q, o1 |% I% J8 `8 [, G7 \4 U1 W! F, b
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
2 t3 K L* J U' \. w" B: ?* S9 c+ \. Q P9 U) Q
A.它们组成一个数组,存储在超级全局变量数组中
^1 M4 t. p- r6 gB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中) j0 `4 c. B' ^$ |6 Q( Q
C.第二个元素将覆盖第一个元素6 X+ |: W+ G# D h
D.第二个元素将自动被重命名2 X6 Z1 G" o4 L$ P- X
E.PHP输出一个警告
& G' M5 \9 ^6 }) y! p& e+ ]
# \2 C9 V" [1 o z
9 u7 l# V) m) ~$ E/ d* ?8 q10.如何把数组存储在cookie里?, C3 t0 D0 _% D
2 t) h# T" v* g# B: n" {" V% Q
A.给cookie名添加一对方括号[]2 x$ a* q4 D. J" g2 q1 S7 i
B.使用implode函数: P5 C4 i4 ~$ a( \. L' _& d
C.不可能,因为有容量限制
) u5 s; ^% g ~! O1 vD.使用serialize函数
; t6 }3 ]2 d6 x8 _$ KE.给cookie名添加ARRAY关键词
! S* |) q/ a7 Q8 U- H3 u* I* {
; Q8 P7 O, R+ s11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
6 D: J1 Q* O+ E* KB.1234567890! N$ J! w, _; o* S6 V0 q& P1 w
C.0123456789) c {( b2 R& j/ R$ Z2 P' D* [9 f
D.什么都没有" B! X( ~7 h9 h7 A- T, _7 o( w' b* d; l
E.一个提示 R4 `# r0 T8 ~5 [) B
2 s/ n8 v1 ^ V q, R
4 x! ~+ B$ @( D1 |7 H9 I12.默认情况下,PHP把会话(session)数据存储在______里。* o* C& L$ Q' U- W% I }9 }
& Z6 V- O+ c3 k- ?1 \7 o1 {% P
A.文件系统! G0 p# k G- a4 ]+ X
B.数据库
+ ?( v. C( E0 ]( q. ?8 _C.虚拟内容
2 L6 |" `+ T5 e9 kD.共享内存0 q, b- l" ~2 s0 B/ q
E.以上都不是0 X$ I$ A' W; }& l' J5 _* T$ ~" \% W
# n7 R& z& @* `- c# p
0 C: D" K5 u8 U; y' d) n
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)2 J& |' P1 @: R! O
/ z) S8 d0 }/ c4 U: x
A.浏览器的程序出问题了# C/ ^$ m# M6 z: S! R
B.客户端的时区设置不正确
* v5 G0 [* h/ }% I3 ^9 UC.用户的杀毒软件阻止了所有安全的cookie
4 p( Y3 |5 u( i6 L/ _D.浏览器被设置为阻止任何cookie
1 V4 d9 v" T3 i0 U9 c7 YE.cookie里使用了非法的字符
" C' K3 |9 B5 ?; H! u& [+ u. x
1 V' D( f7 r% r# o
2 o. P% h, |% |14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?, s+ K2 Y& ^/ a; ~6 H- g
- ^( S* a" ^4 f% {A.1440秒后
1 |; }+ H# t, C1 S' L) ^B.在session.gc_maxlifetime设置的时间过了后* P5 |) B/ y5 b8 U r
C.除非手动删除,否则永不过期
& {: w0 n) C% ?4 x) b F0 P/ h# RD.除非浏览器重启,否则永不过期# D: y; @# Q9 ?3 h! p+ N# k
E.以上都不对
6 p! D. \/ R u
* Y, {/ X: z9 T
% a' a, _! ^) @5 s/ n& e, y# ^. l X15.哪个函数能把换行转换成HTML标签<br />?
; J* p8 M$ w* Q# y# y% {) A# X
! J! [2 A' z; |( b% v8 ~答案:____________
! F+ X, N6 G, w8 ^5 B. U; o' t4 r8 S
q% P$ V v, A+ S4 ~% l
5 T1 D ?1 J. O3 {: g- p1 Z7 |! [
答案速查& P1 E8 J4 ^! u, o, f- }
1:E' r/ H/ l6 M; L: L7 W" v# A
2:setcookie/setrawcookie
w1 [& _) C2 f3:B
/ ~6 X0 L/ |; \: K: L, x8 A4:BD2 C; X# f8 h* ]9 d: j2 }# C# o
5:BD- p+ Y2 @+ [( m c4 ?
6:D
7 L* `# a0 V9 o; T2 B. f7:A
: b+ y/ y6 J5 E4 z& [8:B. t) `' \' I! o
9:C5 o2 |/ o7 u: H: A
10:B
b3 h+ j% d1 X n11:E
, u8 p2 u4 E: j! U9 d; b( [12:A
8 |# A1 n5 O' z2 N13:BD9 t0 R5 t5 c1 I- F6 i5 i: ^! a' d
14:B) L' D) H- I j& R7 V, F
15:nl2br
( ?, |- k5 j5 {# L2 V- k% C {( `
4 q+ W8 B% X( {8 `4 ]) A4 O; p
% W; w* B* a& Q6 I2 @) Z6 D9 \答案详解
" q: u0 n* U7 M1 w0 ^
3 s7 d0 p3 u& I& V' s$ ~* W1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。% Q2 }3 f. P; t9 y4 \0 o g' i @2 Z
W: ~5 ] J; w$ z! ]2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。3 Z c$ Z# J+ L: O
0 d- {, y% t/ o: u; N9 [9 _
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。 q- e: y m% @! U* `2 H! e
% } \3 B9 |. L9 Y! I
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。2 O$ f/ o) [2 H6 F5 @$ h5 P
) R: G9 O3 M& c" z6 j- @5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
9 h( {$ ~* H% v. l- e% \" t" J, I) T+ ]9 O$ ]" | n
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。* l/ O, w% @# X2 Q
5 [/ [% @$ w( w* R; m5 F: B6 y8 w7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。+ c$ u# P4 N' u& h! u# C+ C* A, t
1 x/ \/ {! b z) x& Q8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。. [9 [4 H! ^; c/ K. [) ~$ k3 h
# }8 @9 v6 P2 ~ ?9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
) v4 Z2 q: o! Z) Z- S
1 r* \) c3 h5 e. ^& J% `10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。# C6 j$ z; u4 G
( i, z- u0 |/ A, _( l9 Y
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。' _- H8 i/ A% K9 v e* S2 a. \
2 N \9 i+ v9 B% K- Y12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
V3 ^9 |2 j. K- w3 G
: l7 f% W/ ^% S- B: u! o! H& t13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。% D' a4 d2 y7 @
, V" ?" A' d! o) _7 {6 T
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。/ `3 K, X0 W9 _, c! n# A3 V
7 N7 A% W5 z( t( G
15.函数nl2br能实现这个功能。 |
|