返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。# E+ q% k( }" `" w5 D
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。6 _; {% f/ d; c
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。7 v& |; n8 a5 Z
& L( M( _3 _! U3 C9 H

8 T3 [, s, b& r( l: E7 R9 E' Q问题
8 F7 D2 Y* H- r# c8 n7 F$ E) W7 e$ r. b! Z3 m5 S8 m8 I
1.如何访问会话变量(session)?, [, c2 d$ m& k
, O" H6 H% p/ S. f. ?) e, v
A.通过$_GET0 Z/ Q; t* O; t5 r
B.通过$_POST
2 Y9 i; U' G) \5 VC.通过$_REQUEST- T' p1 @5 J7 A3 o% r1 C
D.通过全局变量
+ p/ _* E9 M( kE.以上都不对/ [" }* t! X6 n+ X% Y. t6 H
. ^. o! R) `5 r5 c

8 d7 B0 y' d6 O' \/ s2.哪个函数能让服务器输出如下header?  L; \; ?4 c! s: N) {9 E+ P' @
- L7 ?% f  b5 m( s
set-Cookie: foo=bar;" r8 i9 w9 Q' W9 V
# I6 ~7 r  U' P) W
答案:_______________
- r0 o$ c. A; o; l  }, p" U0 u- H" s, J2 h4 S2 H5 v. ^$ I
+ v2 ~7 t; p. R$ ~& ]: z
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?/ j2 ]6 M- G$ g% p0 }- ]

8 y4 ?3 z/ @# j3 a& u3 pA.通过HTTP_REMOTE_COOKIE访问8 G  C: x9 `, k& D) d! f
B.不可能7 ?% j$ m- Y4 X. h, _% A3 V" J
C.在调用setcookie()时设置一个不同的域名2 L* k! ?, F2 z' {( ?
D.向浏览器发送额外的请求: A' X$ w" I; f/ E& h' b0 X
E.使用Javascript,把cookie包含在URL中发送
2 f' k' P. j4 Q, m1 }/ }
! E" |1 D( Y) }) q( V, p1 _* F& r3 r) l5 Y
4.index.php脚本如何访问表单元素email的值?(双选)
7 H1 }# e, }6 A  W' X. H
. k/ W+ H5 \* o$ l<form action="index.php" method="post">
9 e+ |. I+ Q- Z2 Y5 D8 ?  J% W<input type="text" name="email"/>* Q  b/ N3 F1 J( I+ O' V+ j* F7 Y9 R
</form>1 `, {$ U  r- `! l* A* U. Y- t; E2 e
7 h. m$ ^- @3 D0 l1 |" r$ Q+ y6 }
A.$_GET[‘email’]
0 e. m1 {9 b2 BB.$_POST[‘email’]
* _* X7 J9 J; x! L9 DC.$_SESSION[‘text’]
1 n. I) Z7 _/ ?$ H5 TD.$_REQUEST[‘email’]
  s& M( ]: l9 }, B2 O' dE.$_POST[‘text’]5 w5 Q! m& Q3 }% d: ]1 D
9 m% d4 Z* w7 j' M( I

3 j# Q; L0 Z; M: U% i' \& z5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
9 P1 K  T) @! gB.没有变化9 |8 d0 W- K% t* M# \/ c
C.在浏览器上打印该字符串时,尖括号是可见的7 b/ J: ^6 U" S9 ~
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见7 O& w4 o! B! ]  s8 }
E.由于调用了htmlentities(),字符串会被销毁
! ?1 }0 U* Y% K! Q( x
) L. U* _) f. U% c1 Y, e. t  l
5 d, r1 U8 `0 ?6 ]+ T7 O6.如果不给cookie设置过期时间会怎么样?9 V6 ?0 K: ~+ Z% g$ c; G1 b5 h
) B7 ?( T' X7 Y7 y
A.立刻过期- \5 ^1 X  F2 [+ T! K& o
B.永不过期
6 V$ l% L( d. h6 [C.cookie无法设置, V/ s, g; ]  {. G
D.在浏览器会话结束时过期
8 _4 ^! O8 S# j0 W2 uE.只在脚本没有产生服务器端session的情况下过期2 }' a. f) G, O- O/ I

" M! A5 r# o6 y+ x  a* D  u; z. |- s  M
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.什么都没有  {$ E2 v4 b" N/ z; g9 h
B.Array
! E$ o/ Q( [: ]2 k5 k/ Q6 I! |C.一个提示
# u3 W" M. K# d! J6 m1 l8 ~D.phpgreat0 X. o3 k+ @' O) W
E.greatphp
- ^9 y/ U! `' u5 H# Q9 Q' x/ d* c$ |, c; W5 T4 K% D

