Board logo

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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。* k* _4 t* E# s, v, q' V$ p( c
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
; ]! O# \" q- j1 U+ M2 E6 r一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
% Y; |" ?4 B. j& [
) f: a/ C* k' w. R% r
9 D  L: A* }' y问题
0 ~/ g6 t  I1 E7 L* k- C! V* D0 }' ~/ X6 r7 W0 L
1.如何访问会话变量(session)?4 z! Q* c3 B5 P1 v/ u) l* c

1 |0 c# J) S; @  E/ dA.通过$_GET  |( g9 M3 i- s2 N) h8 E
B.通过$_POST( b" f8 G: k; A9 ?
C.通过$_REQUEST
; F( M% J0 ]0 U# Q2 K' AD.通过全局变量3 ?4 |- [1 O# p% q% g+ K$ i
E.以上都不对
; z3 {( J6 W$ ]3 Z1 K+ m( l$ h! B, J- J! h% q- V3 g2 Q0 P

1 y  F: k8 A% b) Y2.哪个函数能让服务器输出如下header?
* J. s9 b' ]  R6 i+ S9 Z
+ a1 H( }! E# G( O5 @+ J4 Q) Wset-Cookie: foo=bar;2 _! c1 r1 l$ m4 b3 C- f% j
* x4 a) p1 |1 e' ?, J9 r, w
答案:_______________
4 P% q' Z' M2 v1 N& V, J* O1 A# C( h! f
4 @7 i8 i8 ]) G7 Z( N4 u4 o
  F' |8 `  y7 W3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?( P# U$ L, _3 |7 S" L# m
7 \3 x% C0 V/ j2 C! s% u! ]
A.通过HTTP_REMOTE_COOKIE访问
/ C9 ]# m; t5 u; fB.不可能
5 i' r. L7 P; B( c4 |C.在调用setcookie()时设置一个不同的域名
, X3 P: `2 ]0 fD.向浏览器发送额外的请求" \9 i* J; O, y) B9 `0 R& `( l
E.使用Javascript,把cookie包含在URL中发送
7 o# b. n- ~0 y- l( H4 B( X$ b
( Q2 N8 v! j6 X2 d+ |) A5 D- G5 I- ]6 y8 T; K$ o6 Q
4.index.php脚本如何访问表单元素email的值?(双选)
; G5 p  R+ t7 `: t5 F0 y1 Q  m6 {5 r6 \; f
<form action="index.php" method="post">- @/ P( ~+ r5 E! A/ j8 @4 Z/ G
<input type="text" name="email"/>. ]$ P+ V) K/ T' B7 ~4 u
</form>% Z& h" D" k( Y, R

' \" W3 r9 `8 l% O6 u1 zA.$_GET[‘email’]
: W4 Q, ?# K% e! ]% r% q; OB.$_POST[‘email’]
" M% _4 d1 |( w& O# UC.$_SESSION[‘text’]
6 Y% p6 X' O" e" U  pD.$_REQUEST[‘email’]+ _/ m) f4 k. C; c+ u) S: N( ~7 w; d
E.$_POST[‘text’]
  p. O1 m3 q5 ]" }8 n: T* C% a( @9 V. W
9 K0 @" n; i, L' y
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
' R/ G$ [- P( b* r7 r; eB.没有变化( D6 q; ?; X6 H- ?2 q) |) R
C.在浏览器上打印该字符串时,尖括号是可见的
* {) X' @4 f0 Z9 i8 ?+ GD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见. F$ G( ^0 ?/ }: k
E.由于调用了htmlentities(),字符串会被销毁- Q- q! W: Q, U# i5 p4 I4 _
" B$ }" p* q' f1 T3 t

3 P4 T2 N; w7 i# p6.如果不给cookie设置过期时间会怎么样?
# e' A( ?" F2 Z- k7 I
# u6 `; I$ v9 n* O( {0 ^; ~A.立刻过期- ?( }) a8 e9 K/ v( E3 a
B.永不过期
4 l" d% s" V; \/ d0 K: y. t3 rC.cookie无法设置" |) J( q  H( U8 ]" N' |, \
D.在浏览器会话结束时过期9 c0 c; c$ v; l3 p7 \
E.只在脚本没有产生服务器端session的情况下过期4 C! M& M* ~5 }- W  P
5 |. s9 i/ J9 M6 y

