Board logo

标题: [Zend权威认证试题讲解]第三章 Web开发中的PHP [打印本页]

作者: admin    时间: 2008-4-4 02:25     标题: [Zend权威认证试题讲解]第三章 Web开发中的PHP

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。: f* ~: ^6 X1 K! W2 a* q, s! l
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。2 x6 ~9 J: R4 r& b* R/ O0 r6 D
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
2 r, C4 ?: v7 K7 F) v8 j& {9 t% N7 v0 a+ Q9 D8 _3 u, k
  A1 T7 A, @( `, `
问题
! O9 R" }! ?; \" B9 B
# c2 G6 g9 H% i2 }% ^' E# f: q1.如何访问会话变量(session)?
; j7 _, R% {6 S' e5 B+ A; A, B
4 n1 u/ Z) E& F6 y1 lA.通过$_GET
) d6 \6 Q: n, l$ QB.通过$_POST
$ D# `3 D) s$ w- D; qC.通过$_REQUEST% T0 D7 F& {0 B
D.通过全局变量/ X8 H7 P6 e4 h3 ?- ]+ V6 a! i, V, L
E.以上都不对
$ n6 [; [+ l( K8 q
3 t& f4 X! N3 B$ |& B- L7 ]) s3 p1 x9 X2 J1 ^5 Z
2.哪个函数能让服务器输出如下header?
% M$ t, ?+ @4 `1 x* G4 _/ ]4 e; a+ ~. b
set-Cookie: foo=bar;- ?6 y3 _1 u; P2 u; Z/ i9 j$ \/ q

( W, v' h0 i( O3 q答案:_______________
; M3 G" x$ u/ W0 `! a8 ]; N: Y7 C' |( q! g, w% ^, }* u& K7 q

