Board logo

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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
1 S* U+ @* J/ E: n9 K与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
8 U$ t* w/ k, S% k' Z. B一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
" _( i7 t. E" Q+ F- P" E, B2 S: x( S3 _; r+ g3 @$ z* |

6 [. O9 H6 U0 j& s( |2 d1 I问题: b( I! X* t) q; _
- q5 Q" D: z* @' ^
1.如何访问会话变量(session)?
) e6 H* w  o: D2 }: p) d- w% u% y7 M/ p! R' q. k  W
A.通过$_GET
4 M, q7 e1 |6 W/ q! N, eB.通过$_POST
, q, U! ?! P) qC.通过$_REQUEST  M) Q- Z, `* ?' }' F5 ?
D.通过全局变量
3 X5 [; w5 N. w3 R3 B% eE.以上都不对5 f' ~$ O5 S6 w, Q% Y

, _: B  U6 D7 I6 r$ w' {5 q
" W' m8 O( ]. M5 c% s5 r+ a( P2.哪个函数能让服务器输出如下header?
9 a) I$ K& u3 ]4 b. i! f8 A, x6 a$ g4 Q$ p! u% l; j- X+ Y0 D
set-Cookie: foo=bar;7 H) N5 K% R# m

0 ]$ r, o5 t$ |2 u! V答案:_______________
  h$ v; s: H2 K! B) _* e& @4 D/ N# j: Z- I  Z; p& C2 x. [

+ ~$ e' T  L+ R+ t3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
8 D6 U: T# S5 G) [; S& @1 y
# C1 i. w2 ?$ N0 IA.通过HTTP_REMOTE_COOKIE访问+ h. o" _! U" O" v& {5 l* L
B.不可能% _  i( }% r8 d8 a# _
C.在调用setcookie()时设置一个不同的域名/ g6 g$ N+ v" z/ v# ?5 ~5 `: L
D.向浏览器发送额外的请求* v9 F. c- o, r0 O) {+ l
E.使用Javascript,把cookie包含在URL中发送% u: T+ m7 j# Z2 w( v

5 }+ i$ s" |9 C2 p& d6 Z  I, @. @7 i0 s9 u2 E
4.index.php脚本如何访问表单元素email的值?(双选)
  l" C) V- w3 ^/ n! F* g
