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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
; }$ S) l' c, n; `: _, l与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
6 ~1 w8 L, j( U* Y, {& p# W一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
5 T# N/ O- }% M; _
: K% F# g& [, q' ~% g$ r5 @# A0 P$ n! c9 x  U
问题
5 ^" B" o4 H5 c# Y" P$ [( B
9 i2 P' |& q0 T8 I  n. S' Q# v1.如何访问会话变量(session)?
5 C- C: }7 o5 d# o* V5 b% I. Z4 K  V& `5 i
A.通过$_GET7 g. t& A3 X3 L
B.通过$_POST* M2 D; h7 K" p9 F2 l2 m
C.通过$_REQUEST
# h+ j$ m8 O+ v% D, r& |D.通过全局变量" p5 n3 j5 w- m* Q& N6 S) U
E.以上都不对( M4 c. @& i6 ?
6 H' d, ]7 K- r( m; q; v

6 W7 |2 s1 i# b0 u8 v2.哪个函数能让服务器输出如下header?
6 G  d" Y& k1 R( v$ r' c% K  l6 m5 ^# D; g4 H
set-Cookie: foo=bar;
4 h  z9 X' I* w% J; Z. A6 V; k2 e, K8 K( `/ l
答案:_______________
9 M# g2 j7 [+ w  Y
4 x% K( Z: U* s6 g% J
- ^& m( Q8 F. d0 m3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?/ A' L/ [4 u' w8 N) w) S5 ?( ~

% b* w6 R- w4 M' G0 iA.通过HTTP_REMOTE_COOKIE访问2 L: _) ?9 Q' F# [+ F2 a' @
B.不可能
  A7 }: C4 Y6 q# bC.在调用setcookie()时设置一个不同的域名
2 ~: n8 L- U& J, y8 ~D.向浏览器发送额外的请求. \1 ?7 U' w- A( B, p4 r
E.使用Javascript,把cookie包含在URL中发送7 B. K$ n: N1 }1 f

& [* E% Q( y9 r3 }$ X7 e$ A, z
  i( ?6 c0 O: p4.index.php脚本如何访问表单元素email的值?(双选)" O$ [* W7 Y: c' u. X3 j

5 w& c4 P- M9 a6 R1 R3 l6 v<form action="index.php" method="post">
2 ~/ J7 J- J8 i. q$ g& {6 Z<input type="text" name="email"/>& x( m3 u: n( g8 @$ e6 e
</form>5 H, [' u5 a* [: c$ @! O

% f! c9 H% d4 s. x' z8 z! o: \A.$_GET[‘email’]+ |5 C' z$ F" }" K) s, u
B.$_POST[‘email’]
* L. D& f5 t- n1 W9 }9 k, H' LC.$_SESSION[‘text’]- g3 B8 B) v  a8 C# u, A  q% C
D.$_REQUEST[‘email’]
7 ~/ m" n5 C* b! @! x* y3 _- tE.$_POST[‘text’]* I; W, T* f, O" b& L7 |

- r. u( ?6 R& i) N% r$ n) o
! q- T3 X9 `. J4 Q5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长1 M  l* y2 k: E4 {) K( n
B.没有变化
1 Y7 Y3 B5 m  }: sC.在浏览器上打印该字符串时,尖括号是可见的
* c  O, J: g8 t; N& Y* u7 ?7 sD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
# \* X9 }8 [! R4 xE.由于调用了htmlentities(),字符串会被销毁+ m% A8 p2 |, \5 |& o7 P
9 }! |- @, I% t2 O) Z$ }2 u+ A

8 R( v; o/ A# M0 ]- Y- b- t  z7 s6.如果不给cookie设置过期时间会怎么样?3 d5 D' b9 e; W3 x* |6 [- q0 q

4 u- {0 Q; y# ~A.立刻过期
0 Y( e3 N1 ?5 ]- U* Z- GB.永不过期/ R; D0 O7 ^# U, ~( R4 e
C.cookie无法设置8 F; N1 P2 a+ O
D.在浏览器会话结束时过期$ R& ]4 S2 J2 x5 Z* U# Z
E.只在脚本没有产生服务器端session的情况下过期
, u) B( P" f0 d( j! Z: y+ X( T  S6 ~: {5 k+ ]5 K' S9 k0 o

; c4 X7 c% v0 T$ u$ G7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
: Q5 {4 o; G, ~+ V- w% VB.Array; c5 T2 U* f  n4 x/ f! L
C.一个提示
2 j4 Z; Q/ o3 G& ]6 \4 FD.phpgreat( r$ {7 q+ v9 V0 X" x
E.greatphp
( a) w6 Y4 c$ H4 k/ I+ }5 A# p4 `+ ]+ X+ N  B, |3 t

1 t# t- ?5 W1 g. e- e+ W- ]8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
5 L4 }& H) d' W6 s4 N$ C
: T! T! P" C( x6 l6 G! {7 r0 i& EA.这两个是明文传输,之后的信息加密传输( v% D. U" _) T1 k
B.加密传输
" f2 ?, y! W% h3 j* u" SC.URL明文传输,查询字串加密传输" g9 a2 \5 L# J& n& r/ l. j4 o
D.URL加密传输,查询字串明文传输
* D( q8 b% V" _: f. l- iE.为确保加密,查询字串将转换为header,夹在POST信息中传输
7 Q( z4 X4 l& }% }
9 Z- G0 P+ p: Q9 e9 ^  h, Y4 V8 V
. @0 _; I9 Y- [) I9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?) {: a( p# u( y4 ^' \4 k

: }8 a. D$ n5 |' {A.它们组成一个数组,存储在超级全局变量数组中
5 N5 w1 `! T: v. R7 [5 U4 @B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中9 k% Z0 k; y- h3 _. N/ D* B/ F
C.第二个元素将覆盖第一个元素
. d" d( g) d$ y. M4 [  fD.第二个元素将自动被重命名! M7 Q) b' `7 I4 [" U
E.PHP输出一个警告+ i  A3 n& J- _: ^! k, ]% x! z6 m2 d

8 N* r2 J. h& f1 `& }
1 ?  w' \- h7 w% X( _# a10.如何把数组存储在cookie里?
) r' V7 O  {5 [8 O6 K" Z" M! G* u+ J0 @; i" N5 k1 G, V
A.给cookie名添加一对方括号[]
- o1 x1 a- z, J2 p& P/ S9 l) QB.使用implode函数9 Z9 t. ^9 d0 m
C.不可能,因为有容量限制' ~5 i- B0 V. L1 t& f; N
D.使用serialize函数
3 O( j+ j0 ^7 }7 M+ WE.给cookie名添加ARRAY关键词
1 |( G% t7 i' ~' X& _" H2 Y& ^: W3 S9 V7 f3 ^8 u8 j
8 M% g! Q" s5 r) m
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.123456789101 F- p. q& z, ^* j
B.1234567890
1 m* t% B1 x9 |; O! gC.0123456789' A6 F% _  b0 p7 T4 i* r  u
D.什么都没有
1 v& |' n! x, f$ I, {E.一个提示
$ J8 s. `. m  O- W4 E$ w$ G0 s2 Z# _
/ Q5 i0 a, g* F
12.默认情况下,PHP把会话(session)数据存储在______里。: }0 ~6 j) E( W6 M6 s: e

  U4 ^' V1 ]0 t2 O( P8 JA.文件系统
: x/ x" i. x6 R1 q3 [B.数据库2 T) ?5 B) A+ I" w
C.虚拟内容
4 ^2 S& Q4 \: P4 U  A) N: ID.共享内存
" P7 [8 K* O  Y7 b  G+ E: OE.以上都不是
4 b: f. q2 U" P7 u% j8 L: T7 h
3 m4 M. G& Q# p+ `3 s! K: b
2 B8 i1 o# L% d$ M13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
& d  r8 \6 J" }, `$ b  J- V; c- D  D/ y
A.浏览器的程序出问题了1 d" V4 D1 {4 B7 b6 L
B.客户端的时区设置不正确
1 Z0 @+ z/ i) u5 J; gC.用户的杀毒软件阻止了所有安全的cookie
- {/ [7 Z8 |. u: z& mD.浏览器被设置为阻止任何cookie9 e4 @+ Y. j  B6 L) I) B
E.cookie里使用了非法的字符' B; _0 I8 ?+ }9 T# V$ H

