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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。( D" o1 I% C( @
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。" G' d9 S; }" v5 C' i5 u/ S+ v
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
# Z% f/ s' R. S" W* D% q0 |! G2 P) w/ u6 L/ Y* j  D# v7 |
( q+ j: E/ k6 ]6 _. q3 G  I
问题6 d# @8 |( m, G3 d2 [+ {$ p8 g7 [7 m
3 O1 c, R. n% M3 r
1.如何访问会话变量(session)?
% R2 F% g& J' u9 c. ?' ?
7 @8 _2 L+ j# @& K. t5 q8 z7 c0 aA.通过$_GET* L, m+ D, ~4 X/ |/ i7 {
B.通过$_POST( w& E9 y. _8 W" h1 A
C.通过$_REQUEST
" t$ R& v: N, S$ @" \0 JD.通过全局变量6 ~7 R4 w2 b- q+ |/ s$ q$ S
E.以上都不对
- D3 U5 Q2 W) s$ n# T  J' X0 C9 O
( }; L% F% l+ D% o
2.哪个函数能让服务器输出如下header?
6 \  o$ c7 r. j4 @& t( Q
+ D4 c0 v5 t: t; Jset-Cookie: foo=bar;" c6 {) f$ L& f7 [; z% Q

9 j6 T) o& l9 p( X% L+ q答案:_______________
) x9 S. `/ {! F9 G  G( \( j7 {. s5 y7 y. z, q1 m- f$ s% q
* x3 T; P' y6 Y, b2 a0 E
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?, [- _! n9 J0 d, F/ \' o* O2 m4 K
0 @4 y0 ]; \3 w1 B: ~
A.通过HTTP_REMOTE_COOKIE访问
% p& ?! N0 |& MB.不可能
: W( Q4 W( F6 u" m: |C.在调用setcookie()时设置一个不同的域名
+ c4 d" t7 U8 {  j: ]% dD.向浏览器发送额外的请求" [- U- r7 a# o" b7 B, R7 ~
E.使用Javascript,把cookie包含在URL中发送$ k. }; ]# R* ~7 r4 R
+ O+ r) E$ ~$ B* ]: i; g. |

; U) Y5 C% R& G0 c; [# X" Q4.index.php脚本如何访问表单元素email的值?(双选)
4 o9 @- M. R1 i; f# V2 G- V  c. W6 Y& u- t, F& q+ U" v
<form action="index.php" method="post">& u: i  j& I9 j- B
<input type="text" name="email"/>
1 e, h  X4 Q' x0 b( B4 T</form>
. I( \4 V% ?% L( P; Z( b
2 I, t1 }5 _* u6 X- iA.$_GET[‘email’]  G+ w3 X% U8 w
B.$_POST[‘email’]" g  |" Q; L9 g5 [$ M+ n+ k" R
C.$_SESSION[‘text’]
5 q, `$ Z1 H  AD.$_REQUEST[‘email’]. |0 o- F9 `' _# f0 H
E.$_POST[‘text’]
9 ?0 d' t8 ^, N2 s/ _3 `7 X' N. e+ m) L* P" {* U6 t4 g

' _/ S+ s; h* `5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长# `/ r. b3 J  Y% e
B.没有变化
2 M* ^8 F) r; o" \C.在浏览器上打印该字符串时,尖括号是可见的7 P1 T" f5 W7 t5 d2 G( [/ C$ f7 C
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
$ P& \' u% |; W3 Y& u: V2 U2 wE.由于调用了htmlentities(),字符串会被销毁
: S: I- ]; ?0 p9 i5 S1 f4 p! S" N" `3 A# W7 l, U3 A* z4 S

- _. P5 A% x: W0 O( d4 K6.如果不给cookie设置过期时间会怎么样?6 `( D( G( f- ^% P1 J/ m; h

0 s- ~, R+ e* V" V9 J. O  j8 G# jA.立刻过期: t- }# g7 M1 H$ H3 h6 T, x
B.永不过期
1 R6 I  b, `' S/ e$ x3 QC.cookie无法设置
4 Y* j8 E' [7 BD.在浏览器会话结束时过期6 h) T6 V+ K* T$ |" i  t: \
E.只在脚本没有产生服务器端session的情况下过期- s) F9 a* \5 r
2 \. Z. x2 j7 S% g

1 T  @8 o, L4 O# j3 P  Z7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
; r5 ?% u$ ~7 N! }B.Array7 h4 g" M4 y* ]% v! S
C.一个提示
' F( O) W4 g* K2 N% n9 s2 C+ ED.phpgreat: E. h( R: }3 Y9 l: o8 o/ q
E.greatphp
' o) D' k  F( f9 c6 S9 n2 @1 B1 C2 e: Z/ p/ ?6 k

5 ]) y0 f2 a9 k- ]: c8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?! j$ z" g* P, I: G
9 Y& H3 s" K. K+ {: n1 |# }6 d$ s
A.这两个是明文传输,之后的信息加密传输
) J+ M, l$ X" l, J" IB.加密传输
/ y. q3 j; B" W* @# nC.URL明文传输,查询字串加密传输* K3 b& R  ^; P8 e
D.URL加密传输,查询字串明文传输
' s0 E2 d# X3 |1 eE.为确保加密,查询字串将转换为header,夹在POST信息中传输
2 w9 I# x) O2 p: I# ^" n1 d  U3 \8 p4 k5 f! k0 b

! C2 C# N* Z' O2 R2 l9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
3 l& B# B. H0 W1 E: U0 J! K9 q5 q$ q5 V
A.它们组成一个数组,存储在超级全局变量数组中5 B0 p! L. V) a0 e8 H
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
6 w: A0 _0 s8 S( S' ]/ Q/ DC.第二个元素将覆盖第一个元素
4 B5 k9 w  U% p# G. {: pD.第二个元素将自动被重命名
8 p) x- g0 M1 S2 o% VE.PHP输出一个警告% [5 y. F9 I5 u& @1 p8 _" F3 |
7 ?- [( N6 S" u  K5 d
/ w1 n. b: R- ?" x
10.如何把数组存储在cookie里?
4 @) t, {/ v1 h
6 j. |! w$ v3 {5 |' H) M) uA.给cookie名添加一对方括号[]7 D2 z0 Q, {, T7 I8 n5 J+ u
B.使用implode函数
5 k4 h5 v  H4 k8 Q. C, u, {8 fC.不可能,因为有容量限制
  Y4 Y& c' e1 d9 [D.使用serialize函数
4 [1 X4 I. {( A% v4 UE.给cookie名添加ARRAY关键词$ c; \4 o) y3 @/ e
7 v8 G- p+ _  F$ y' @! G3 w  ^4 d

- u6 d( r6 t9 Q11.以下脚本输出什么?

  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 I3 G2 r9 A4 u5 m
B.1234567890. g! x) @+ I' Y6 [
C.0123456789# u* R6 t* q; _: F9 H
D.什么都没有+ q) f( `# V9 k
E.一个提示
4 _0 a; M* w* R
% T- U3 n/ q6 C0 Y8 M4 N
- H+ a; [& V9 }6 v12.默认情况下,PHP把会话(session)数据存储在______里。
& D" E5 [) s/ J6 y* |# b+ v' |8 v( j3 A9 |" E" y$ u
A.文件系统7 c9 g" @! M0 i5 m+ m& w, w
B.数据库8 q$ ]& N' _) n) ^- t5 G) G, D  ?
C.虚拟内容
! V( S6 R9 |. [' g! tD.共享内存6 A6 k- V/ u( Z+ l* V. Z" L; b) U
E.以上都不是
& C4 _% v! d5 T0 ?8 Q
" U6 j- g1 Q* l& I" \  B$ w' l$ W# P  g  C9 ^8 s
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)3 k. r) n) X3 g

  R( M0 i/ h5 Z( K* O0 Q: SA.浏览器的程序出问题了% ~* |7 E% ?/ m6 N2 o2 X
B.客户端的时区设置不正确
& a2 H# e0 @# L; k2 Q; ZC.用户的杀毒软件阻止了所有安全的cookie
+ F1 t7 C# l" H, }D.浏览器被设置为阻止任何cookie3 x, S: Q& B1 i( Q/ b- t
E.cookie里使用了非法的字符8 d; [, ]  S" W" Z  e+ q

: i+ @$ z) N2 m! v' [% y- @, e( ~
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
* K! w( g3 ^3 ?4 T# C- l6 a2 x6 G2 x
A.1440秒后
+ k3 D1 z1 n" p( iB.在session.gc_maxlifetime设置的时间过了后
- g, V9 F1 Y& n3 f2 {8 WC.除非手动删除,否则永不过期
' `+ h9 B/ W: E7 f4 TD.除非浏览器重启,否则永不过期
2 s, n+ V2 V4 H2 A2 j1 K% F. k% }E.以上都不对
  _, d- {3 a9 Y1 W  n  Z6 K% Z, q  j) [4 B) u

/ c0 v! |6 s7 K7 Y$ q6 w4 v15.哪个函数能把换行转换成HTML标签<br />?5 f$ l; P" h# t
' m$ T/ q! g$ j# ?& ~3 d
答案:____________
* P( a4 m  n$ O6 G7 N. p5 ^) [; ]$ Q6 j2 n
2 n$ ?, }! X2 [

  Y" P% b. ~, }+ o. U* }1 a答案速查
/ W4 ]7 Z- R' g3 m& l) x( T1:E( }4 W* Q* O, O7 u4 \: _, ~; y
2:setcookie/setrawcookie
- X" g3 t) B% t# k9 I3:B( q8 |' a: [" o1 N; z; M
4:BD: e& L: D. e( F- R! _9 N! I7 `
5:BD
8 m4 P( O; G; _- b: B- w6 A# \+ M6:D
$ N; a# w3 T' Y! J9 x! H. X7:A
9 r5 m" h6 i' v' j0 Z" E8:B- J9 ]5 C" v/ t
9:C
9 u0 }% n; [6 ]5 s' E! l2 f" c, C10:B
6 X8 g' t) l" b4 I11:E
" [' \. p6 G4 a2 c  H( {3 Y12:A4 O2 X  w& s7 ?
13:BD
- F" s4 a: M. j! Y' M14:B3 E) W% |. s& C$ O5 G/ L% W; I, N
15:nl2br& T7 _) X- |2 T8 D& c& X
: \6 I# i- |; t9 a  x/ M6 H

/ f: E- _: C5 r7 ]) A% p: ^# w5 V" F- ~
答案详解
1 x8 T! r4 p; u& d1 N4 i" q( r" p% s6 l0 V' Y
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。- ]5 b! S, C) f, J' W" G% K6 c
# u  f8 K' v! A% e- b* k& b0 z
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。% g% d2 V6 x$ B7 U0 z. Q; X
$ `9 u# c' [' z8 \, u. C
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。) W' {& J5 w* F+ [4 @7 c/ U

  m; M/ b% W% C3 z4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。3 k5 Z3 S$ v( R/ o! N

) n% w+ X4 n8 ]5 V5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。: J6 k3 t/ M" N2 S2 s

, G. F# Q1 I) G$ l4 k3 r5 q6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。+ V3 l, K* g. t/ I7 u

+ O( G6 P/ n. N  r7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
) K3 Q* \: h! @% g6 `2 q. t
! {' t& `& @8 S+ i% a0 |- C  e  h8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
/ ]; A5 ~1 s, `. F5 k& M; O9 S5 {' d8 P0 y: O
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。" s$ W3 y/ V: g1 B

8 R  R6 t4 X6 E% j8 y10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。/ E- H0 b1 c4 E( k4 I

( V. H- D' ]. z9 z. M0 x11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
5 f; l1 t! G5 L; o* ~
) N* S4 C+ o3 x% t, D5 a12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
$ \4 G/ r+ p2 G& J  n* W5 m" D- {0 S( c1 |! \
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
' k( o/ x  g: r0 ]2 |9 T: q+ f# Z* B* B( o
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
9 q( f/ ]: A+ h  l( a4 y# Z! ^7 y; G- i3 t# m3 l3 W0 G) W
15.函数nl2br能实现这个功能。

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