返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
# n2 m, E1 ?5 ?$ T& h. Q与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。1 e2 |4 S+ P" i% J
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
. h4 w. @- H* }/ V" w( G
0 L1 F+ P8 q2 N0 `7 B/ s6 I* e+ t2 H& T* A3 S
问题
3 P8 L6 h! i, ]3 a$ Q, `
/ J% O% E, C6 D1.如何访问会话变量(session)?! Y2 E, g# @0 V

, G) ?( u2 E, Z: g: ]$ kA.通过$_GET: j2 S, s2 A: C! _% d9 D# s6 ~
B.通过$_POST
) K+ t, j' g3 {2 Y: QC.通过$_REQUEST& @3 {% j- `( c; J
D.通过全局变量+ K! Z/ }) t/ |0 l. F# _/ @" }5 ^
E.以上都不对
( w' A1 X& S  l- ?* D
3 A( S' ]/ b; w) x/ w+ ]' h/ f5 T- Q6 L4 Q& G, i
2.哪个函数能让服务器输出如下header?! Z/ k- O! j9 M) c
6 K  y0 V! _% u9 a
set-Cookie: foo=bar;
# \8 R; W2 b1 |+ ]$ \" N% ]5 ?% z, D" Y$ J/ d$ O9 ^: @
答案:_______________3 c. ?4 q$ T! g6 c& a# u& p. n
& E  l+ Q5 Y. ~
/ N2 `8 s  E( y+ f8 i: I5 P2 u
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?  r0 l* B# \9 x6 s9 g: Z# f
9 |) u; X1 g/ E- u- I3 G% i0 F
A.通过HTTP_REMOTE_COOKIE访问
- b5 I8 e; a" d/ B% }B.不可能, w; h/ M- R) E9 P" p( C
C.在调用setcookie()时设置一个不同的域名
2 h2 I& p# o8 @- s; CD.向浏览器发送额外的请求
9 P9 S& j. K7 \' uE.使用Javascript,把cookie包含在URL中发送
2 U" X8 N5 ^/ b) h: w% ]/ i' Y! c4 D6 P( l* o9 r  U5 C: X

8 d  L8 {1 i+ L2 z4.index.php脚本如何访问表单元素email的值?(双选)) ~4 j+ F; T$ \, \( N3 k

9 h5 c* n0 K/ ^9 l& d<form action="index.php" method="post">2 O) L/ n' `. a4 V1 _
<input type="text" name="email"/>9 F. c! R) g% v3 d
</form>4 w8 U, J& D  {
3 l3 n$ U* [5 m& I( n  k
A.$_GET[‘email’]
* ?' k. D" ^& N+ f6 f& vB.$_POST[‘email’]
9 N9 b, D3 b; }  E8 q1 jC.$_SESSION[‘text’]2 v! r- D! ]. ?2 K# o/ k$ `
D.$_REQUEST[‘email’]7 ?) L- V, |- {. C( R" ^; W0 o$ q3 T
E.$_POST[‘text’], Z! e" l$ s) P; a& G

' v/ F. e9 d8 s0 |; W: o- N
: v! d% S# p  B/ {7 c! Z5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长/ D; f. |( K/ Z
B.没有变化: F, E* D7 Z+ `9 b) M
C.在浏览器上打印该字符串时,尖括号是可见的9 a4 \( n" l8 r7 ^2 k
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见0 Q% w1 c1 G) d. {# g
E.由于调用了htmlentities(),字符串会被销毁* I0 q: F. S0 \" S/ \# g$ U- p, r
1 ~; j) I& o) E& N/ \8 k2 m6 m

; {+ w/ L' A1 R4 X+ q6.如果不给cookie设置过期时间会怎么样?
5 J9 v7 ~$ U$ M: z/ {- f- G' W
$ m- u/ g9 D+ B3 e. c3 ^A.立刻过期
* B& C. L* n- i9 kB.永不过期0 M5 |$ g% ]+ H% M
C.cookie无法设置
' p( i7 l& q# X, P! v# q: S/ S$ HD.在浏览器会话结束时过期
& z, b7 s1 F2 X$ E+ L7 _& S$ lE.只在脚本没有产生服务器端session的情况下过期; [" h5 a* _" `

  E( B" w. P8 {1 ^
+ [% Y+ |( D* j& q% C7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
" c" D, t' ]: i" dB.Array' ?! H3 s/ B7 E
C.一个提示0 a8 y  `( j& |* T
D.phpgreat( c1 g7 Z* Y7 K- L& |, a
E.greatphp
3 s7 B( [2 A, h: W: S& e6 S' S& Q4 u8 j5 J3 _9 ]' z/ B. v, H( @
$ b: \7 z, J% g5 Z! M- z
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?0 _3 l5 ?; v4 Y/ m
/ H( ?2 x; X! j5 j# S$ A8 I
A.这两个是明文传输,之后的信息加密传输6 v3 Z8 @8 L2 ]+ ?+ `5 v
B.加密传输
, `# k$ {8 M, RC.URL明文传输,查询字串加密传输
7 L' x* a7 u: v% G7 F! qD.URL加密传输,查询字串明文传输4 u! i* `9 I# q& ~5 @
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
2 j3 ~4 O1 m# K: B7 {
. [1 \1 o! P1 |3 X
1 _' N' \# u, Y/ x, T/ Y. d9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?' Y+ ]! b/ E' K( ~" |) K5 [

6 D. Q- K* f* V1 ?% u* d$ j6 lA.它们组成一个数组,存储在超级全局变量数组中9 y9 q8 ]& C( P7 C- S1 ^
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中% m% g( l9 ]( i# `1 M
C.第二个元素将覆盖第一个元素
1 j9 [. K$ C+ o1 W' O5 d8 DD.第二个元素将自动被重命名8 j9 y  i& E$ Y: K
E.PHP输出一个警告7 k$ @3 G" }# }8 ?' I

* l% R! i, q) C- X7 V3 @- w. v; p% y7 _
10.如何把数组存储在cookie里?# H' H6 l( K. I. Q& |: F$ G  C
3 R+ B+ h: @. a7 U' q; K$ Z- S- o: ~
A.给cookie名添加一对方括号[]: T( W# P, N! S4 d$ t
B.使用implode函数
# G9 a0 N4 ?( u; O0 Z9 lC.不可能,因为有容量限制/ ?0 t5 R+ N* ?; I3 N' p
D.使用serialize函数8 @$ s1 C' F+ i! n/ ?
E.给cookie名添加ARRAY关键词$ }; u- y8 D3 K. K) U' C

% m- c  K: v, y
, ^2 m3 J) Y' i6 Z  P; i11.以下脚本输出什么?

  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; s  _% X/ R4 F, v9 s+ V1 D) C% e
B.1234567890
( Z  M# e' m$ u- g! FC.01234567895 v: f( T" L7 H! o5 c
D.什么都没有+ \/ R, V5 H- Q& R0 T
E.一个提示; @4 _) t3 a) _+ \
& ^; [. Y' g5 C# g( N3 G, p/ t
/ H1 b2 Y- b% ]; g1 O) [3 [2 G
12.默认情况下,PHP把会话(session)数据存储在______里。, M6 i; ?% X9 \8 w9 r* ?; e/ _! Q3 E
: \  ^/ F) @8 \! [5 D" e" X
A.文件系统
5 e6 P9 Z9 o" a. O+ W- p0 BB.数据库  I+ {! g5 `" [! i7 t* n; r7 k
C.虚拟内容
! E( y1 c% _# y4 c; j: g2 r" |D.共享内存  |% ]; ~3 N5 X0 i
E.以上都不是
- ?& `; Q! I7 v
3 k# |9 q: o% ?+ V" ~/ S& ^3 e% J
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)- ^% j# o& o. x' X9 c, a* ^+ T

" R0 w8 L8 ]/ u; B) H( ~A.浏览器的程序出问题了
& Q0 M" h8 R' x/ bB.客户端的时区设置不正确% |' g7 Q: R  M5 P
C.用户的杀毒软件阻止了所有安全的cookie
# q' h, j" o% hD.浏览器被设置为阻止任何cookie
1 H8 p3 a0 p5 Y1 h. cE.cookie里使用了非法的字符
  l( U5 g; S/ p5 D: d* V3 m1 \) C; T+ N7 w9 r3 B" ~* q
: P) e: q  H6 z) ^: G; b  o' m
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
2 [5 _4 M8 c8 c2 m
( W/ T" |" E. v3 I& M- oA.1440秒后
) A- L1 e* R- e+ f( L$ zB.在session.gc_maxlifetime设置的时间过了后
; V2 i9 b# _7 q% G, G. XC.除非手动删除,否则永不过期
/ O0 [) }$ U: M. k7 K2 b3 \( M, WD.除非浏览器重启,否则永不过期
! @, H/ G: E# n. jE.以上都不对: U( b! R+ I# `8 J

) ?5 ?, g" ~$ g& J; Z: `; d$ F5 w, y' w; Q1 {
15.哪个函数能把换行转换成HTML标签<br />?( r; X5 z! l3 p. \( Q5 x
% s9 \# Z, M7 u. i" j8 r
答案:____________
, R5 b4 V; u/ W$ _
! E. U2 B' @# ]* o4 Z+ v4 t! j- \$ W
- J+ D9 g$ N+ Y% y; I
答案速查# E+ @3 j& z5 l8 }" Z8 W
1:E! K8 Q* w& z$ J2 `6 U
2:setcookie/setrawcookie
6 r* F: r; B- v3:B' f) l3 ]# Q9 h+ ~! {: ?6 H7 R
4:BD
4 @, U% ]" e' A: J5:BD' }; V9 h7 I7 \1 Q9 L0 ]
6:D( V/ a) V$ }! u3 n% `
7:A  E( U2 T3 J2 Y, q  J
8:B
5 D+ M  H" \- X$ C9:C3 w0 w, U5 \. a" B2 a
10:B
9 y% a6 T" Y" Y: w# [: B11:E7 c8 x! l5 Z0 v9 E1 y; p/ t
12:A4 ]0 j# G1 y# t) P
13:BD
4 e8 e, J0 u# m14:B6 h2 Y  j% C/ H; [$ U& ?5 J: b5 V
15:nl2br
' c$ f* p' g& v+ l$ U' K
' `- s/ p; J/ W$ W5 E
8 N0 a) I$ v9 t0 d" I: N) t/ H6 B- c
1 c1 O/ Z* U$ s1 ]6 b3 G) |答案详解
3 i$ {. T. q" q& k% Z
% Z9 ^* Y- p) W: T" \, N1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
. @: ]3 ^# }% K' t; Z* p1 [8 z/ B$ k% V& F# N( ~# l! x! r5 s% @
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。* X' y$ V9 I3 ^: O6 C, z5 C

! ^+ u- y1 `' P' r- I6 s3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。6 W( o( n- {: i9 B' ?
0 h! ~9 P: _! |. _) G. C4 M+ e) A
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。# H( x& z7 E2 J; A& Z, g

+ |6 t; S3 s; r- j/ T4 o6 L5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
2 {3 t" \, Q  V! r( i2 a7 i$ F9 J( Q4 D% B% q3 G
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
5 Z3 s" \9 l4 V5 x8 l+ g' h, {" K( v& s2 z+ W
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。. z: O. l4 Q/ e! ^# {/ v+ A
% |4 X7 c$ [6 Q( T  J
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
! n2 M/ D# e( b! X; S* b( P5 C* I3 I" i1 G+ K# t/ q8 T
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。- r. v3 L! O8 s: g, L
5 N5 n" ~$ b9 b0 K& M: t
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
; @0 C, ], v2 R6 I. f: s6 H' R
+ o) X' M& E6 A; l* E11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。) [: e, k3 C: D. v3 ?+ r
  R6 X- D2 e& z% C6 a
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。* e6 ]8 g) c) P" ]( _7 J; R
" o8 b5 `$ ^: D5 _
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
+ o8 K, _/ S0 }: b+ U% N( o" v& d1 C. ^# p: a* }! w% r7 i! E
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
: c: K. i" O$ U- n& `' o. ]5 F7 A+ `9 q% ^. g6 [
15.函数nl2br能实现这个功能。

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