6 V6 I8 H. O4 S  e2 ^, ]) f$ D
1 e/ x2 X. I, H7 M; }14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?. O% k. h( e3 O# Q) m1 z3 V* C

8 z# K8 M- m  K" A3 gA.1440秒后
% r8 `- z. s9 Y/ n9 L9 `1 QB.在session.gc_maxlifetime设置的时间过了后
) \/ P+ w: ]. j& z. x" J' BC.除非手动删除,否则永不过期  S  c! O* _8 S
D.除非浏览器重启,否则永不过期
( ]8 v1 _6 G9 p# n7 [* T7 w$ ^/ ME.以上都不对
) Y/ u- I* Y9 t) m
2 ]" i# A& I! v% B+ V5 v0 b% _4 r) ^# D
! c% f4 O9 b7 y15.哪个函数能把换行转换成HTML标签<br />?
( {9 s: l; p/ A
0 Z/ h% Q% ]/ Q. I+ A: Z4 o- d; v答案:____________
; [: y. v. ?& [6 E$ H+ z; g3 B" H# V

% V. {# _+ k. t1 W( e* S8 i& h4 @. h, e. d! f3 l9 _" j
答案速查$ h4 E! l# v. ]9 O$ B5 E. q5 Y# k: g2 k
1:E% u2 Z7 Y2 F! e" K
2:setcookie/setrawcookie7 I: c& V' b+ d/ l
3:B$ E2 V3 Y1 J3 w
4:BD
3 P# P/ C7 X+ k) a8 k5:BD) K8 _9 w* _$ o- U% V4 j! L
6:D, _  {/ ^  U2 D3 B+ r
7:A
8 n% |& V& ^; M3 C* }8:B
5 q  _8 Y+ W# V, ~) a+ }7 o9:C
5 [& g, w5 s  \5 D" {4 O10:B
4 f# g0 R( |* V' f% K11:E
1 i5 O0 [5 k4 Y: {8 A+ D. Z12:A
: x( {* e& j- K. j$ B- }13:BD# a6 y' C3 b3 v1 t
14:B: U8 b5 }- j) R8 M+ i! s
15:nl2br
" ~, |& C3 C* ]: A9 D3 s5 d, R5 Q' z. M2 L) X
" ]- x. O* R  s; X

: C$ M  ^) c/ o2 ~* A答案详解! C( l+ G$ ]# D# D8 v( \: O" f
3 Z  t9 [; _' v
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。! p9 Y$ A0 Y! ]- G3 l3 v6 n

5 O# ?1 U; U: T( t, O2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
. \1 x6 s0 U- J6 W. J! f, P! J2 U0 K" ?! w, w4 v
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
" t+ V! }7 @1 A0 p; h2 K1 H4 Q, b
- y4 Z; w$ U/ J9 Y: L8 d4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
  T- T7 u1 A% x9 Q1 ^; l# k5 e
! V4 m8 J1 [! T+ U% \6 E3 n5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
5 V0 O8 y( b, y1 u
( @' {6 |) y# x1 g. m6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。/ P1 T* {/ L7 o  U

! K: \: \0 [4 i3 S! g7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
# D7 L2 i! f# O5 H1 A# U1 y& i4 \( j8 g& d1 `* ?
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。: _$ X  [2 V/ u0 F

5 b# u% _$ Y  G  S1 G0 o9 b0 k9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
0 Y" o: q- j# B; u% v$ d* c( C! Y( V) L
/ W/ E. Z" }; o/ C10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。/ ^/ V4 N6 U- L# O( B& v
2 }4 C3 @- B# @$ D3 Z0 p8 P
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
8 R6 C( {- {) _7 w/ J# v/ d6 X& B. D
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。: D' R  ~) E  S
  I: V7 t" j2 s* F
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
( E# j" J+ w* B1 m+ D1 ]9 h' F; ?- @$ \8 P9 q6 ?: C' w; o
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
/ d; t2 }& L5 V% b+ w# d( L7 d  d1 k$ w# I! L/ r
15.函数nl2br能实现这个功能。

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