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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
  X$ A. Y0 v4 N  C( \与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
' L( }- e4 S1 Y5 }一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。9 C0 i0 ?( k0 r) e

# U' n! \$ E. X
  \. e. g! D. q; T# F1 S问题/ P, n& V  j& c( n4 [. v, H1 V! `

7 G  Z/ U0 L6 J$ O$ n# Z. R1.如何访问会话变量(session)?
& [0 u5 |8 d4 F, m
  d9 y/ O; ^/ n9 ^& sA.通过$_GET
5 L# T# Q9 c# H5 ]B.通过$_POST( u% X( U1 g& c3 g0 s8 u/ l  `
C.通过$_REQUEST
& P  v1 D! H7 u( gD.通过全局变量: E: l3 ^$ ?8 h' p
E.以上都不对; P6 `4 f) {: E) m; E: c
( G  o$ q: X+ u% q3 {* S" P

2 n, \/ J/ E$ m+ z/ j$ w2.哪个函数能让服务器输出如下header?5 X* m# [4 ^) g! r* h* ?

; @: L, f; [0 p( T2 w( vset-Cookie: foo=bar;% G4 _/ k/ W+ a2 w0 ~

, K$ C2 a! f: P+ V& v6 E答案:_______________
  C7 d! O7 E! X0 _% q; R$ k7 d) t! q4 Q& @# h! c
: q1 n5 D9 q; M! Z2 k- v5 G- J3 L
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
* h2 }9 Z8 c/ m2 g* M, `( D6 y% i
A.通过HTTP_REMOTE_COOKIE访问
, J  |/ _4 e. ]# h- BB.不可能
% I5 e2 H" M+ u+ g. }5 n1 qC.在调用setcookie()时设置一个不同的域名
8 n% d  U, L8 ~! m' C! yD.向浏览器发送额外的请求$ z8 k2 \! z9 N
E.使用Javascript,把cookie包含在URL中发送& v6 P1 r' l% g9 m2 u
0 [+ y2 |& K5 c9 p7 q
9 x4 S  A' p6 l$ F% ~/ A: i3 W. P
4.index.php脚本如何访问表单元素email的值?(双选)
: B' \& ]6 C: u& E; A
; g( E/ n- R% z9 v/ O' }6 n<form action="index.php" method="post">1 a% `2 @1 x( H3 n0 {! T
<input type="text" name="email"/>
$ F* I8 I5 ^- m3 X/ m: h</form>) w9 t" p# [; A- M2 l8 [
. }6 q& E. f, F0 M0 q+ \
A.$_GET[‘email’]
6 E) K: u& O( a# G/ |B.$_POST[‘email’]
/ m( h9 f$ L% ~( d8 U) o/ v" b* E% IC.$_SESSION[‘text’]
6 H8 p5 y  _. |/ F6 y  L, JD.$_REQUEST[‘email’]1 m* P: X1 [" r2 g/ E
E.$_POST[‘text’]; }0 {9 j. U7 ?2 @

4 r+ U  w) |" {" _2 `. P" K) k) j: u* K- m: y
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长  t; d2 D2 u0 V
B.没有变化9 w- {1 w  E- M0 b8 r* p" n
C.在浏览器上打印该字符串时,尖括号是可见的* O' ]: q/ I1 E3 e
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见7 F5 D# R6 o, c% r/ V7 S5 T) \& f  t
E.由于调用了htmlentities(),字符串会被销毁
0 ?6 D" M. J6 p2 }$ Q+ ]4 Z! \- Q  n4 ^

+ a* n. m" q: V: G/ @6.如果不给cookie设置过期时间会怎么样?3 C8 g5 u' G/ h0 m1 z  K5 b
( q* {3 p2 \- e! S
A.立刻过期4 H( f, X' R( Z0 s* Y5 x2 W
B.永不过期- I& d- g1 c( w( n* C
C.cookie无法设置
: {- I! i% R, e8 ^" j+ z0 KD.在浏览器会话结束时过期6 C" d, c% \; ]: N
E.只在脚本没有产生服务器端session的情况下过期
& P* T7 c( S2 f, v; T# r7 m6 c' e  }5 x0 e- `

5 |5 H# j  W) X" ]4 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.什么都没有& e- I( n8 ~5 f, B+ D
B.Array9 c9 R6 h% ^' d- X+ A- Y
C.一个提示7 G6 r7 U$ v  [( |. G7 |$ s
D.phpgreat' ~$ i3 V) m  `8 z/ e1 r
E.greatphp+ f# t" i0 @4 j- b

- ]# u+ F* L6 H( c4 V; Y# G/ p: k3 p  i' N0 L' D
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?) R% w3 Y5 C3 j
7 \5 e* `& Q/ L9 `( w7 R
A.这两个是明文传输,之后的信息加密传输7 S. N( E, X4 a# R. r. L
B.加密传输8 m# i0 l, u! U: e5 G* |
C.URL明文传输,查询字串加密传输
- m8 n% |/ z" d5 s) ~& }D.URL加密传输,查询字串明文传输
, g# \3 e4 j2 X9 d' X* W. DE.为确保加密,查询字串将转换为header,夹在POST信息中传输* Z1 [3 J1 r+ n+ A* D7 P1 S
- s& h6 ?5 J+ f  M3 g. |% d% K2 X
5 s9 h6 `$ n: [+ e5 f0 h( N
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
- @1 A  Z& c/ r1 J& m" ^+ o9 w5 |( B9 J: U  i; ?) m
A.它们组成一个数组,存储在超级全局变量数组中
0 T. b) r# ]( X6 qB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中* V9 D0 }9 b  Q( ~# D* k- P
C.第二个元素将覆盖第一个元素: ^1 v6 O( E* ^  c0 L
D.第二个元素将自动被重命名' ~) E, K/ C8 O8 ]1 {3 `. w
E.PHP输出一个警告
  M  t% |' t9 W. E% W- b- `7 l. }! j; z' k; x
. k  p% }7 u+ }3 c( `* x
10.如何把数组存储在cookie里?
! u# Q9 K* N& |0 n" W; I! g% |: ~& y6 p9 Y7 r; C/ _
A.给cookie名添加一对方括号[]
) |! d* [3 A& Z6 iB.使用implode函数
: X. ]$ }6 P& v  @8 hC.不可能,因为有容量限制
1 a- E( q* d7 @1 M' OD.使用serialize函数
% ~2 M$ X/ H6 yE.给cookie名添加ARRAY关键词
6 \6 v( W0 v7 D: H- K% J
. D! c4 k6 H9 p0 t' L6 f: O& X+ |4 C9 v/ _1 J
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
6 b( S3 A4 g. ?5 z1 D) cB.12345678909 l3 K& e8 K6 k8 m$ R
C.0123456789
  |' N% E1 F- W* c5 b. tD.什么都没有
8 F. H# o" D7 x) zE.一个提示) j; N* a+ D4 e1 |5 s; T  ~+ B

* j5 \! e0 j+ w6 K; s7 t# a2 j1 K5 Z' X9 A" C
12.默认情况下,PHP把会话(session)数据存储在______里。
* N; a$ K+ R& E3 ]3 t9 Q  D' c3 R+ O  x# R. I/ ~; e* E/ a0 ]
A.文件系统
4 D6 g# G3 L, m5 C8 NB.数据库
! _$ @7 Y; |1 G$ Q+ x/ w' p8 n' z# cC.虚拟内容
$ I) I/ t) {/ g1 K2 tD.共享内存% q# v4 x, s# A
E.以上都不是- M; j* B1 D! r* i' {+ i! J

( S" y- [; z/ F/ q3 G
- @) |  S9 w- ^* V13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
  [8 A! N8 r' f6 \+ o! T; y$ }9 n1 G# R9 Q, c3 j7 e; I
A.浏览器的程序出问题了" n$ @6 L- J+ Q4 e4 O2 ~
B.客户端的时区设置不正确3 M6 w- o! D# v4 F9 m3 M7 D
C.用户的杀毒软件阻止了所有安全的cookie
5 _( Y  t; E1 I. s7 TD.浏览器被设置为阻止任何cookie
( `$ d5 m: I% ^4 H- R" I' SE.cookie里使用了非法的字符
: X# [+ d& G- b9 X
9 W9 p# T) B0 s. o% h9 S8 ^: J. _' L
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
7 p; Q1 L5 z# x7 i- |  i7 Q! ~4 H( ~( ?
A.1440秒后7 n' K: ]! E. z* E* I) F8 N0 T
B.在session.gc_maxlifetime设置的时间过了后+ f; j) }& B' ^- x
C.除非手动删除,否则永不过期
' ], E2 S4 P+ N& `7 ED.除非浏览器重启,否则永不过期, V* U  `( p* V, P/ W( B6 h8 @
E.以上都不对
) z3 B* A$ Q' Q: m+ N
2 x9 ~% F# u6 u3 \. t& t
0 {  S1 K8 t) r+ ^3 C15.哪个函数能把换行转换成HTML标签<br />?3 k+ m; y$ M# |& ?2 V, e, |# t

8 u6 s2 k  @7 F7 G3 Z答案:____________8 y& h: }) S; j7 R! `7 h
- z2 i2 h- w/ Z0 L

2 J& m! Y$ o% z" ~# z/ [. g. Q& _: B  l2 X3 i
答案速查
& ]8 y. S4 Q& _" K/ D1:E
6 F- A' H% k6 ]# F( v2 h2:setcookie/setrawcookie; q2 u9 }- d) e. U5 r
3:B
* _7 k; ~9 z2 T7 q* M3 n" g. ?. ?) t* |4:BD6 s* \/ n3 W: M! c5 D
5:BD/ |6 w* `" r/ }# A0 f. f/ n
6:D
% Z7 p% t. T: e7 k7:A
- v/ l, v( p% A) _4 r8:B# B* Z1 `, n5 `- D
9:C
2 E! L+ Z6 F% ?& `10:B
& v9 g/ i% T) j7 \; c( |5 B11:E
5 V, S3 X& w/ \3 E6 u12:A
$ @2 {6 j. W( Y/ \/ S13:BD
* u6 ?7 w" X) h$ r& F14:B
# Z$ T$ ~! ], a15:nl2br
! C0 ~5 i  ?5 U& D7 h9 o0 C8 S, e7 }" r) n- Y

1 G! a1 w( G  ?4 U" u- y1 K4 A
答案详解
+ Z( z/ s, A- d2 f/ i- w
( ]  U+ m6 k. o9 U1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
# W" w5 i. d. I$ C' w+ I4 t0 y
5 ?. I! ?3 S5 U9 P, X- }% K2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
+ [" Z& _, Y* l* Y! A+ `6 W2 c3 l) {$ t# y' U$ [( h! u- Z
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。) m9 Q4 U1 c( s# l
! A/ I- c) j) S& {3 n+ k
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
0 z5 X* W' B; E5 P# ^! q( j. b
& @- P) S9 ]' K9 i5 u: Z5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。6 X3 X& R# I7 Q1 p

+ B* Z( T) F! s- v! w! a4 M* K& z9 @6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。) E; Z7 k$ U6 U+ K2 C! t2 o

/ M+ P; t8 i3 y2 R" X! O* {5 C7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
4 N, \8 q' L( T: c5 b$ B
; r. L9 [( c: J4 S8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。8 I- J  v& p7 b

+ F, L8 L) L7 d9 W9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
( ~: C1 [& T' n
* g  c- e0 D  m% ]. c10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
: T' |; F! g" F) E( |
$ |* X0 x& R  l9 O. b2 f  [11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
6 C6 L3 k0 x' X
; l4 ^* U7 o5 L12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。1 M, J; y8 \8 }  b4 X* t/ P; N
  }' B  w4 D; J5 o3 K
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
  P9 h: d! z2 \0 w$ T3 k9 ~+ V0 l* T: h
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
3 O' s$ f7 S7 c% X! y/ i3 ~. Z) S7 V& u% a1 t; O
15.函数nl2br能实现这个功能。

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