* r) F5 v: |; J9 L5 N' x5 R4 E" ~3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- v5 Z+ J2 w: V9 t8 ^% G5 K3 B0 P
1 t! h: z' f  U& A) L0 oA.通过HTTP_REMOTE_COOKIE访问' ~4 K* B" `9 Z7 F
B.不可能1 y, e3 L8 E1 B! P+ @. i
C.在调用setcookie()时设置一个不同的域名& b! o$ t0 ~. c# i+ `
D.向浏览器发送额外的请求
/ w! [9 u/ q. lE.使用Javascript,把cookie包含在URL中发送
/ E* O) {9 L0 U" @7 y/ x- _1 \1 Q4 ~/ `* p
& W& j. \( _/ i( \; c9 S
4.index.php脚本如何访问表单元素email的值?(双选)# e9 W6 B' O3 Q1 ~6 ^7 O
) U! A% F2 q. [- i+ q
<form action="index.php" method="post">
6 L2 K( E! L" \! [8 a( u. S<input type="text" name="email"/>) p% t3 X3 Y: n* m$ m- O
</form>
' P  l4 B  [& c) ]; F! X! u6 u8 F" N
A.$_GET[‘email’]! H* ~3 [4 Z# q0 ~4 Y
B.$_POST[‘email’]9 u+ s. [9 D! ^5 J. a. `
C.$_SESSION[‘text’]1 g* }9 m+ f( e& u6 a3 y/ Y
D.$_REQUEST[‘email’]( f9 I9 u2 E" u) X; _5 d6 Y- l  K
E.$_POST[‘text’]
* W0 r$ I, l; |1 V: H% t0 y# V7 M+ v8 ^. J4 \9 l  C; @* Q; M* k: I

: K5 O( q+ o; S  M% e2 D6 O: v5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
7 g) B1 |% }* j, q- X% BB.没有变化. a+ i- }- D3 x6 f
C.在浏览器上打印该字符串时,尖括号是可见的
! b2 |/ W  w: q9 r) @) A' pD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见6 B! s' Z2 \" ~. {2 ]. P
E.由于调用了htmlentities(),字符串会被销毁" ?& w' N/ Y. l% {2 @/ g
" X  Z5 m  x8 X) g) N2 L4 l

7 O/ R$ u  C* U; Q2 @" }8 w! Q7 _6.如果不给cookie设置过期时间会怎么样?
' [& H$ G* R7 k: }& x* H  N5 G2 j
: H, y- P5 ?; }# `A.立刻过期
4 l* R0 `# j  U9 N$ n' O+ }1 KB.永不过期
* a! o% H5 {, F7 ~; [- b8 q  V6 dC.cookie无法设置
! r3 ~9 u, _( }9 z# ^D.在浏览器会话结束时过期2 t2 e4 ?( I* d
E.只在脚本没有产生服务器端session的情况下过期
+ B$ V# ~6 l' M2 m$ w/ J7 b) M
+ M$ L1 J! k. e; x& I
- p  t% p# Z1 T$ {( p' ^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.什么都没有
' Q- `. |0 b. A5 W, QB.Array
( W0 Y* N/ t" O: pC.一个提示
8 q3 T: L! x2 s# QD.phpgreat
, Q! U" d4 ~! oE.greatphp# Y1 o9 ~, p; W! d4 r, Y9 L

3 X! Q; R0 {/ V! w4 P8 ?4 c; |6 c9 B" q7 D+ N" q$ P
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
5 p/ z8 @2 }6 }- x( v$ _8 r, n& E* J& @" [
A.这两个是明文传输,之后的信息加密传输0 @- M6 p, k- Q1 u" o
B.加密传输
+ A3 w* C/ i5 i( z* JC.URL明文传输,查询字串加密传输8 v9 Q, d1 `7 x+ I1 `5 x/ @
D.URL加密传输,查询字串明文传输
! f4 t$ O( k9 ~3 CE.为确保加密,查询字串将转换为header,夹在POST信息中传输
! ^7 Q" R: h0 J7 i
" S% x8 Y/ N2 K+ A2 t* ?. R4 W3 ]4 T9 H3 p+ F/ D
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
6 ~; G0 ^! i4 T  l
( R1 E  E! e1 ^: V  L" |A.它们组成一个数组,存储在超级全局变量数组中
& h/ K! f( h# ?% b* CB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中' ~8 v% j+ U  N, s6 r9 f) c
C.第二个元素将覆盖第一个元素* u8 ?' Y6 ?8 q
D.第二个元素将自动被重命名
2 X8 f6 C: |# Y8 X9 h) z. A! i" wE.PHP输出一个警告) y' m8 O% j( i. u

' M4 p( }3 c1 f; b
$ C, X; h1 y# O) Y" B, F10.如何把数组存储在cookie里?% {: r1 `% W$ W' [9 x
6 J( l4 F* N7 P9 h3 y5 b% H, s, g
A.给cookie名添加一对方括号[], }. `/ w  a" [1 I( ?; z
B.使用implode函数8 Z* D; f! A2 `! @& K: M5 F
C.不可能,因为有容量限制; e* K  a' W* O" P; g
D.使用serialize函数1 [4 S- g- a% a) V5 r
E.给cookie名添加ARRAY关键词9 ]# _' C0 b3 ]/ Q
9 u* a$ {/ G5 {

, p! S# _) l4 }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.123456789104 p6 t" b0 Q$ j) Q# H
B.1234567890+ h; ]! m, Q. g+ V
C.0123456789  h' ?/ E3 D3 \/ {  d+ O- U
D.什么都没有
, a. K7 Z0 _# qE.一个提示
) U% H$ `! D- X1 y- P
( J( F0 A* R; [6 k: e! E. n) E
" i# k* h1 P, z  n: }' {$ j12.默认情况下,PHP把会话(session)数据存储在______里。0 s' m/ g$ x9 O

$ k7 f% Z. _! P: I, H' Z" b$ pA.文件系统& x. p: }$ v& }# j6 N
B.数据库/ [4 L2 _, o9 R- x5 U' ?% @7 L
C.虚拟内容
" c9 Q* N- e' AD.共享内存: R" M' Y; i1 M0 `2 u- Q6 {
E.以上都不是3 K2 m. k# j# o4 m. n8 Q$ P2 L
( e% V$ f+ P5 Q5 K: s
  w6 @1 s6 Q) \
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
* _& j! H; D% @' @" ]% i% O* ~3 ~7 ~" I
A.浏览器的程序出问题了
. D; L5 t2 H! s+ c' {  _3 k3 A3 f0 VB.客户端的时区设置不正确
2 v9 r- H- c! IC.用户的杀毒软件阻止了所有安全的cookie; U  R# q7 S4 p; W# _) t7 t! l
D.浏览器被设置为阻止任何cookie7 p4 Y/ M" m" I& r
E.cookie里使用了非法的字符4 w2 N2 k  B( f; e0 a+ K
# z7 p$ P* B& V8 L" C. u2 K

  ?, J( D, ?% |% C9 s* X# [14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
" c3 J3 [& n4 O' ?+ d5 I
* @4 E+ A7 @, @, B$ I. VA.1440秒后
/ Z$ t1 P8 a$ u, FB.在session.gc_maxlifetime设置的时间过了后/ D9 p) a& `, B( c+ L" \  ~
C.除非手动删除,否则永不过期3 L' O; f0 J5 ~' s
D.除非浏览器重启,否则永不过期$ Z2 @, A( m) D' i+ B5 u
E.以上都不对2 C7 A. v( z6 i' k9 F7 x

) G+ \1 ?; c+ @6 O1 O4 T& J
, Q/ ]7 d( _8 S: q/ n% J3 W15.哪个函数能把换行转换成HTML标签<br />?
; S8 _6 X8 Z( l& C" e! g+ B
  N. q5 {: W3 y9 s# x0 e3 \, l答案:____________/ z% j- A- s. k
( i5 o! J: B1 U" y: N
- I( e' Z6 h3 e

" u- w3 D& b4 ?) ]答案速查0 z' o" x7 J8 G
1:E% |% f/ h' g* Q; s/ t
2:setcookie/setrawcookie, B3 j! F* }0 Z5 F! G8 w
3:B
0 [( {/ ^& Z4 ~6 h4:BD8 a; K7 m& H$ |3 k5 |# W. M) U
5:BD
; g7 j8 U' O9 K; P7 R& T. t7 F# ]; e% u6:D! E: {2 N  M# K5 J" Y% H
7:A6 Q& v! s& w5 W: f1 o
8:B
+ f3 M/ X: D: V* C9:C
" L/ y4 W' ]+ {, v) M: \! J10:B
- q& [; c: @: S# T/ l11:E
4 w2 j+ ^. e. a$ S0 t12:A! Y) p5 P8 w# n, {; f( t
13:BD
& G, l8 S2 t! w% n4 L14:B2 ^' |) G6 G, o4 l) B. i6 j
15:nl2br  M" ~; M4 ?$ `; y7 q+ A0 y( t: S( M
% [/ }2 |, r% B5 G
6 l( @1 L8 u+ p( m9 d+ S
* |, d- Y% D% s
答案详解4 O- L: a9 P" J3 P. h% x
5 `1 `7 q( m# G( z( W" |$ F
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。3 d  `1 n. t! u( [6 A7 v4 z) y# q; Q
6 e$ K: x" D: A3 I# t% r* `' Z
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。- l. Y4 q9 g4 O0 C
1 ]' l. J- X5 Y7 k1 H6 }& M
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。* D4 ^! Q5 d& [- ^$ T6 X0 E

0 h' i2 S! F+ x7 ?- f& @) b/ B' t4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! C4 c3 a# P2 u' w  o* k) a4 v
( T1 P, Y% I$ j; n8 w; l3 t6 V5 c. y
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。. Z5 h* I! ~3 q; ]. s8 j. u

0 s& d9 I  ?) l% E# y$ t$ H6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。6 m9 X& c# l' C" C5 A8 c

& I. E! t2 t$ v! z7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。6 [5 ?3 M% W' \

, u/ e2 n" S' T+ Q/ }8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
* K! X  l9 L  |. y, m: f
4 ]' k2 f! p: T# q9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
4 z: T( W$ x# B
4 H1 v" h" y' [- e2 V/ ]" Y10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
2 M+ m% m7 l& T/ W& g7 M! k
8 K% O9 D5 ~6 ~. ?4 A11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
8 c( X8 q8 Y- `, I4 |+ C
8 k5 u4 M% s4 z3 z. w9 V' }  j12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
. H! e' a; r1 z1 j; ~/ K0 K# v  N( n' C' R+ r' w/ B
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。+ T5 [( l5 R# x, \& R6 S0 P

; [# f& u( l2 k( j  y3 B14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
) [- K. e  g( d* H: b' h" y6 `4 ?/ j: M1 `; I9 U( @/ ^5 J
15.函数nl2br能实现这个功能。




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2