5 q  Q  L+ Z) c8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?( r# u5 M* j+ }7 }& X- o

3 G1 N. ^2 ]* z5 MA.这两个是明文传输,之后的信息加密传输1 |6 b/ h* n- B8 J0 M, E
B.加密传输% z# R7 u. H* I$ k1 J
C.URL明文传输,查询字串加密传输( H3 O. n2 ?6 e, |
D.URL加密传输,查询字串明文传输( c/ D2 {- _. y. Q
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
$ Z- U% b. Z* S+ n% c0 H
9 X0 C6 P  O3 P$ P- D; s( f! L  U
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
0 l7 B8 y3 O8 |, o# p0 z9 {" ]
0 s: T$ h: t- ^A.它们组成一个数组,存储在超级全局变量数组中+ s3 U' g1 ?! T1 D) O$ O4 o
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
; s! @+ t8 a% k  ~C.第二个元素将覆盖第一个元素
$ i  E( i6 p# ]. oD.第二个元素将自动被重命名% i! k) L% z7 W/ e) V$ E
E.PHP输出一个警告2 f, b" [; e5 B( I1 X

" X' j! X$ B9 E
% z9 _: E* X( c! P( y10.如何把数组存储在cookie里?  j8 D' r2 A: {2 P) d5 W6 Y
3 T) d1 @) f) Z% W# y
A.给cookie名添加一对方括号[]
8 }6 y, U6 z& \  Q1 ~# }/ e0 CB.使用implode函数: c6 Q% z; \5 l5 s$ o! ]0 ?
C.不可能,因为有容量限制5 s; J9 M. J4 F
D.使用serialize函数' L- p0 x/ t% t; E) R/ y
E.给cookie名添加ARRAY关键词9 K. W# i$ N/ Q- ^+ X# X  h* v

+ i0 s$ P$ k+ N9 y% I3 D- D* Z" X  r: A$ U' K" v" y+ M" Z
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
! z% v0 t& \* Z7 m8 u& ?* SB.1234567890) Z6 |; I$ |4 b" L9 S5 d2 x4 u
C.0123456789
7 h! h9 j1 y- t) k5 d& MD.什么都没有
4 C" C- ]3 f5 YE.一个提示1 q& ^; a, d* R6 S

/ M% k: @- p8 F  I
: t7 N1 y! J4 w# o  w9 ]12.默认情况下,PHP把会话(session)数据存储在______里。; i9 m" @' h6 A5 Q* `9 o7 t' Z

9 b  v! w8 X, B, k/ FA.文件系统
& F/ P3 n; K+ q' `9 Y+ ?  kB.数据库
" g& P9 V+ J1 R! p# J4 DC.虚拟内容
! J5 S6 K  w7 E# q' pD.共享内存
* x2 Y! s$ P: }% @) x- G4 g6 oE.以上都不是
5 o- n' m6 b& _1 e1 t1 E4 y$ z! I: Y
* f9 ~5 X1 R' {; J5 g5 G9 `
) S5 K6 n# S8 l7 [13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选): \! E( \' a6 c  d+ {1 ]3 U
5 t' X' m5 K# o
A.浏览器的程序出问题了
! ^, W  @) }0 {: iB.客户端的时区设置不正确
. M# W1 d) o( @C.用户的杀毒软件阻止了所有安全的cookie
  \; Q) _+ Y8 N/ e8 i9 fD.浏览器被设置为阻止任何cookie
4 |+ u4 w# C! e% UE.cookie里使用了非法的字符3 p: \, O8 i6 _  g! h9 d
/ n% l: M, J' q1 ~6 x! C

