  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14249
- 金币
- 2415
- 威望
- 1647
- 贡献
- 1363
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
1 Q w- w8 G, S$ i; z与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。$ }& h" H7 ^" F/ T5 C" r
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。. G" I5 L/ N1 v$ g( M
! W6 x7 ~2 O* g; [, S p8 m2 F. l( O
2 o2 A! C! l S
问题
: I y( X. {6 X( j# \
+ a1 V: k- z3 X V' h3 K6 h" w2 C1.如何访问会话变量(session)?
1 `% u3 ^1 L( @" |! ^4 l; `2 R8 f) f) a, u/ q- S- I- s, y6 b( y p$ N
A.通过$_GET, c# O% s5 y6 T/ m) V; \7 c3 h
B.通过$_POST
% j" K$ {! \8 c' b: ~" ? bC.通过$_REQUEST% k: w5 N- s: A! e
D.通过全局变量
: v1 Z0 d8 v. y* `& {" xE.以上都不对
7 t& F9 ~$ |8 K# p/ j. q0 c( g# Y% ~6 Y* V$ S
: O, J* V. d% @" r
2.哪个函数能让服务器输出如下header?9 H f2 ]3 O3 W Y9 |* {' ?
, d/ a7 ^9 c( ~% k
set-Cookie: foo=bar;
5 _) J+ B7 F$ @ r$ ^: k& L( k* J+ g
答案:_______________- q: o6 G+ N. k2 V2 ?! h$ n# b# w
& ?1 h: t4 b7 M" Y( d# \
! `. ?, _* Q) N5 Y3 v _ o
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
4 F) C7 o! Y$ @' V' O7 f
! d( ?9 s9 F! S2 c/ J" X+ CA.通过HTTP_REMOTE_COOKIE访问. [+ w& ]$ X: N+ W3 b0 t
B.不可能
/ d- H2 u: |6 i! ? Z% tC.在调用setcookie()时设置一个不同的域名
2 T0 |. g* N, lD.向浏览器发送额外的请求
: F( ^. [6 P3 r6 }1 ^9 Z! fE.使用Javascript,把cookie包含在URL中发送
% ~) m2 y P9 e8 y
. }3 Q2 O& X* Z3 u
7 S4 {9 Q5 G+ z) h/ p4.index.php脚本如何访问表单元素email的值?(双选). @& x g4 f9 Y7 c; n' d3 ~
3 w1 z# |% U! @6 E<form action="index.php" method="post"># v# d% A7 f1 W& ?6 x9 @2 ^
<input type="text" name="email"/>
( I$ d, v3 A! [7 @. }5 V2 R" b6 ^- y</form>
0 B& E; B* J0 c/ H+ t% J( i4 P+ ?6 R& M; M$ O- U7 v- t3 U! b
A.$_GET[‘email’]
) h8 X2 p* e m- qB.$_POST[‘email’]
8 \7 b/ f* d* y$ NC.$_SESSION[‘text’]
+ \. I d, |1 p9 a$ }7 nD.$_REQUEST[‘email’]
; N5 o8 C, Z h4 {8 tE.$_POST[‘text’]
+ J" e6 S! j* M! H$ V( A7 d0 e' y4 J4 ]/ g X1 _: L
: _' \) `' b7 p |4 [0 B5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
8 j1 r8 B* L7 J, z/ o* I3 \8 GB.没有变化
C) w6 w" n4 n- {' e3 n: AC.在浏览器上打印该字符串时,尖括号是可见的
' P6 Z+ k& I9 x3 b2 oD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
" Z. _& C3 w! ~ v! C: y" M/ eE.由于调用了htmlentities(),字符串会被销毁
6 `) U" j0 R7 D& ]& S9 r3 J' M% F, q+ O, {0 a9 {: P
) r! Y _, k' F5 p3 V6.如果不给cookie设置过期时间会怎么样?
5 f( t/ I) `& `9 d+ u9 q8 O0 J1 e: f/ m: a' k S8 S- P( i
A.立刻过期
9 ~ P, R o, W" y/ p8 JB.永不过期
8 n0 \$ G: P# P; {8 qC.cookie无法设置
% ^( w2 K* R, lD.在浏览器会话结束时过期1 } c! w, l+ P! M: `% E9 u0 w, A
E.只在脚本没有产生服务器端session的情况下过期& j# ?9 K& o c3 L
" A* w3 X" N% m' b; _5 _
# p5 v- s* e+ S0 c7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
2 z5 s; a9 P! o" yB.Array+ N8 _! z9 U7 u9 f1 V+ ^+ o! t
C.一个提示
$ k0 }$ k8 r5 ?; ~5 s5 l$ C* sD.phpgreat
1 |9 R' p0 ~" P u! ~1 M% c+ ?E.greatphp4 {$ t, \! E& v# t: }6 i
0 g& y9 Q% _ T0 Z0 L6 x5 a' y0 d8 Q( s, O. o0 r' _
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
1 C$ e6 @6 G" p" R; E; E8 ~
( t0 [4 g! y9 Z9 U; F& LA.这两个是明文传输,之后的信息加密传输
; s ?( D7 j; b" m+ N. OB.加密传输
" o7 {6 N2 X6 J# b) J V7 @C.URL明文传输,查询字串加密传输
4 m0 a# p. ^3 }D.URL加密传输,查询字串明文传输) o9 m- \% u. i
E.为确保加密,查询字串将转换为header,夹在POST信息中传输9 k7 e, o& c# i8 F9 }- R
8 a) c( a6 V/ H4 _
7 m0 ]4 e7 \: A; ~9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?3 W5 K4 k: M: G
4 r' R) Q. y+ _5 G0 ~
A.它们组成一个数组,存储在超级全局变量数组中
6 _, v" F( }9 K- R0 C; LB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中% e2 r* M/ S5 G" F+ k6 ~5 _
C.第二个元素将覆盖第一个元素- K @" q: W! f& f
D.第二个元素将自动被重命名
: a1 [$ g% v$ h5 R/ o1 v/ i6 fE.PHP输出一个警告
$ i4 ?9 u) C6 x3 ?( N
/ s7 C: Z4 r* q9 Z
. E; }5 P9 L5 N/ o3 c) u- k% B* C& r10.如何把数组存储在cookie里?
( y! j6 J0 H+ q7 n
: D# _1 Z3 |9 S5 zA.给cookie名添加一对方括号[]9 e; f, T1 f- f3 }8 n; d, h
B.使用implode函数6 h4 Z4 I" G- W# }
C.不可能,因为有容量限制
$ j( B% X1 [. @% D) fD.使用serialize函数
0 [' D9 }7 {- ]+ oE.给cookie名添加ARRAY关键词* x1 X7 f6 k/ r/ J
) y5 Y! r+ l, }" I0 B
/ j& E7 n9 r1 D
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
3 z, l# u" x2 s! @/ Z( x+ X3 W, |' w3 nB.1234567890 S: _ A4 e( f" h& M
C.0123456789
: X6 I8 l0 j# z3 {D.什么都没有
' E8 B' m2 r T* H6 J! yE.一个提示
9 o7 `0 I/ a: l5 @* u
& {- }& U! k+ }
- m8 ~" C W$ u7 {% r: g3 p12.默认情况下,PHP把会话(session)数据存储在______里。' L0 V( S& i0 r' {/ J. S
9 ]: m2 U( i( I0 X8 @& t# I* nA.文件系统
8 q/ b _0 y0 X! e) vB.数据库. x- ^8 z( @/ U5 k* T. N8 P
C.虚拟内容
' ^2 j. D! \: Q3 xD.共享内存
- z* Z y' W- i0 a# ?E.以上都不是
* r% Q$ G6 o# ]4 h9 _: u' a: |6 c4 J* U- h
4 X2 m6 k) i( u" [/ a7 f9 B1 y
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选), t% G R& Q, w1 x8 d8 D* t' q+ ^
# O; b1 `; w6 h8 k5 O! T% O
A.浏览器的程序出问题了
7 K8 u0 b1 |( B2 ]: o0 h8 LB.客户端的时区设置不正确+ J0 y0 ^, L2 E% `
C.用户的杀毒软件阻止了所有安全的cookie
# ^+ A9 ^4 [$ C3 A+ w' xD.浏览器被设置为阻止任何cookie
# P' \ m" u; h( ?8 ~9 tE.cookie里使用了非法的字符
, r# n" ]8 Y9 N, u" B h; `
4 x' i! X) F8 ?
- H) A! V! E1 c9 h6 }14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
9 I9 ~8 }1 E5 I' c" y- u I6 x3 O9 _; \0 V: J$ v
A.1440秒后# x7 E" @; _8 Y
B.在session.gc_maxlifetime设置的时间过了后* ^5 F7 H+ Y: L% I. Z/ j
C.除非手动删除,否则永不过期
r7 i4 d- |* _ e4 T( gD.除非浏览器重启,否则永不过期 k: D0 B# Y9 Y, h! J: u% {, P
E.以上都不对
1 W1 y6 v7 G+ q; ~# E; [/ Q, U/ K/ L% r1 u0 N+ ?8 k
+ F+ I0 o: D4 l* |7 A0 P2 g- A
15.哪个函数能把换行转换成HTML标签<br />?
0 j. l: [4 U' {$ [/ U5 v, ~" u1 ^6 U
& {8 {! s" ?1 V R- u3 \# `答案:____________
7 L* c& ^2 f+ x3 K9 x" {" A
1 Y& B* Q/ ?! U. Z4 \9 Z+ h8 h$ q- Q# J2 m
/ A) z$ t7 b! z- U) S9 {* P
答案速查3 s; H$ d" n7 i. L( f. A/ \1 ~
1:E
$ K/ @4 W6 ]2 g2:setcookie/setrawcookie
5 E3 A( _2 l8 _0 N3:B
3 j8 `& d9 F2 p2 ]. z4 C7 ]1 @: J4:BD& Y* X. }8 C3 D! g$ s7 K+ {: `
5:BD2 G- E3 i- [$ N
6:D" K+ W6 z4 e4 s( d" @, ^
7:A2 w! l. T# ~5 b: H
8:B3 _) Y% l2 l {
9:C
1 |) s( C+ n2 |' M10:B
+ f- T( o" W+ q5 i5 M, J1 F11:E. e: I1 }, O- W" \
12:A
$ W6 C! v% v, j( N8 }0 P/ f9 S13:BD# e7 F8 T# e2 [) J; Q+ }; X6 }
14:B
# Q3 f0 x) S" t8 M* q$ i15:nl2br. G& o3 k$ c4 m& N, V
' @: m( v3 e) C: v( l/ d! ^: {" d) C7 h/ ]$ x! S$ g
& K7 C# i, o( S. y6 t: q4 D) n答案详解- X" k5 @. l3 j% n& i
, q2 C% h1 D, z1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。) f7 R# L* O+ f7 ]* ^1 c, U# c& A* C
3 ^8 y8 V- b- V$ S- [2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
+ T) [2 b7 |( ^! }* H, o! ]# K$ x) T1 U8 p
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。9 M" o5 m' _& v/ Y. ?1 A
, A# I/ @8 k3 G9 K% z0 m! b4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
5 o7 r3 K* L4 D/ |3 {5 E9 |; K, q! F8 D8 ~3 U; D, a! d
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
( k w* B" P2 P& t
: O# ^% G( x. X$ o4 b5 n6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。+ _1 Y6 \4 d0 w u l; r( ~( g& U
" o# r9 V# O3 o3 p8 g
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
1 |/ k6 A. {9 G, V3 `4 s; y
* Y( [8 \4 R" n, F) Q9 c8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。! k6 m& ]6 C& J5 Q% @: Z
$ P+ z+ V/ A) j& o$ m
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
5 C/ `1 Q4 i n) n8 w" g& F
" B1 P& J! ?2 s$ a) u10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
3 i* h$ o- D3 t4 S! j# a3 `, G/ |9 p5 z5 t( v, w1 R* t
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。( l9 n; N0 \" R% G- O9 \& i
3 x5 E7 P6 g6 S; K8 y% `) U
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。& I4 M5 d+ j% u" c5 K0 H( X3 K
0 f9 k3 e7 R+ H O# {
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
- b0 b, q+ q( `2 j: h9 p" A& D8 r3 s+ N, H9 ^
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
; |7 Q7 n Y( d2 h8 b+ s9 ~! P8 n+ j7 D Y! n
15.函数nl2br能实现这个功能。 |
|