  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14189
- 金币
- 2385
- 威望
- 1647
- 贡献
- 1333
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。' h, v# h" K m0 m, X5 X
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
# W! o6 O& a; v' _7 x一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。0 B6 `2 a4 G5 n X' `& P: n
9 x! H3 g9 y" p6 v) j) d9 q9 J, F+ X7 p. j
问题3 u2 _0 P% Q e8 f
7 [, t( I5 d8 u* T( ~) J9 z
1.如何访问会话变量(session)?0 O3 I& |# g/ H! [; {, x; v
, ^' L; r4 z& D* l
A.通过$_GET& w$ K( r3 E% @; N' v0 b
B.通过$_POST
9 n4 Q% c9 i6 XC.通过$_REQUEST9 x; w E2 V% I T, Z4 u& [
D.通过全局变量
" s, ~! N) ?( y/ f* [E.以上都不对
6 }/ A5 ?2 G+ G4 O3 z; H0 X
, d0 r) r( T: M( Y# N( O( E: @
; ^- O9 X0 E$ K2.哪个函数能让服务器输出如下header?
1 J+ R9 ?( i( N4 r- c
' b/ I4 x9 A) S6 a/ cset-Cookie: foo=bar; c" _/ m {0 o' a! |, x3 U+ Z' p: m
+ P0 u3 @6 h5 v8 U% V答案:_______________
2 | ]4 ~0 E) Y( E% m
0 Y3 z3 j% C$ |( N' D# m5 d" d9 E1 ?
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?6 {; w4 E) c- D ?6 g) E3 L* I
. ?, ~3 `! ^3 m1 g8 D6 {
A.通过HTTP_REMOTE_COOKIE访问
+ ?: y% Z: x9 b! }B.不可能
5 ?7 Q* h: [2 |2 N& E% E5 W8 I3 sC.在调用setcookie()时设置一个不同的域名
" H. w( O4 `% f# c$ l$ ID.向浏览器发送额外的请求
7 L5 U* ]/ M3 `* O" JE.使用Javascript,把cookie包含在URL中发送3 p5 o8 E _1 R' f, E
: C5 E1 I9 o- K4 C
* c, ^) J6 [/ B) A( Q6 d6 n* X- z4.index.php脚本如何访问表单元素email的值?(双选)
7 I5 Q" b0 ]1 I' b' f A ~; k- J2 ]& F6 p# [9 g
<form action="index.php" method="post">
+ K( [* z( @1 q7 c# z/ r3 V<input type="text" name="email"/>
* }7 _) y$ e8 z' v' I</form>4 @+ j6 U9 _( [* ^7 U" j2 T
$ W# W9 Y$ s# r5 l3 yA.$_GET[‘email’]5 z$ [' q! H3 e6 o/ E0 K8 S2 i
B.$_POST[‘email’]1 B- e: w6 y6 I
C.$_SESSION[‘text’]' i6 s4 w: ]% w6 I3 q- u% w5 ~
D.$_REQUEST[‘email’]
" U* x, r& s6 Q; WE.$_POST[‘text’]% V' U1 S7 r. a& [1 j
0 P( Z ^ R: a$ g h
9 R2 }3 `, Z- `* x b: T5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
& A0 d6 k# w* s; c% G2 aB.没有变化
& u! K* H1 g( g3 ?, r0 `C.在浏览器上打印该字符串时,尖括号是可见的
* b2 g' I3 g2 J, [2 ?" eD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
( [% J7 }2 Y |: s. U' _# r! A& JE.由于调用了htmlentities(),字符串会被销毁7 w* Z' _7 H9 O( V4 \
8 S o/ h1 J9 ~# M) B J3 W3 L9 l2 ^2 D( `% W# E
6.如果不给cookie设置过期时间会怎么样?& Y5 R" J8 ?7 e6 e/ T4 x9 v) S
( N* U% b- B6 Y7 F
A.立刻过期
. [/ b2 U; J* h. c4 h ~B.永不过期
0 v: M, C- t% g4 o0 V5 ]. eC.cookie无法设置
) X% X% e+ d- h5 oD.在浏览器会话结束时过期
9 o* c; y& U; t/ v# \5 [! |E.只在脚本没有产生服务器端session的情况下过期
A2 P" ?: i& Z3 n" Y5 v! ?6 K+ X$ J. I3 N3 d9 E
+ O. k% K7 t$ V: 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.什么都没有
$ `0 ~6 t1 ^( s7 j. I, u" ?+ _% pB.Array& c- r X- X( U2 ?
C.一个提示1 e/ I7 [; o9 T- a! ^' _
D.phpgreat
9 T( R! K8 q8 \2 K& sE.greatphp9 o3 c. J. {& x* E" m1 u4 t) Z
( X3 q3 t% p. _2 \' P
! S) x0 h5 x9 ?
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
, Q: T8 V. }# T' k0 V
& @: s" s- |, a! bA.这两个是明文传输,之后的信息加密传输 p- `' c: X1 u6 h
B.加密传输
! ?1 g7 {+ Q5 e: y5 ~" j6 B) zC.URL明文传输,查询字串加密传输
w" n" b8 }8 r. V, h2 `* h6 J1 uD.URL加密传输,查询字串明文传输
" l( m8 f% a9 ]9 Q& y% `E.为确保加密,查询字串将转换为header,夹在POST信息中传输 X$ D, E1 p& G; g: G9 _/ x% C
* h p4 }4 D% R, M* j$ z4 P1 W) M$ l. e# z2 x2 H
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?' F# C, h$ F* h% o! ]
1 H* X) A# N! ]8 _ [ `A.它们组成一个数组,存储在超级全局变量数组中0 `& W4 A. ^$ Z4 C
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 Y+ F8 s% d& O1 E/ EC.第二个元素将覆盖第一个元素
( _8 g0 g5 [* kD.第二个元素将自动被重命名' ]0 A- A- T; L
E.PHP输出一个警告' o l# d7 ~5 E7 R
* E" {+ T; p; [! ^( V6 c4 J( W: h+ I4 D' Z6 x4 {
10.如何把数组存储在cookie里?" Q' j2 x9 r! O) L- v
. I4 |; T1 w G6 }2 g6 w/ Y
A.给cookie名添加一对方括号[]. R& t. n* O+ X
B.使用implode函数
% r7 D8 `; w% gC.不可能,因为有容量限制
4 M8 y% G& G [6 @% s/ V! kD.使用serialize函数0 e/ `+ F6 K2 s% P
E.给cookie名添加ARRAY关键词3 v R1 y$ E) y6 t7 d
& ]9 E3 i: C- q( d8 n7 d# M
) ^) A; [! `# n: ~6 _5 R$ F, z8 _
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910! S% \# K' n, m$ p. U) ~
B.1234567890/ u; R3 G3 d% O& v( H
C.01234567890 C0 C# r% g0 w+ I+ _; V
D.什么都没有
6 f( o6 G# i$ r0 kE.一个提示" H: Z2 h! C# h
" J2 X4 s+ W9 h0 y- y$ X6 v/ E
" g, D" R" T/ r9 ^/ Q( x3 n& }12.默认情况下,PHP把会话(session)数据存储在______里。
# b3 B# k0 q8 |0 [) ~/ G+ V& L3 h
6 j% x4 l, S+ vA.文件系统% m1 B: I) {# T
B.数据库
/ _6 v' ?6 \7 F- n- g% g4 s! L4 vC.虚拟内容
( J$ m* `4 t5 X: v! lD.共享内存' l+ ]4 ~/ ] i$ Y5 m, u$ N
E.以上都不是
" Y- F6 w. g9 N# S
7 f2 Y$ }- o: I/ k8 s2 G1 k5 d* y) u8 i- l2 J+ V
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
$ x& l' Q8 P3 z; w& J* f3 |" I7 p9 Y# B+ M! ~3 V+ N& ?
A.浏览器的程序出问题了) k. E U" O% u% d& G! D
B.客户端的时区设置不正确
4 d7 t3 l( Y" X5 B% n3 P6 e0 QC.用户的杀毒软件阻止了所有安全的cookie! B% ]& o8 X" [0 F4 M2 h3 ]
D.浏览器被设置为阻止任何cookie
+ {. F6 ~; z3 B2 JE.cookie里使用了非法的字符& ?; J" ~8 v7 z: z: H. W. q( X
. W, N3 I4 R1 Y! X* [& p2 A2 S
2 U3 P$ ^1 J# S+ I/ [4 d: l14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?' t6 p! `% H) Y" t! e6 v# o: U
# @$ n0 B) F9 u+ W! s) ^' [+ dA.1440秒后3 R {4 g! Y$ A, M' \6 X) |% Z. O+ w
B.在session.gc_maxlifetime设置的时间过了后" @" |. q3 T: c
C.除非手动删除,否则永不过期. K; f7 q# Z) W( s
D.除非浏览器重启,否则永不过期9 N, k7 K# K4 _; m$ X; B
E.以上都不对
, s. ^$ y) R7 S, I5 _3 [1 Y1 I! x$ u& M* V7 E9 K: L
2 @5 G( P. n( Z& a* Z- p6 g5 w
15.哪个函数能把换行转换成HTML标签<br />?/ f3 }8 j+ l. k7 r- v6 D
. O& Q9 O8 |- U% b答案:____________" o* k, T- I# q6 |; R7 i: W
9 h& ~( Y7 {& J) Z7 v+ ~& @
; G$ l* E7 U) o- X, A6 S4 T% H1 g/ M+ S1 O' k
答案速查2 @: G' n+ s* L4 w' [1 Z, |
1:E
; q1 Q: N, d {/ T0 Z1 X* [$ s2:setcookie/setrawcookie7 @# |. I8 b9 r
3:B; a5 t% g. |6 B6 u$ I" f0 M
4:BD
: A5 ?) X! v9 E8 {$ h q5:BD
. X4 s. F# J) N: e: P6:D
3 y9 V2 Y. `8 v6 J8 f3 Y7:A$ ^7 Z7 H6 Y: m( Y, ^0 y; S
8:B" |+ [6 T5 m2 F; \1 U
9:C
1 h- B* D7 d4 X" H9 b) j0 a# u10:B, x* a7 a+ g5 x9 H
11:E
- S2 R' N# g3 r' P, Z2 v2 x12:A
1 D: [" {4 V2 J$ ?0 C) K, E' a13:BD, {4 L! N0 p' P( h- r; J- ?* W
14:B O# I9 j% |1 Q% U5 i+ K
15:nl2br
n1 q/ Q W; x$ m8 i V7 J/ \ h9 M; h" Z- s' u. j' p$ m% c% B
; a/ r2 j6 B' A' Z$ ~, a1 G/ e
% b+ h1 g; `/ }4 Z& c. r0 \答案详解6 M7 R7 R/ H; S% N% }
7 |5 U5 o' ?" I6 e
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。* j) x9 g1 m! x( ~' M
0 `6 l0 p( W5 E% F6 K( K2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。' q! U. s$ G( A5 s9 H- D$ K% T
4 G* A( l* k& S- p
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。0 m( d4 a/ @' k8 [' F
% w3 S9 R3 P$ y1 r; p4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
( T6 ]" L6 l2 [2 Q" B
' f' n9 E2 v l8 p5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。1 J) c# C- ^5 w u+ |" E
3 h- o7 J! M# U6 a$ F6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
$ d# ] |* h1 N, M: T2 e1 L
/ s/ ^: A% X" s3 a+ l, Q7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
5 j t% A x: X9 L% z8 m% Y' b( r3 s% x/ v9 G8 V$ a
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。- e& x7 Y) J; a
: J$ C4 W$ l/ a7 V; U& d9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
$ E) O! c# V0 V- p8 v7 q
6 O/ b; r: P d( a) A5 \$ Y10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
/ O2 [, Z5 O) I, J% w* @' |8 d- h( t9 U, d7 k
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。# y6 B1 r% o# r
, h) K! ^% ^, U n% o12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
. m: s& Q* C6 Q
E! f3 F% L1 f4 x S! b( L. I+ v13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
4 r4 z; T2 k! C% S' E3 l5 f; P2 T; A" X$ B! B1 D' Z1 u
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。1 Y" b& C, j, Q8 Y$ ~* k
1 l& p4 f# U& {* O6 N! P15.函数nl2br能实现这个功能。 |
|