% U; `7 g' X0 U) Z2 @% F- u6 R7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有, I  U8 M# x/ R, R8 k3 C2 H* n
B.Array
5 Y  C$ ]' J: I1 v4 {: X1 \- E/ T: q) m( rC.一个提示
6 Q9 z* ?0 p( s9 `( M* zD.phpgreat
" b5 I$ Q5 k) y2 tE.greatphp
. I. d$ `3 B7 e- O2 u/ s; B
9 B9 o' M  S% O' x
. D# B4 m/ ]  A, N8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
) U3 {7 n7 B3 |+ l" _+ j. Y  d
$ F( R/ K% t: Q- Y- b  zA.这两个是明文传输,之后的信息加密传输
1 y9 Y9 l% z  P6 [) S+ U1 c. dB.加密传输
; M' l/ V' b/ L3 Y4 F* {; vC.URL明文传输,查询字串加密传输7 n) Q  c' p, v# q8 s, `5 f0 `
D.URL加密传输,查询字串明文传输) i$ r* E0 [% t& V/ ^+ ~
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
  w. E" T: ]% t: z% z5 u' [, l
' E; Q( a2 D9 E# Y0 T( {" Q  R8 C( a8 S* N' J, h
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
& I! B) P. C9 W/ B( O6 c
5 _5 ^9 p& J2 N3 D& yA.它们组成一个数组,存储在超级全局变量数组中1 b# ]" j9 K+ Y+ v# s
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中, F; u& Y  x  d: B; O# c7 ^# `
C.第二个元素将覆盖第一个元素
4 W$ g, Q$ n& p' UD.第二个元素将自动被重命名0 h9 u4 ?5 X: O5 X, _$ \
E.PHP输出一个警告
# y! s2 g0 r/ a4 P- d- s9 W
9 m$ S5 k! d/ y8 v( b. E$ K8 T- R' @0 l. G) y
10.如何把数组存储在cookie里?
# r! g, p' J& U* z  B* [1 e8 O( r9 \2 Q
A.给cookie名添加一对方括号[]/ H# ^2 Q/ W5 F# D4 a
B.使用implode函数
( d$ T1 `; G$ R) @0 ]C.不可能,因为有容量限制7 h0 S" O# A4 q
D.使用serialize函数
, g& t* g  Q5 i- p3 R: O8 VE.给cookie名添加ARRAY关键词
# B8 O0 E: `* s8 @2 m
( p! ?9 U$ m- l0 q7 m5 |! l3 j' u' u# N% J" L  S
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/ ]0 ]8 T( W% H0 G
B.12345678908 \0 K3 z0 o/ D; l  p
C.0123456789
7 w0 d" Q; U9 e& J5 t4 E* o! P$ {D.什么都没有
; G3 y( ?0 g+ t9 ME.一个提示9 Y1 d4 j4 R- D2 ~! ~) b. Y/ f* P
8 i% d' ?8 h7 b
4 B$ u/ x' I* a
12.默认情况下,PHP把会话(session)数据存储在______里。* i& y; b& x3 u
* M$ D+ ^& Z3 N# W6 c( y
A.文件系统
) H( E! a0 @+ c1 K& kB.数据库
2 }: f4 S6 \: }) ~0 eC.虚拟内容2 E2 n/ K! }6 }# O. r7 K* b% Y
D.共享内存1 v; @; d2 p. i1 Y& {7 M+ c
E.以上都不是/ ?- t- ^) C. \4 k* E, C$ f