& R/ V$ k2 f2 g5 f" ]% A14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
# Y8 w& I: x+ x* k: E2 M& y6 k& Z
! R+ d( H& q  ]. X2 n* ]A.1440秒后
7 K) B4 t8 W7 P; }! ~0 QB.在session.gc_maxlifetime设置的时间过了后" W' X$ A5 n2 }0 b8 ^/ k: p" D5 S
C.除非手动删除,否则永不过期
4 ]0 V0 c: I8 x# T% h; A" B/ L/ yD.除非浏览器重启,否则永不过期, ~# P/ Q3 p* t# ]
E.以上都不对4 f+ J, m' r0 x4 [
0 E/ Z: U5 `8 ^' x2 g
7 c# p  @3 Y0 g# A0 d1 l2 m
15.哪个函数能把换行转换成HTML标签<br />?% N% K8 i& A: ^2 J5 z" A
* ^7 Q& Y9 d) {+ o2 h
答案:____________
% ^2 z, G' O2 E  @
7 K1 u8 o6 t1 [3 k4 _1 W: O1 K( ], U

$ }' j, d, f7 I4 k) Q5 `答案速查0 G9 ]- H% W' a
1:E, \5 f+ o; \: L: w  R, a- F  S
2:setcookie/setrawcookie
, a+ w, x  c" a- u  f- |% J% `3:B1 m, G: S: j: J5 V! I5 B
4:BD$ ?  j% E7 f5 Z0 J" E5 @
5:BD
2 p7 O: Q+ D7 X0 \  y6:D3 M/ S; ?- ]! t; N$ A
7:A
' x, n. B9 G0 k- f( Y1 Q2 P8:B" f. @  ?( y; n
9:C: Q' O6 k$ K# U! B4 o$ z" P$ F1 P. k$ T
10:B
$ @! W/ x! y% \% S; O! I+ m, O/ ~, D11:E
; R/ B# c* d; N. O1 }; }12:A
1 u  L$ a0 e) t8 Z& Y13:BD
8 E/ _0 {1 L( q14:B
6 Y$ W% ]- p/ V) f5 E3 y. H. u/ [: P15:nl2br
+ a' X2 N0 V% ~) W( \: K
% k/ H, r1 V( {; `+ D/ {
1 F; O; j; T  E  y, n& u! L3 H8 G# S4 T- G2 O
答案详解; O$ s6 G! ^/ r1 h3 _7 h6 |3 D- x

; J% b% A& s. ~# x' h1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。6 v# x& N$ ^2 ^% |

/ c1 T$ R: F. n0 u* f: f7 M* a2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
5 h- Q0 @8 d6 O. \) q1 a1 L5 d
: B$ H6 }$ @9 H3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
& k$ v1 v3 l# [' ^1 R5 J: g  u1 y8 J' m" N" O2 i* a* w! k2 j
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
$ i3 z( a$ d" q8 ~5 \0 w( @5 r& R" ^$ c1 N2 ^: D
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
7 X% }0 V6 s# C/ r5 N  H1 W* [
0 l* l9 \( n& W* b5 o) r6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。; L, `; \1 G; V% i: b3 {% `( D' T

& B+ M8 U5 o" R* T$ \7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
5 I/ x2 \) l+ |$ Y: P! f: s$ Y4 Y# n% U3 }+ l& b, X8 f  j  b
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
9 q. P% E4 r! l3 w& \6 V3 p5 \9 G6 ?" f+ z# `
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
2 [; M% ~1 U4 d; U- C
- u5 ~* E5 ^) k10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。3 q( E" a1 p, l
& e1 K  q$ }! H3 M/ w
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。7 _, ]# J1 o- {6 D. Y

- \! ?. p: d! A12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
, j5 }2 k- t8 V6 I8 d) I
$ ?. _# d: S1 ]13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。) d. U2 j+ J5 }; f1 G+ [. }& P$ A
  r$ h9 T6 @4 z. {# `
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。# r  j1 }2 u0 b. K( g8 P( p5 ^: }
3 c/ m; Q5 ~0 `' Z
15.函数nl2br能实现这个功能。

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