+ S9 a, z- L' C; r+ P<form action="index.php" method="post">
2 Q9 x  X2 L3 [" c, D) V. i<input type="text" name="email"/>$ g! N* D& l5 P% G1 z
</form>' A" i) n4 [" _5 G2 Q) M" v) `6 t
- S1 T; n  F& k: U7 w1 k
A.$_GET[‘email’]& J" w+ j7 ?6 Z. @! K1 ?
B.$_POST[‘email’]
& b/ c& T1 q9 PC.$_SESSION[‘text’]6 T" \0 ?7 n; E
D.$_REQUEST[‘email’]9 D$ p3 A7 V- `: S( K0 g
E.$_POST[‘text’]. q! {& Y4 c/ N. H3 o# D, p
. H  p% k6 i! F9 x

( h3 k7 h1 y- _0 {, E/ L9 u  f5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
/ t' b& Q" Z$ |, N" Z1 t' @- Z" _* MB.没有变化) [% x% w2 n1 T2 v4 y3 P
C.在浏览器上打印该字符串时,尖括号是可见的+ t$ l* x- J1 i' ~3 w- a: i" o1 ~
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
& R8 N: g  H5 q3 {& h; CE.由于调用了htmlentities(),字符串会被销毁: h; X) g$ G( G+ e& G+ s1 ]3 Y9 X

. H. A- I/ F. ^! D
$ a* g1 h, G5 h7 m0 \6.如果不给cookie设置过期时间会怎么样?+ o/ S4 V, |% f$ w  {; |0 p6 {

9 m0 O/ Z; w7 s9 n2 PA.立刻过期
7 V, L0 F: T% [. zB.永不过期
0 ~* O: r1 n9 x9 \C.cookie无法设置
: @* }) F" t8 R* o/ uD.在浏览器会话结束时过期
* }7 E# m/ M" O1 LE.只在脚本没有产生服务器端session的情况下过期( l  J$ e: O' p& N/ ]* s

. g1 h. n+ W, V- H; R, o! |
4 z1 v) o& E, C, C( ~) U* P7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
" ?- S, |/ H6 X% c4 QB.Array( R4 Y4 w* h: G# H) d0 o' U5 Y
C.一个提示( C2 D& h2 L" k  f+ _' q( }  K, L# W+ a
D.phpgreat
7 ^! L1 R( B+ c1 C: d. @E.greatphp1 a% Y0 |3 S$ |7 B4 c/ z

1 `# m9 K# \: K, D! U: m3 @
! c: `! i/ w" W# p# e8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
6 P! k# w" ~9 l+ q7 n7 `6 d$ m! I/ _8 x8 f  K: n
A.这两个是明文传输,之后的信息加密传输
+ E9 ]! k$ A4 h7 H$ {" n" sB.加密传输$ [+ a' k( E9 ^& a
C.URL明文传输,查询字串加密传输
$ M3 q$ C8 l' R' |D.URL加密传输,查询字串明文传输2 _* Z3 ?: w" s4 S
E.为确保加密,查询字串将转换为header,夹在POST信息中传输% U4 w, W* k( q, c: ?

% l, h7 m1 n  I9 ?1 T" |% h, c5 L" |3 z
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?: ?9 j/ ?$ K* c" ?, ]) A
5 R: U4 m" g9 Z& [) R: r# C2 H
A.它们组成一个数组,存储在超级全局变量数组中9 z4 p2 o: |$ q
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中8 m$ p2 f: y$ L4 ]+ A
C.第二个元素将覆盖第一个元素
( @; j' Z3 Z# s3 n; LD.第二个元素将自动被重命名3 J, {" G) ~1 m& g+ K
E.PHP输出一个警告
7 H" z# ~  {; i7 Y$ X0 P. a5 a* k% y$ c& a9 |

# ?; `8 D, z1 i/ X6 o6 j/ b10.如何把数组存储在cookie里?
* v, q$ X! G( \( r) f8 K, D. U. l/ T2 B  y+ }) N
A.给cookie名添加一对方括号[]
4 k" H$ S2 n( ?+ X) @0 iB.使用implode函数: `+ D% U' }3 B& V0 B8 M
C.不可能,因为有容量限制
; ~; R' b1 y: P$ |" f  |% @D.使用serialize函数
8 a) n3 O6 c3 j( R! C0 `1 lE.给cookie名添加ARRAY关键词
( z* R0 b: \' i: [+ r: ?) X6 n5 Y: `$ K% C* G# Y- D
; G- A) S/ g: _: e3 U
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) G! b8 p1 |6 z
B.1234567890
1 B" @( m5 [% _- f+ C8 t7 CC.0123456789( M% E, {$ T, d3 a) }, X
D.什么都没有$ k- n( p( p& w  w+ s: M8 d* k
E.一个提示, Y. K# g( h( @: K9 [2 G
7 Q* J1 s% v: D' U& ?  n

0 L; V0 ]+ h4 J- T  N5 u5 ~( r12.默认情况下,PHP把会话(session)数据存储在______里。
9 c! S8 V0 ~1 v" }# N7 _7 [) P9 r2 [; V
A.文件系统0 K/ [" m- @* p. d3 }
B.数据库
# A, }6 h# f8 f4 n+ j8 S' @( SC.虚拟内容
% z0 Y' F  ~3 s( ]% r$ zD.共享内存
8 Z5 G0 [# r$ A- @$ e- t4 uE.以上都不是$ W* f9 d9 E4 j2 j7 }" w0 n
/ d6 I. |, z- Y$ l  J! @

; \4 z1 f! C2 m* e! ?/ q, ?) k13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)+ ^( p. [- Y# M/ g, ~% k5 \

/ ~3 M. @" x3 t+ }A.浏览器的程序出问题了
2 _! L' L0 {- n+ {5 BB.客户端的时区设置不正确
) c9 X0 ~' I# u9 z* PC.用户的杀毒软件阻止了所有安全的cookie
) h4 \+ k$ Q2 O! X) w8 C8 RD.浏览器被设置为阻止任何cookie
( m- S. I! _/ tE.cookie里使用了非法的字符
! p6 `% j; n1 x( I* `3 o$ a/ L, Y' s: U

3 r% Q; z9 n+ @) `14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
: S3 b) |3 B8 t& D: b1 {! M0 c$ }  L, S) }  L5 v) W* Q. a# }
A.1440秒后+ ~* l  K0 n5 G# L% c) I
B.在session.gc_maxlifetime设置的时间过了后
( r# K3 T# `: |" F  `C.除非手动删除,否则永不过期
$ D" g; w6 B3 K" d; tD.除非浏览器重启,否则永不过期
3 c% T& F- O0 h6 ^" G' w8 gE.以上都不对: Z, ^( R/ q  o- u1 {
& s3 z3 k! y6 ?8 j9 I* U' O7 x
& g, g$ m! S6 D) d. u1 w
15.哪个函数能把换行转换成HTML标签<br />?
( C" N$ [1 b; C6 P. ^9 {- T$ a; ]& n$ H
答案:____________
8 ~* e7 B+ `3 }
3 u$ ]* K  T' Y% f% @: g9 L
% m9 ~& U1 b; e5 d8 r0 P
6 @$ E$ D: z. S) f3 B% r7 f答案速查" l# K: s4 E7 z5 V4 Q
1:E8 w) C/ B- S3 v' r5 ?5 A  }6 w  s4 W; Z
2:setcookie/setrawcookie
$ C' P$ F4 a; Z3 a# M3:B- `7 G, h+ V# ^) u6 u
4:BD
( f' x5 ~0 c! i. o% ^! c2 y" d5:BD& p! ^8 O; D$ n% Q# g
6:D
0 A0 a* [% O) C- s$ O" u  L% A) ]7:A
  x% ?; ^( }4 B3 e5 U8 U! j7 s# n8:B
7 ^2 |+ S- b. s0 `: v7 F$ R. H" a9:C
# R+ N: X) d, o10:B
! f6 Y0 C. w! D! {* w' I( Z3 ]11:E% Q% p$ @7 O* I* t0 O% ]
12:A
4 w+ c" c) Y! b; A% R13:BD
* ^# T% s( K* o$ X14:B
2 a% d8 H7 z: ]/ G15:nl2br) I5 Z0 \! L( X; j( @

  z& Z: R) M. p5 f4 _, w( B6 h- J6 V  L: B# V1 f

5 ^0 D" c, ]" h4 e6 }: A! i答案详解- \! E5 `- w8 O0 v: Q
" G3 j/ H8 v1 `- |+ ?& T
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
: _, {8 W2 Y# K# g/ O! n5 y9 R0 {3 ]) R) {( ~. L/ r
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。/ v$ a! n2 X# [* x4 Z
9 D8 F5 b3 a- e4 H2 n
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。) u% O8 N' P9 b3 e+ \
! h! z4 S) k' v  i' ]
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
! Y) ~/ _' A+ X) ], k
; p. a( {% ?0 O0 a5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。' w6 n- Y, m5 g" X: T8 q: M0 C4 ]

4 q6 o5 @" Y  n, p( `+ Z% u6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
' _7 V* k8 G6 ]
2 u4 v$ {  m! L" s4 K- j4 V4 E7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
$ K; }* n: K* m; q1 V1 F% l5 S+ u: d6 _8 A% Q2 c
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
* S8 C9 W$ E  s/ h: a! J$ G
1 \3 A0 S, V1 t7 x# e9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。% o! M: o# \9 b6 G* ^; y: `

# W% C/ A( E  d, B& ~10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
$ n* g: o0 s- P7 M' l  W
# s  ]# Q. H: Y* R4 D8 _" N! \% z11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。  `9 b6 v* f2 z* v0 G0 t  `
. z3 z( ?/ c/ V7 X( z. g
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
) y# T$ c) U5 G. Q
- T6 d+ h/ a" D; {% \' S* g13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
1 {$ x0 ]+ ?+ O! ]6 f+ K( i' |* S' r: n; j8 S6 z
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
; Q1 j4 K6 s3 @- M. s2 z
" w1 R( l$ a! R7 K: B" @, Y/ P$ h+ w15.函数nl2br能实现这个功能。




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