获得本站免费赞助空间请点这里
返回列表 发帖

[Zend权威认证试题讲解]第三章 Web开发中的PHP

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。' E2 W9 M! ]9 S& I  u( i( Z# Z5 j
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。0 a& S& q& A! ], Z( v
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
* z' y/ I7 J8 L! ?" _  R1 b! V7 {# s1 [0 i+ @
* {' g1 B9 I' ^$ W& r3 a
问题/ T3 R2 n, W: i3 H* }
1 ^" T) s/ X4 x
1.如何访问会话变量(session)?/ h$ R4 J# w! N6 g' w% u

3 B2 Y6 ^# F) O5 E0 R% t- lA.通过$_GET
0 {# K4 Z# @0 l4 {% g' O! pB.通过$_POST+ z+ D4 b6 Y7 Q* J
C.通过$_REQUEST
" {# z* p" @- O& k6 hD.通过全局变量
; l% f4 ?' ^* z+ K& \% IE.以上都不对. x" N% x8 n1 V

" [( P. J2 ?8 a0 H; ^
" `+ T: z2 @  \9 U3 x: f: O+ h2.哪个函数能让服务器输出如下header?
9 W2 u+ D$ W- p* b1 |8 j2 f3 f) ~, y: a, ~) e/ L1 I
set-Cookie: foo=bar;
, J3 i7 V5 _+ R; q- ?6 M3 h
0 C0 I: k: ~4 `$ `2 R答案:_______________
' m, d, b- I1 e9 b' `+ M% z4 u0 a, s6 y6 N! D
; D, b0 G4 k2 n6 v% J- p" Y- g% N
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
7 ^- s; X9 o+ v. B6 T3 ^- _) G% G' D1 ~6 p5 K4 I# C
A.通过HTTP_REMOTE_COOKIE访问1 a; b) p( S# ?  x" e: b
B.不可能0 H7 s+ n/ {7 Q9 t1 s. E( @
C.在调用setcookie()时设置一个不同的域名0 U) H" i0 B: X4 Y' X
D.向浏览器发送额外的请求" c$ G: d1 s( f' ~/ D
E.使用Javascript,把cookie包含在URL中发送
# ]2 M; L. D7 q6 U) r" y
, N, M8 Z/ J* Z* v9 I
% u9 L8 h* v2 `) r) w9 O4.index.php脚本如何访问表单元素email的值?(双选)
5 r0 }% T. i- |- {9 Z
' S3 R6 m! M( ?# @! L<form action="index.php" method="post">
6 \; _1 e1 D- @6 z3 m5 y9 e<input type="text" name="email"/>3 I# n3 _% q- [/ Y3 Q
</form>
2 S$ h* }. {) |2 Q/ y. K2 D5 r; ^, O1 _( I  Y% f
A.$_GET[‘email’]6 [- M3 X. K; v+ p3 R
B.$_POST[‘email’]
0 {3 W) R2 D# n7 S7 S* FC.$_SESSION[‘text’]
0 s9 j: P4 Q0 ]  W. ~/ H4 |D.$_REQUEST[‘email’]
4 s; v7 b$ T" v) ]5 mE.$_POST[‘text’]- N6 z$ O( z6 j5 t* X$ u
; m# |' |* G6 V

2 Q% z& x1 Z1 i7 m% O, m5 S5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
% k$ b+ i- w/ P6 Q  OB.没有变化9 A: c* E. k0 k0 H) K7 [
C.在浏览器上打印该字符串时,尖括号是可见的' A) m  v1 Q6 Z
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
# K! b- [, }* bE.由于调用了htmlentities(),字符串会被销毁4 V5 l& R* ]& E, F+ \$ D! V8 j
" l" A7 _% ~8 N. F: H3 \
  e; f, ^9 t" n% e3 X
6.如果不给cookie设置过期时间会怎么样?
2 f- b/ V7 i1 E' D% m+ |# m! `5 v# b9 N( J2 X3 P
A.立刻过期9 n# j7 n2 a( L' k; {5 `7 n
B.永不过期0 y  q: R' O9 B) g* `5 J; Q
C.cookie无法设置
1 Q+ u! \- S  ~! i8 s9 aD.在浏览器会话结束时过期' m0 K9 w- @5 V/ b+ G3 D8 T. ^2 }' u
E.只在脚本没有产生服务器端session的情况下过期( E  p8 j* Z5 i. C. M& P

9 p" q3 h- n+ r, o- F& w* l" a# l; X
0 a& v4 l0 y1 A1 g  i7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?

  1. <form action="index.php" method="post">
  2. <input type="text" name="element[]">
  3. <input type="text" name="element[]">
  4. </form>
  5. <?php
  6. echo $_GET['element'];
  7. ?>
复制代码
A.什么都没有
/ C8 k3 c4 t9 J% t5 B5 P( u; YB.Array, k$ u4 [; x& c) y
C.一个提示4 I7 O5 l$ e% R( P' ^1 A% r9 W
D.phpgreat
/ T3 b/ c( N. s- [' `: {# \E.greatphp; p$ N, {1 o5 K' }7 L" ^* M

$ k! W0 M% U  ?4 v- |, j& O  E
! ^& F, v9 K# C# {8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?3 _) a9 l1 [# Y) \
2 I; u. H; `$ T7 l
A.这两个是明文传输,之后的信息加密传输0 ^5 u6 H" f6 ^5 C/ k; h: H$ z& u
B.加密传输
# A: c3 x$ O0 B8 L7 CC.URL明文传输,查询字串加密传输
7 q* w  n* H6 O' c' q- @1 T. hD.URL加密传输,查询字串明文传输7 |0 F9 Z7 j. O: u1 w: P/ U
E.为确保加密,查询字串将转换为header,夹在POST信息中传输/ G: A# ~9 i' ]
2 \2 I: }& J$ X. n) i0 B$ A
) `/ J/ s) `% y- ~5 m5 b% h, c
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?. F4 c' K" `$ E" q) \5 c6 p2 c

8 R% Z. h0 I( @$ }: ^A.它们组成一个数组,存储在超级全局变量数组中
: @. T) x( B7 B- u6 R* kB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中1 q2 U0 |' |7 A
C.第二个元素将覆盖第一个元素
6 F; k5 q; X6 h4 k% B- q& q% ?D.第二个元素将自动被重命名
4 M8 j. r, w1 S/ c$ SE.PHP输出一个警告
# b& w$ E' V$ d* a  Z: L& g, L
' q8 F( h7 T) ~0 w9 b, C, h+ V9 ^4 `" p8 ^
10.如何把数组存储在cookie里?' p7 ]9 g- Q. {% R; R0 A- }+ M
; e( N  S4 A7 G. x4 p/ t7 d
A.给cookie名添加一对方括号[]( M/ G6 e6 \8 a" m  l% j; Z
B.使用implode函数. V! W# G* P/ b/ w9 \3 _; n! Z
C.不可能,因为有容量限制0 r; B6 U) w* r& F0 n9 Z9 ~
D.使用serialize函数
  S, f& j# n' U- a- T& l4 vE.给cookie名添加ARRAY关键词
/ z+ L, j, D% m1 J5 ~- ~9 U, J# a4 B  A1 L9 b) n4 P% T# y9 ?
/ c/ ]$ k- z% v* i& h8 }
11.以下脚本输出什么?

  1. <?php
  2. ob_start();
  3. for ($i = 0; $i < 10; $i++) {
  4.         echo $i;
  5. }
  6. $output = ob_get_contents();
  7. ob_end_clean();
  8. echo $ouput;
  9. ?>
复制代码
A.12345678910& o% f$ \; j. v6 n
B.1234567890
4 |5 s* r. k3 D; I  e( W9 ~6 m9 ]' jC.0123456789
* C+ `3 t1 E6 [  R1 WD.什么都没有
% M1 P' b) f7 {( `' L* Q# u7 zE.一个提示
& ?) h, R8 t( w: E' Y) [6 ?( Y( R
: x* _  v3 I1 H0 I( S
0 Y, w7 o, v! z# ~6 z12.默认情况下,PHP把会话(session)数据存储在______里。% ^* n% W! `: V" U! \

1 q9 b- U, |: ?$ iA.文件系统
8 Y# G3 x% P% _B.数据库9 x+ p  i4 N+ R; T1 t  S
C.虚拟内容
* c) g# r, _  G8 pD.共享内存
& O4 v! g# t, m( C" J8 `E.以上都不是
  v5 Y8 J# ]0 U1 A, Q
' w& j+ p# L+ V3 V1 T% l7 y
4 _* `3 i1 K# ]4 B: F9 f13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
% T$ b/ T, T: M  E+ G. s+ x
+ A6 J$ S7 Y$ U: D6 H$ XA.浏览器的程序出问题了% D: ~/ |- g! a1 W1 o
B.客户端的时区设置不正确
4 e0 m2 j* \& dC.用户的杀毒软件阻止了所有安全的cookie' p. v3 {( {- Y. h9 D6 I
D.浏览器被设置为阻止任何cookie
, t3 g& m! y4 tE.cookie里使用了非法的字符
' H$ B  h* B6 G1 K( f7 b3 `& H  k, `3 N0 b3 Z3 v
1 Q+ [9 a4 `8 A
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?0 q2 Y" m# s8 n# x- @% U# ]
" L  `# Q. E, k
A.1440秒后- H; x' K% H0 R1 E) k; `
B.在session.gc_maxlifetime设置的时间过了后
3 m: t9 ~, L$ z) mC.除非手动删除,否则永不过期( v2 @4 S3 `3 O2 {
D.除非浏览器重启,否则永不过期/ Q* S+ S3 o, ]7 N
E.以上都不对
% ]- n; M; H& O2 r6 S, O
. G/ e, V0 s/ O5 s& ]# D, ]
2 C& ^' h& ~7 b$ \. T1 J15.哪个函数能把换行转换成HTML标签<br />?
! B/ m' H( `( Z; u8 e  W' ~" s. {2 l  e" ^2 T, y0 e5 X% z% a* v1 y( ]
答案:____________
. X' l! Y# f' ~4 [. J* E' H. u. ?  @& V# P- N# F

( }9 U0 b3 L# M; v$ ~: J3 b1 @) @
1 L/ R, K+ d* M- p答案速查, l1 c( u% g" L  S0 s, T
1:E
( Z! T2 l/ z* Y, ~2:setcookie/setrawcookie
$ `, f1 H. H& a: l3:B
+ V- g! t# i  j$ o. s7 W: X4:BD
; k  L6 f' T) `4 c: L2 u3 i5:BD/ p6 _- f  r% F) F& H- T% W
6:D
6 [+ ~% _+ T( @! ^0 P$ L4 G/ R; v7:A' E1 W- p! K8 `, D
8:B1 W0 G9 ]1 O5 p9 ^7 w8 I2 u/ B
9:C+ a5 L3 v! L  Q& Y
10:B6 S* V' x5 p  @& k  w- g- ^1 h
11:E
# u2 n& k2 A, ]12:A
* X# O( K$ w9 Q/ k7 E& v6 j13:BD% u( P( v+ D+ r4 g! {; Z8 y% ?6 i
14:B4 V; _/ G) h- x% I
15:nl2br
2 u& r5 q4 S7 i* q; g" u/ t( q/ m0 q( m
, X$ ]$ z7 r% t* X, W1 v, {5 {) @

8 K! D& w. J/ s/ N0 ?答案详解, c" [6 H& s+ y) {: \. [9 \
5 f7 W0 {& T+ ^/ R. R8 ]% Z
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。6 _4 B3 o+ K3 z4 l9 p7 d) N
5 p/ Y& s, C+ B, c- K7 \- c8 L- I
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。! r8 @$ _; z! W2 M- R! J$ [

; b  u8 u1 C  L, W2 \  f7 c" x3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
% `5 O1 Y* b! {" W3 t( p2 G% N) o( }! G' S6 n0 P( q2 Y7 ?/ b1 ?
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
. S2 @% C1 s4 G# K  N1 l' V! H% c, o1 g6 ^* [, i
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
3 z) i( Q% O( _/ n4 \# O4 q5 O! U: t" S% N( x  Y3 I
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
( l* E. T5 ^( a) T7 W
8 z- i8 V# [7 k' g3 B6 e7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
1 \) N9 F$ n& P# E9 ^7 J: S0 ]! }+ O3 m, o
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。3 M- N. q6 R/ b$ Y; Y1 T
, x6 [0 w% \) M: e
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。  J3 P- r8 A# B, A5 v# I

6 y; U" B" t1 t5 w! F9 S7 @6 _10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。; l  W1 I/ a2 t2 H
* P2 X& m$ Q4 q9 {9 O/ X4 n% I
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。; I' I) P  w! f

( E( W2 y  k- \6 \. P  }- b12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。- r+ l( B2 y1 a9 A* u) n
( A1 Q% g) W0 [( n6 h9 a+ M8 z
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。" r% S. k( I0 f9 j* ~, T. j6 [/ p

5 b' d0 l' V4 k+ t3 u3 Y0 @14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。7 x% B" y' z% }, k8 U4 i& c

6 [  E2 ?: ~; ]/ }& {+ m9 ?$ H; Z' \15.函数nl2br能实现这个功能。

返回列表
【捌玖网络】已经运行: