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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
) f: m5 H( g' b& ]( P与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
. _# w0 E  @0 O" M+ Q3 n一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
2 u1 X4 z; v) v' e$ A
" |8 ?1 L. O+ x
5 ^  D- n% ?% V, P! f+ E问题
& C$ W  k& I! z+ k/ r! e2 V2 z* y/ _# [
1.如何访问会话变量(session)?
7 {6 e. X& M8 f  M" C, K# X
$ v2 f% \: |( B8 r- ?2 w$ tA.通过$_GET
& G( _! C0 s  a: G+ W" p5 @B.通过$_POST  k% l0 {7 R& e( K9 E
C.通过$_REQUEST, }, y% i" D7 ~! b. Z
D.通过全局变量
8 C4 t  T% Y  Y1 J/ JE.以上都不对0 z1 ]' ^' w% g$ n  u* I& f

$ S) }) r0 ]" Y/ b- Q
- O) D, ?- f5 {2 l: G  n2.哪个函数能让服务器输出如下header?
  E8 u- }3 X: p! i2 v) B
5 E- \, h1 w/ a2 n5 c* r5 ?& yset-Cookie: foo=bar;, @, ~  d4 D" ~8 r& p: E
) x. ?9 X5 p% ?+ u
答案:_______________7 v8 C% y. g( K* Y

; V0 w. R0 {6 H+ B) F6 a6 M% g- C! a7 D) b4 @
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?$ k" C# \( a( p& ^; S& J  U4 U; J$ A* I
- g- a" k1 W6 K" N- |+ D
A.通过HTTP_REMOTE_COOKIE访问
5 }4 o7 X* W3 ]2 ~- @3 fB.不可能% A8 {' r& E" b0 ]
C.在调用setcookie()时设置一个不同的域名& ?- x' M" b7 h" ?# ]* B) O* f, f
D.向浏览器发送额外的请求+ p" l9 }8 ?( Q6 K6 j3 Y9 V
E.使用Javascript,把cookie包含在URL中发送) b5 C) _; N" z2 X4 b
+ ^6 F0 q8 K4 Z- ?5 `7 `7 m
) [3 n: `$ k  P2 `
4.index.php脚本如何访问表单元素email的值?(双选)
% Y# c0 X! W' X, \4 A% ?# E6 C- M$ L2 g0 r& I8 R
<form action="index.php" method="post">& r- l  ], Q: [# N
<input type="text" name="email"/>
& ]4 ~3 p; i% f$ A0 {! D</form>: ~& Q5 F# J6 }* _4 ?: w) O* v* ?

' n4 h- R) I$ G" R4 L% D' M8 \8 X1 qA.$_GET[‘email’]  Q6 Y, n1 {5 S, u# o
B.$_POST[‘email’]
0 u) w. V. w+ I7 `* Q( @C.$_SESSION[‘text’]! [# Y1 G. u9 a$ m& k- v
D.$_REQUEST[‘email’]
+ N2 q( Z* j  L& g( k( d) h3 w7 lE.$_POST[‘text’]$ U7 W. ~* Z  I9 {

- k! L( w, B% W0 p$ z
- `2 ?5 Z4 }6 R; N2 _+ |5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
4 @  V# H. S# ]* }* @B.没有变化2 M; Y1 m" m% I" x3 u6 a
C.在浏览器上打印该字符串时,尖括号是可见的
8 x8 F3 m6 h) l# fD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
; t+ J  D/ P. N2 S' n$ V$ [9 XE.由于调用了htmlentities(),字符串会被销毁
: r- _3 ^! e2 L( L4 ]
1 j  \1 T! t# v$ I/ g. q# L0 s" T' X8 y5 Q: h1 a6 h
6.如果不给cookie设置过期时间会怎么样?7 i) @" O/ W( ?1 z

