  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。. O$ [1 \* H" V
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
" _5 P1 I5 s, _. y' z+ e# V一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
2 |9 n& _2 {& T4 G0 V4 y% Z* _; H& A# d+ W* n8 {! ~3 p5 w4 k
6 V' G1 w% L5 ^/ Z2 [* F
问题
% c& e, Y, h2 l* @% W% r
" u8 x* x, R2 h$ N! x: ?9 P1.如何访问会话变量(session)?
2 y* R& D& g* @( k- L" [+ l' i! f! s; X
A.通过$_GET
Z8 R9 c3 L- l6 |B.通过$_POST
; \" J7 q- F/ E5 OC.通过$_REQUEST
' F1 L* {5 ^5 S& k* _/ s% _ qD.通过全局变量* d& P9 a* Y0 G( L6 O
E.以上都不对6 W) {( r% u% T$ I
. ]2 r8 q8 v9 H% y! Y/ a
9 Y, B# ~$ T" G! i9 c/ _* z2.哪个函数能让服务器输出如下header?
7 {0 T7 j, U' }. p, P9 y% s1 V) Q. _# \" K3 V- r) d
set-Cookie: foo=bar;, {" { Q0 h& y& N3 P
, K5 H2 M8 s6 G9 h; Y; l% N答案:_______________
4 S3 C$ I! r3 p8 o" }. K. x% j( g" g( b0 Q. B) |6 U0 Y
, @$ x Y5 x3 K: g& [1 C
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?0 J% r4 U0 I1 r& @
9 R: |& N4 {: D M
A.通过HTTP_REMOTE_COOKIE访问 s# t3 X2 H$ B3 U ]/ f2 [
B.不可能
h s% F* k( q, _C.在调用setcookie()时设置一个不同的域名( X* F; M! g' t9 T) `0 }
D.向浏览器发送额外的请求
* Z; f/ b0 f- \E.使用Javascript,把cookie包含在URL中发送
( R! B" f" D$ \4 L; Z6 e" C
* I/ ]* p# b% p* \2 t
+ V0 [& G8 H2 \# v" ]4.index.php脚本如何访问表单元素email的值?(双选)$ o8 S' @2 m+ E& V
4 c2 @( O6 O. {1 f5 F' K" k% c
<form action="index.php" method="post">
4 U8 i9 i! K) n$ Y! L: U0 ~0 y<input type="text" name="email"/>
* I% }; _1 u# C' a; z& j3 s2 j; L</form>
, k( F2 M& [7 K8 V- j3 F5 t
6 B2 h+ B& p. G$ K6 `0 i, S2 G% cA.$_GET[‘email’]* e0 u; R3 t. a* Z4 D- t
B.$_POST[‘email’]
% u! x/ x1 l/ |/ ?5 K! f8 DC.$_SESSION[‘text’]
; L% z- O$ e' tD.$_REQUEST[‘email’]
/ P5 V1 ]! `) U: ?: O: ME.$_POST[‘text’]
: }# G# f* v) q7 `
( g: i3 J4 p$ r* h2 T3 _8 Y' i" X& I
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长1 v: e F' \- w" [
B.没有变化
1 K! O" `& d5 t3 b2 E# fC.在浏览器上打印该字符串时,尖括号是可见的
% s# h5 k! B& Q$ U0 w6 xD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见3 @) k& K% g% Z0 M: h, `
E.由于调用了htmlentities(),字符串会被销毁
4 a$ A, u6 A2 v9 H. ?2 K
9 \% l; g/ ~) e( T! K j( g& }3 ^, e# k9 s/ G+ k' M
6.如果不给cookie设置过期时间会怎么样?7 a: g5 {) e0 n2 W. h# W
5 d5 a# g$ l. B: K" eA.立刻过期
2 _5 k5 Y! z7 X$ l8 M cB.永不过期" _2 `( r, f) @. ]1 V% Z& U9 j8 w/ C
C.cookie无法设置
, H3 J* k& W3 V( Q" z0 _D.在浏览器会话结束时过期
3 U0 K) W8 k2 ]; ]% `; YE.只在脚本没有产生服务器端session的情况下过期
" x' F2 s$ N# b9 `
|2 h* m% {$ M; q2 {0 T% t9 ?! y5 ~# Q0 F2 X. s
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.什么都没有7 n( X* W8 e" P! D* ]- g/ j
B.Array# [5 z B8 s* C( C$ m' g
C.一个提示
9 w e- @$ k/ z; U4 f F; JD.phpgreat h6 `9 }7 H; I8 t d6 O
E.greatphp8 }/ t, \8 m5 F# G. q
# \" g" ^0 r7 c) {; }0 @4 u& n" A4 y& g! L/ \* E! \
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?$ y( H e Q" R. V: t, o" K
; U4 p/ o( F+ z2 y7 l! E7 v _A.这两个是明文传输,之后的信息加密传输
6 x' M+ \% d6 s) P& {8 rB.加密传输6 p( ?1 w+ a& s* z# M
C.URL明文传输,查询字串加密传输" \6 J) N8 A, a6 U, V# z% @
D.URL加密传输,查询字串明文传输
; _' o5 g+ M+ z9 g5 l; U5 t X& `E.为确保加密,查询字串将转换为header,夹在POST信息中传输
5 X2 d+ R& D: G1 W1 Z) }7 `
; ?. P- E* g1 _" H
4 }6 p2 k1 P9 H/ s$ g6 l _/ n! C* q9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么? N6 I9 o! n; i. K6 |# ]
* w, x# Z" ~3 y& s, r0 J2 z, G
A.它们组成一个数组,存储在超级全局变量数组中
+ v1 ^1 r0 }# X3 ^. E9 p& c' aB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 O2 w4 k1 P* [$ n+ A. j6 JC.第二个元素将覆盖第一个元素: g, B R8 K( x9 `! e! d6 {$ u; Q
D.第二个元素将自动被重命名4 B& | P/ h' i. [7 y6 a/ f
E.PHP输出一个警告
_, k( l+ z# @8 ^/ f0 K" }/ C6 D/ z0 z, U1 {
2 F8 }+ S0 A% k C- q# @8 j10.如何把数组存储在cookie里?( l; _ Y7 n) Z0 Q9 Q2 d4 e: q
! \$ K4 C6 h0 M# `; wA.给cookie名添加一对方括号[]
2 U, j* K$ U: i$ s! w. zB.使用implode函数
e4 G- `, _3 M1 D1 L' K L/ @C.不可能,因为有容量限制
" P: q! a/ e4 z; h3 S' @D.使用serialize函数/ v# m, K: g; l9 r+ v+ x7 F
E.给cookie名添加ARRAY关键词
& }+ @! ]: A Y% L( x' R6 M) ~: c! N1 b9 u
8 g( x+ a" D) Q$ J9 V0 H: e
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910. |6 _+ v7 o- O: j$ B l+ q
B.1234567890% d4 M6 F$ D+ y3 j! E& n) N i
C.0123456789 a* o% S; S- k' Q$ W* s+ K
D.什么都没有1 k) `" n5 I1 S+ \+ f) ~; v4 B
E.一个提示
+ u. F2 X- G0 l1 P) w1 g: l& p# ?' o$ f% B
7 k, D, q( x9 {3 G$ H% g O
12.默认情况下,PHP把会话(session)数据存储在______里。
0 ]7 O' I! K3 N6 \6 ?
- E# E; I5 U: xA.文件系统+ v, g& \2 t9 V5 [: u5 Z
B.数据库
* c$ N, t$ |, DC.虚拟内容# o% R) ^2 \5 ~4 P+ c6 `/ C
D.共享内存% s, p5 T5 ^+ i$ B
E.以上都不是
' r" t& X2 D! K% g: i, ]4 A; f+ K4 U+ C: M' E7 ~9 p, }
! ?" M4 c6 }$ y7 w13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)" \ G9 p) L* l5 ^9 g
6 X) L+ ^" F B2 r
A.浏览器的程序出问题了
S2 z' e9 W' w! xB.客户端的时区设置不正确+ K' m. ^* g7 x/ H
C.用户的杀毒软件阻止了所有安全的cookie
8 P0 |+ j' ~+ g2 `. @; M& C. WD.浏览器被设置为阻止任何cookie
9 }5 H; h! M6 v; t5 k9 g* e: b1 KE.cookie里使用了非法的字符
1 O2 c4 X& a! a8 y9 A% N& T) o' W6 |, G5 {' y9 N) J
6 s# r! x4 Z. l' N( G4 Z14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?$ e* r% v+ s, G& Y
; ]* c9 J" t" \( O) `" U6 X: H
A.1440秒后
' {! f9 ?. ]8 ^+ R# j4 OB.在session.gc_maxlifetime设置的时间过了后
- S* l# B3 c" S* _8 RC.除非手动删除,否则永不过期
0 ?& i. @5 p+ }" f$ DD.除非浏览器重启,否则永不过期
+ ? c% i+ Z+ f" @ v) `E.以上都不对
' e5 y- u( \8 t t6 {- k* i& q
2 E) i1 P% T0 p% D4 C4 T" |. }7 O) z0 k2 K( r0 V
15.哪个函数能把换行转换成HTML标签<br />?9 Y# A$ ^6 N) ^# r1 [1 P
3 e: f( W' p+ Y6 J5 v0 O8 n
答案:____________
" U* q* s4 p% z4 r0 g# e2 v7 K7 B8 `6 U0 t1 C
1 C( i. Q! _* u# v! C
0 a7 Z( |" L4 ^% d& D% S
答案速查1 ^. K% i& K& U8 g8 B8 j1 b" e
1:E
2 W+ d o. C3 \3 L2:setcookie/setrawcookie
9 X; p _ B H) G% `* m$ u. Q3:B: J) T& F/ R! {
4:BD
8 F- L9 m5 ~2 W4 L5:BD1 z2 L3 |, k6 u9 L( u/ E
6:D
8 B* s. o) c$ j) C( g" w1 Z7:A
7 y& W' w4 ]+ E1 ]. n; C8:B
+ \& L$ Y* Q' ~* ~/ H( ^( P9:C0 n2 A3 b3 x7 F% F
10:B2 Y# F/ l: {. g* W! T6 A
11:E5 s1 U# [1 l6 M4 z0 ~0 S
12:A, M7 M j+ S! @6 m3 a, e4 J0 j
13:BD
/ H/ m& M0 x3 c6 Q" \9 L$ P; Y4 i# P14:B
# D( F+ z+ d/ M15:nl2br: v$ l7 z ?, A3 G; m' j4 C9 U
+ Y8 N+ w& k- Q3 P4 @1 k
( N; q) R5 Y, S
) I. g+ z2 T, Z7 J4 h) b; d答案详解
) j8 A! {- m7 g" B5 p) M- |% T4 T! R
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。 w6 B/ a1 V; U. R7 J
; r+ l% P$ X1 P; b1 ~' h2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
3 l5 F7 \4 p/ Q: e( j- f( ~9 F& n: g! a) z$ O; u; X2 ^
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
" c2 k4 @) Q4 s; N' \1 \' ?& x8 D$ D8 i
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
) \$ q4 h P' C' l1 p$ ^7 C) }9 F+ B, H& D9 x% o2 v
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。9 |7 \3 _+ W, Q- l: z# ]/ d; _
) D4 f# Y/ ~, l" U6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
: x. S% \& G: p$ x1 \' Z6 A8 D
6 I$ p, {0 L6 X2 u" q1 o6 G7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
: p; P+ l: i* Y' B! N: e+ }$ j `7 s6 q
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
i' A+ n0 J0 z3 G7 G8 Q
$ z: K# k% `5 ^9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
7 `, I8 V! L2 h2 W' A- j; R9 C+ }8 q8 p! O2 j W. [5 P5 [3 v
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
Y8 F+ L. L9 }5 g: _' O
! B4 u9 f/ @: l. o* F% ?. E7 h! i11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
6 }9 Y0 @8 O9 i" }% H
+ g- e, N( e. q1 t12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。' B9 N! Q1 Z- F2 i% w+ O0 o
% v# o' C/ B- C" U2 y3 }13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。; u$ E$ z- T8 o4 t j
6 j7 t' D* w' Y/ W/ |, t8 M
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。6 Q3 ?# H; R# K& b `1 j
. A+ w/ p' U5 \
15.函数nl2br能实现这个功能。 |
|