  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。, o3 M L3 v7 o" b3 d
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
3 s8 M; E+ v _) W2 i2 Y. _4 A' k一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。" w1 z8 Z9 u& N1 Y5 y. [
2 {( J# e; p( @! n1 _
5 C* J, u' B) V; _: T问题
, r' h* J# H6 M0 |) F* ?
; E. n+ E7 `7 W- c1.如何访问会话变量(session)?
9 |4 i- L2 T- k2 F% e y( v9 }1 h8 T6 V" `
A.通过$_GET
" ~* p( v4 ~; Z2 t/ M/ u+ `0 xB.通过$_POST. U+ M) h; J+ t0 t
C.通过$_REQUEST
1 w [0 S5 k) |' I8 [2 B4 E ?" H- ?D.通过全局变量9 ~1 e6 U9 U( L
E.以上都不对
; n1 D2 T6 p+ L
3 p! r1 z( g; c# j- W, V" i! H! H0 X- u8 k. {- T
2.哪个函数能让服务器输出如下header?
$ o/ k8 n g$ B1 `& I) o7 ^2 N' v( @$ ~( k8 b
set-Cookie: foo=bar;1 a/ m( D/ s; C) j- m* y4 u
& p: O5 G! c7 o1 y! Z+ ?3 [" v& G& H' r答案:_______________1 O& ~1 ^* T0 A) \+ [
* M' \$ Y- l2 c& f6 v/ l6 T7 Q; t
Y: Y) d* @/ K5 p( \6 O/ D& C
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?- r5 E% I, F& D5 b7 @
' `& ^! m' L3 k9 K3 u, J
A.通过HTTP_REMOTE_COOKIE访问. A) F: R+ ]+ z) v" v7 \% w! x
B.不可能
1 @4 m% r* v- @- a1 Z% }0 W" J; l9 xC.在调用setcookie()时设置一个不同的域名
/ ?$ c6 \% A) F5 H& t& AD.向浏览器发送额外的请求) F% U/ M% ?' C7 E2 \# o( K# e
E.使用Javascript,把cookie包含在URL中发送
; O0 u: J- }' R! }: g4 ~4 ~) u; Q+ ?% k' K
3 D& ~( j/ Y8 s/ J4.index.php脚本如何访问表单元素email的值?(双选)
5 ?- A- T6 ]$ X/ V) @) a
5 ?, I$ k3 B& b2 s: P) `) U<form action="index.php" method="post">5 v" a7 s2 k: H+ U9 [1 v& p
<input type="text" name="email"/>
; s, w M9 a j% C</form>
: G5 {9 i+ e# Z5 Z6 f3 W" k
7 @6 ]& Q9 M. m T8 v C) s) NA.$_GET[‘email’]* J9 T4 W# P- [- x! T# D# S
B.$_POST[‘email’]
8 J" L% T" G: t0 i- W0 |C.$_SESSION[‘text’]
, t5 A6 n) x4 }2 tD.$_REQUEST[‘email’]6 X. W& O0 I! l9 a% d" l9 z
E.$_POST[‘text’]7 J9 o) P& P3 B/ j# Y9 Q( I
4 `& E! N6 [2 l ~
& I0 x# L, Y1 C, C1 ?5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
& B. v d, q' s1 K- R# wB.没有变化
+ ^( N! {4 C) }- S" W% [/ C, qC.在浏览器上打印该字符串时,尖括号是可见的( G" a# L2 m$ ?, Z
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
: H! o+ ^$ K' A" P/ ?8 h: }4 j; GE.由于调用了htmlentities(),字符串会被销毁
, Z4 K4 L/ }1 j9 }. T1 L$ `
* {5 z9 x0 Y2 g5 p. L: D9 G* B# J1 \- j! Z6 W5 v
6.如果不给cookie设置过期时间会怎么样?" k- J& R( G* M+ M
: k& z7 t, l' X( P# k: O
A.立刻过期
8 _( I5 F- s" S W0 [. V0 p+ A0 EB.永不过期
; ^) E' |1 [0 F+ V/ iC.cookie无法设置
, n. E7 x# _; c6 J4 Q$ U$ oD.在浏览器会话结束时过期
$ |+ M6 u1 L! c( X% t; kE.只在脚本没有产生服务器端session的情况下过期
; [9 b3 w; r0 H: H6 K, t
1 j0 \( L8 G( G$ b4 l6 h8 n, ]; {; w: X9 y3 a7 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.什么都没有
- p. A0 |* P2 ^% h9 c0 n; `+ eB.Array
: {$ ^$ O5 ?+ e" YC.一个提示
6 _7 o- N* B WD.phpgreat# w# h& G/ {: ~+ H
E.greatphp
; ?& T* V1 Y1 q8 a
) {7 H) }+ Y& G# {. X( [1 |6 z' _3 {+ S
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?# C0 n# t. X p1 m! f
Y" g% ^0 Z8 K/ N9 y7 }/ dA.这两个是明文传输,之后的信息加密传输
* e" R' |0 ~9 v3 \$ ?: gB.加密传输& d( I; p6 v% D& T* Z0 T2 M$ o5 G8 b
C.URL明文传输,查询字串加密传输 m8 ~+ _9 T/ d( E# I2 p
D.URL加密传输,查询字串明文传输
9 o/ \" b j* t5 s* DE.为确保加密,查询字串将转换为header,夹在POST信息中传输% M2 H6 v8 f! o' C" [; s1 X
9 X' F, b1 ]/ w9 ?+ G( B4 d
. b) h* M( b) v y6 H
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?8 C) I2 g h, j) t
0 F! q) I( t8 \. l2 m
A.它们组成一个数组,存储在超级全局变量数组中& x- x) m* ?1 _; Y* G3 D s
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
1 s; ~4 W* {2 \, tC.第二个元素将覆盖第一个元素, K/ `1 n& o9 j3 d1 P
D.第二个元素将自动被重命名
; v0 a% J& i1 i( a4 IE.PHP输出一个警告
& A5 H! d2 m& p1 N$ n& \# J
& r$ B( a1 J! a7 j! ]+ q0 {7 o" }6 m+ t
10.如何把数组存储在cookie里?/ r8 b- Y' g8 Q. r/ x( T% T
7 e* ?" F- a9 G4 y! l) z JA.给cookie名添加一对方括号[]
+ s7 l" D# `/ Q) N A) LB.使用implode函数
$ a: ?0 v, g5 P( }0 C( v9 b3 WC.不可能,因为有容量限制
& I& T. T) G. I- X X! k8 @$ eD.使用serialize函数
$ ]; i, U" K4 YE.给cookie名添加ARRAY关键词
- _5 ?( e; u% `! {5 X& w
: S. _! L' {* [( L
. f7 z3 G1 K" X5 e. L11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910% _9 n+ {7 Y5 o$ u
B.12345678901 o0 b- V7 {2 W: S. J* X- u5 }
C.0123456789
) f4 k* \; T; |# I! C+ `: GD.什么都没有
+ e* E% I7 K; S0 WE.一个提示4 X X! ~, `. j* B4 O9 @
0 J2 [: a" z, e% c& l
6 m9 X2 x& X G! \+ |12.默认情况下,PHP把会话(session)数据存储在______里。
7 v3 v0 r8 ~, U+ @ q; k
0 ^ f9 i/ _7 u x1 N+ Z- |A.文件系统
- e! u G5 q6 Q- w, E0 OB.数据库; Z- h7 c: Y( G: o6 H
C.虚拟内容
6 b9 G6 k$ _8 R" p: m2 @2 wD.共享内存
( s( U7 r0 T+ ~+ V+ HE.以上都不是% d4 g% V; o) T* A4 S' b
3 I9 K) g9 o e4 `" l
! I! e% ?# ?* o
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)3 k- O( c+ e$ E {
2 E/ h5 Y- W0 R X& m& t
A.浏览器的程序出问题了
& i) E' o4 y0 z& `! sB.客户端的时区设置不正确4 q5 @( q! g/ N0 d
C.用户的杀毒软件阻止了所有安全的cookie
H, h/ _3 Y5 v7 MD.浏览器被设置为阻止任何cookie, Q* Y, n8 r1 F. {& b
E.cookie里使用了非法的字符
8 \7 C& S# m [/ a( u+ Q$ I3 N- [* V% X
3 G& L c) ^ R1 z1 c* n14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?7 P0 p8 J" b; C& S- n: J2 k4 e6 y
# I4 |9 @- i1 `8 r
A.1440秒后8 S) Z# Q9 _1 d9 S% U
B.在session.gc_maxlifetime设置的时间过了后9 E# t ^! B( q6 {- @( b$ f$ q
C.除非手动删除,否则永不过期
3 g% m m. T/ E# @6 J/ @5 ], bD.除非浏览器重启,否则永不过期 n# V' ~* r! s
E.以上都不对
, l% ]7 v$ r' B! a* [& L
E; R+ K- E: U# l% ]. k' _6 ] h X# P+ s
15.哪个函数能把换行转换成HTML标签<br />?
+ j0 K9 ^' Q# {0 [' b7 Y+ ~
- ]/ f( X. L/ R$ \" p. a( Z. P答案:____________0 L* c% a! w2 N+ s# P. C
k% [* ^1 V, i( p
9 Y' |, Q6 }" q. l0 m0 E: r8 S
! c9 V0 B4 \; E |5 d, i答案速查
4 A. r& H9 A7 b, m, z# @, \1:E4 f q0 [( w$ E6 a
2:setcookie/setrawcookie5 `0 ^( Z2 z1 A" R6 N3 y
3:B
/ [$ ~ W7 U% B: O4:BD* W z5 a: e# l# e) Q
5:BD
3 d( K% d2 X7 Q% G9 C6:D) s" {. J( i+ f. O; W' z
7:A
, D- D0 V ]9 i7 J [8:B) C& S+ g8 b. t) c7 y; ?* {# Q
9:C
* [2 R0 D6 O6 J T) W8 @" p) l10:B8 e \8 f" P" k8 W L
11:E
3 ^" u. U7 y4 o' q r" l. D! I3 d12:A
6 S- O1 m. `( T- C& `- _13:BD, ]; A3 p5 d: f
14:B
1 F) ]/ W8 `1 U) I% j3 U+ x15:nl2br4 \3 v3 B- }/ l' B1 O8 a
; s! q# Y5 K/ ?9 J' r, c; n3 R
, E: ~( D' _4 q; i# U3 L& a) h
7 ?' ~* y) i1 ~2 y" E答案详解
7 i @3 v) ~- e8 M/ ~+ d, }9 q; j- x3 R) N2 |. l
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
2 O/ ^, o: i. h. [! O5 f; S
; L# g* b# ~+ X# |1 C8 Z! y2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。5 _4 o9 G/ u1 k8 g
7 W8 r* K z: `( L
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。* {; P2 C, H; ~* Q8 G2 P2 }
" h* _5 v& P; X) e$ c4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。- g0 o7 u- m2 T/ k- e8 p# [3 E
" B- z1 }0 }5 m( B0 W8 ~: x
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。, K: C2 j, P- {1 m
- U3 Z& V3 t9 Z2 Y; u4 m u6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。% I+ T* K: Z6 ^3 |0 o
" l% L7 {& I% ?, K! I
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
+ x: ^" Z; F, S m' Z
& y7 O6 e2 `" Y9 h: p8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。& ?9 @5 s" t, P4 @% ~
% y& Y$ E; f" x
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
3 m: B3 t3 l1 }0 O1 z3 C. N; h5 {
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。1 C; A. z! D- V( j3 m
2 ` L2 W! ^, U/ `2 p11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
" m( d1 O) A1 f8 }% ]' v( C j' J9 w4 |
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。4 i3 p3 L! j8 n" q$ ?: O
% ~0 d+ y3 M. _
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
2 H% L. ~% j+ `8 P$ d- ]5 [' R0 P1 e2 f
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
. |3 g9 Q, q. ^9 y# W
+ }' p2 `0 G; e1 S% e+ ]15.函数nl2br能实现这个功能。 |
|