+ m- K5 ^, l& r3 B* OA.立刻过期
/ \1 P, N3 X. ^# G/ D2 P* _/ d  |B.永不过期
* {( F" }( P9 B/ h& g, {$ K0 \C.cookie无法设置' |8 B+ @. [2 F7 n1 i
D.在浏览器会话结束时过期& o' Q& T( O! K3 i4 G
E.只在脚本没有产生服务器端session的情况下过期
2 O' J6 g# j$ E" K- a) H& m) @$ H1 H
% B. F  l0 s% E1 W5 V* q2 q4 R+ n2 e8 U  _8 r, Y' H
7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
% l' j1 J8 S# j; E: h: [B.Array, m9 V- r% M6 b' G: F6 P
C.一个提示3 d' q) ?. a0 H: \1 ]- t
D.phpgreat  i/ x& N/ Q6 w& r. m# ?
E.greatphp% w4 S- h2 q+ X% B; b
: k4 _$ b5 b' p  Q3 ^
( }6 q' W5 x  v$ S: N4 M
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
0 H6 }+ w9 o6 _( Q6 Z
# F( o# p& P- o) Y: I- gA.这两个是明文传输,之后的信息加密传输
0 U* Q3 U' S( p4 }2 ^; @B.加密传输# _$ p- A, U/ J  l- o
C.URL明文传输,查询字串加密传输2 F; l; T3 H: D! g
D.URL加密传输,查询字串明文传输( I, e' S4 v/ e+ O
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
, I0 l+ Y; R* P5 s8 l- B$ M' o6 |6 S9 ?' v  k1 ?

* l2 A2 z) A( }5 v# _( x. z9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
* r* M5 n0 P& K! a
6 Q2 c! L5 a; i7 ?/ {! W' zA.它们组成一个数组,存储在超级全局变量数组中
5 W; b: v% O4 M  W( HB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中6 T" o$ y0 I  U' ^% t" S! s$ Y% k' T
C.第二个元素将覆盖第一个元素
- t: m3 `' T5 X& j6 TD.第二个元素将自动被重命名2 ?: |1 k" p! x0 F
E.PHP输出一个警告" o% C) A# b+ K4 ^% \0 `! `; ]. E! E
1 Y; N; _) b0 b

- Z$ V; ]) i  A- T) Y  q10.如何把数组存储在cookie里?) g7 I1 X4 Y, _

& S8 v9 R% y! U5 N' A2 O' m  oA.给cookie名添加一对方括号[]
' j7 R* n& ]  R4 |. N$ C5 ?8 IB.使用implode函数/ z( |% t# j( N2 g* a  N. x
C.不可能,因为有容量限制0 U3 E  ?6 }/ j, g' b1 d1 D
D.使用serialize函数
+ S9 H3 E8 i# ]: [. m2 J. h% g5 z6 _E.给cookie名添加ARRAY关键词6 E* o( Q) g6 Q3 Z

6 w8 e- p7 }% Q) V- d0 e& ~, A1 N7 ?& @+ l
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.123456789105 O1 X9 h5 C1 \5 I* w  v2 [7 c) H0 s
B.1234567890
0 c/ o+ J* P: t# y4 `C.0123456789
: B: L* c" {3 E3 z% vD.什么都没有
/ S7 V1 v( y  h8 I2 DE.一个提示: r$ c! h: P9 M' o$ o  q$ B# _

% P( @/ ]9 ^( i) H# v, S' e; L  {
0 I! L/ j- j9 s( x$ f# y) q12.默认情况下,PHP把会话(session)数据存储在______里。
" K' d8 R" n5 R  |* Q! g
) M  E* f- g/ H0 o: j0 _A.文件系统; u+ ~/ O( ~& R; O0 i5 y: v
B.数据库
7 j" V3 a# U- ?3 r" I. U& uC.虚拟内容1 U7 }" v1 g4 L1 S+ `' x, ~
D.共享内存
, {+ V% X: h7 ~* U7 |: d6 CE.以上都不是# W& V/ L2 }1 `7 d: Z3 W
$ K! l" w' C& w9 N
/ u9 X: \$ @. M4 m# ?6 H% \- F; G
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
0 V& L  I: Z$ r$ g7 O" X
; U$ J1 _7 e: h) Q. K5 n& x  c9 LA.浏览器的程序出问题了# G. {- U& S7 \0 f/ G; e% G
B.客户端的时区设置不正确
8 P* U$ X/ J9 L" g4 G: DC.用户的杀毒软件阻止了所有安全的cookie1 X7 ]3 w1 j5 s# b; U
D.浏览器被设置为阻止任何cookie
$ F/ y5 ]* j% l! ^& r. I. n7 c$ G  DE.cookie里使用了非法的字符: f4 P! y6 r! g7 B0 X2 N0 d

; T( d: [; ^$ k+ x. ^* B, L7 \; ?1 u. ?$ h8 Q
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?. S+ a' g2 u$ i8 ~# y+ K

) e1 w5 V: U- {/ M/ gA.1440秒后  p3 |% W2 ~6 K9 h% m# i$ z; Q2 x
B.在session.gc_maxlifetime设置的时间过了后) N5 f% g7 y! v5 [. k# H( D9 Y5 C
C.除非手动删除,否则永不过期7 n$ b" Z  O% O
D.除非浏览器重启,否则永不过期5 H/ y) V: n- x3 d3 }- J, X$ X
E.以上都不对5 C+ o' P8 C) Y, \- `' k
. A2 B0 Z+ a4 A7 P
- J# w8 z. o6 b. Q  H. `
15.哪个函数能把换行转换成HTML标签<br />?
0 N# i& U0 T) \2 q* H( F" i- u* T' O
答案:____________# R0 G- K6 _( E/ w/ f! E$ h

. Z+ \* r1 ^2 I: g' Q+ Y
9 N7 \( S: s0 Z# q* [, b0 f1 {# m, T
答案速查; ]5 _0 r7 i0 _: K! k" G- Q
1:E, l6 e/ y0 b  N) H/ l& U7 K0 E: Y
2:setcookie/setrawcookie0 A% W' K& W8 P; z( K
3:B1 |; K  p+ g, ?8 l; B4 e
4:BD' O' H& z3 M6 q' U. b
5:BD
- E6 e/ q8 f1 Q" D  ]9 I) @6:D
, ~8 I& V6 X, _2 G7:A
& c/ N5 b$ e" i/ x4 Q7 R1 C8:B
) _& @+ D2 B0 `2 T9 k9 [9:C9 `" w7 M9 V& d. U* Q
10:B
4 j4 F+ R5 K: _8 j11:E
8 q# F% G8 X* Y% K12:A% }; }+ C+ K0 [: A2 U) I+ n4 ]
13:BD
( c% q( y! V) Y  {0 A. |* w  l0 V14:B
3 d6 S- ^. ]: j8 ]15:nl2br
" L. V7 Z. d# b$ U
9 l% r' |1 {. ], C" d5 a! u' `9 ~# T

; F$ ^0 e, [% J; ?: V; ?( W答案详解
" a6 Y) n; W1 u3 A6 H/ f% [" q* s! f& S7 L: u+ O
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。( G3 A7 D9 H0 X0 `$ ~- v6 |2 c& A

6 b/ u# _5 S- p$ }, s% q2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。3 O% @7 ]+ |" q+ T) b# L$ P2 j
; ]0 y: J2 H# }  u& @. L% T/ K
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
, T6 O# n& f$ ]. a7 G  ]7 g7 [1 p  H
/ h8 \6 c8 d$ h1 w8 g4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
1 @2 p3 g/ c/ C* P1 E1 F, ]( m3 h# ?0 Z0 W4 ^
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
% Z  {1 p1 @  L7 x7 l7 \
4 A8 w8 n# E, _6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
+ D6 k  ?0 z; n; T; |, O0 f9 @3 e1 J
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。. R9 v0 p; N5 n2 X5 A) j
- q7 P) n- V) R' P$ F7 t0 E
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
6 k9 T& t. P% \0 d
- T# P" |2 H1 D6 I9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。$ P$ d. F6 P( a% T. M% u( e
( B% K1 N+ G% u% Y. J0 ]; D# r, ]
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。- k+ N  l- ?+ j; i  I( J) }

: [! X7 {- k* c& ~; |2 k11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。+ y  D& ^1 I: G, A# I; m

5 @" K1 a* j. Y/ |) Q# @. K12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
- v6 G' x: @/ l0 b& Y7 P7 F1 e/ p& N( K: f
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。4 |- v! u9 W4 T6 Z+ a) U1 I( V

& A. z( e* i# H7 V4 S0 b6 m14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。/ I8 ]9 |$ I4 E5 g$ U6 f
! B8 r! M9 ^! d2 b
15.函数nl2br能实现这个功能。

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