# Y* Y' `/ a  Z2 ?& K. u) E, R8 Y, H* _( Q9 b7 Y
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
" b3 [1 R0 m( ^, D" Q; G8 ^7 s3 p% p# Z+ e8 R/ A  ?) v" f+ d1 E2 B
A.浏览器的程序出问题了
( a  K2 P$ L2 ]B.客户端的时区设置不正确
% W' |! W8 O0 K: }2 ~& q! G0 sC.用户的杀毒软件阻止了所有安全的cookie
! Z- H1 J, X  XD.浏览器被设置为阻止任何cookie. h5 a$ U4 M5 M. m
E.cookie里使用了非法的字符" K9 m# D+ k, T( I+ D. W" |  K, _+ b
$ _( f9 n! P; `% @6 G

! h+ Z; Z% N) Q5 y14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?8 b7 ?2 ^; e  x. z
# V9 b% z0 y% x
A.1440秒后
% A7 P; H( D8 k( Z3 jB.在session.gc_maxlifetime设置的时间过了后  t* m! g+ _" z% p
C.除非手动删除,否则永不过期* X: S: Y0 x2 E# ~7 r1 Q* q- E
D.除非浏览器重启,否则永不过期
( G2 l# E- E% V% C- |8 G$ yE.以上都不对
. x1 B  B+ r9 T: {3 W! @" e  E  z7 ?! z# s1 R" M
" o3 e% \1 Z1 i- q3 j
15.哪个函数能把换行转换成HTML标签<br />?
/ |3 z  n( i. ~: }3 C) z' J! _  u- g! I/ W4 }& a! u
答案:____________5 B* b& c7 l/ u9 T! R

: L4 g5 Z0 z2 n5 A+ t! k2 ]. j6 X5 X- y1 o; H( F4 W2 K
- B# g  J0 |* J" Y+ J; c7 K
答案速查3 Y7 n0 B. i; Z8 J2 t! w  b
1:E
# D+ ^2 A9 J- o1 m1 i$ F( P$ B2:setcookie/setrawcookie
/ H5 W8 M9 y& V3 p+ M# y3:B6 J/ g0 [% d) ]+ {0 o! `$ |/ R
4:BD9 @+ M$ g6 H. T: k3 D+ q
5:BD
# w" y- T5 L/ H0 ^0 T6:D
) z$ D$ m+ z0 u: P) K7:A/ o/ M5 J6 A! Y" w. s' \
8:B
/ Q* T6 r0 m8 c( ]5 V% b: N& o7 ^" P2 u+ C9:C  g" |  O9 j- {  o3 t
10:B
) n9 A4 n$ u3 M; {5 L' x, R& x11:E! z: N& c+ B1 @( u- U: N2 ?
12:A
2 c5 R, T& ^$ n3 l13:BD7 x$ ?5 M) p3 E2 M9 r; ^
14:B" @$ {" x( ~4 t( l0 X+ q! ?& o
15:nl2br7 w( ]$ j* F5 T4 Q4 a
3 s: l4 j( S- O& x& u/ S0 h
- S+ h4 M0 e* A' R

! \) A; g# V) k- P7 s, {: b答案详解. r% N! Y' g+ S  i

' H: x$ @* i/ T1 ~1 {5 J! M4 [1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。: n+ ^: e9 v+ {: t

/ _" g3 A8 J/ `- @. i# a3 \( q  U2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。; L7 _4 c' E5 u

$ G$ g1 b/ A: E. ]3 W* Z0 v3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
8 H3 \, o8 }1 T0 H- N; I8 ]* t. @, M! h2 b" q7 J3 C
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。5 C# f* `5 Q4 @$ U2 @% L9 G& U

: {% B; }/ j( _$ \, a7 `9 `5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
4 a! ~; y2 T- N1 f$ g& F
8 A" W! _. j. }4 g4 _1 l" F0 c" @6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
" _1 z% p2 C4 m  @6 R6 e+ u) A2 W# r/ l) w
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
; O7 d$ X; E! y8 C1 K
! _3 d. Q- J3 n2 }; f2 n+ Q8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。# ]/ p; {$ L7 Q

6 d6 O4 z; k& }4 Z+ c) J9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。  `9 w7 g2 ^+ x! r4 O  _

2 M- E8 v5 I; H  r10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
7 j$ ~' Z+ w% d/ n! i( y8 \' X2 g+ J+ J& R5 U" T# G0 h; e
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。: y- E  X$ E* q3 b
/ \) D  E$ f: |) m; X. p
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
# @7 I& h& E8 i- w, A$ }6 O; ?/ c% a6 K- E% d* }) l4 g
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
* \  V% B( j% E% |7 A5 z. g5 q: b: P$ z% A! d
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。% @  ?0 G8 S: a' R6 m9 B% o
( D' x& v! T$ K2 z4 ?
15.函数nl2br能实现这个功能。




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