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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
% C- P9 Z4 {, F. ^) ^与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。, c8 U+ M4 n) U$ e2 S
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。( Z; M  Q: y% V1 E4 h; j. t

. d) e/ j, z, L( N% [+ }& P/ M) {  ?# K, l
问题" a( {+ q' G1 x" U

/ e- ~: u3 k; [! m# O1.如何访问会话变量(session)?" B& Z/ f& b. ~3 ^3 n) b: t
: B7 S$ r1 K" ]8 M& a( Y6 a" H
A.通过$_GET
" q2 W0 C: K. i- t- r0 N$ m) uB.通过$_POST
5 x: x! R( w  }, [1 ~/ @! M# XC.通过$_REQUEST
6 X2 [! w% D( t9 J7 H. W% X0 qD.通过全局变量
! T% @! |, Q( z$ PE.以上都不对# z) y) K/ K& {4 S8 M* m5 y5 `
( w$ Y6 H1 u3 y
  N) R$ J5 ]8 j% N, L6 }% ~0 b
2.哪个函数能让服务器输出如下header?2 \% {# ]" i% b" _5 [$ c8 b
# @( E3 H+ N6 ]
set-Cookie: foo=bar;
4 [' [: h; ^& f( ~- V3 p* h9 f! W
: k7 m: n8 v7 }- u, n答案:_______________( B7 B! }& w3 R) A* B2 O; W- @' l
: n% O# W+ O+ g* P" [4 q" }1 z. F/ k
3 X# r2 a, _! l, K( Z
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
8 \$ ]: \+ r% l3 ?. _; @8 {$ ^  e  A/ ~$ n; f
A.通过HTTP_REMOTE_COOKIE访问2 u0 k2 c4 |* M- [" u
B.不可能
5 ?+ a7 [, G& Y$ XC.在调用setcookie()时设置一个不同的域名9 y, P* [2 q5 @7 }; a8 h$ ~" ]
D.向浏览器发送额外的请求- |. s" X3 [1 D1 o8 U) n' c
E.使用Javascript,把cookie包含在URL中发送/ J; |  F7 c7 i

) g3 N" v) j1 {+ x0 u" T- N9 W
- m0 \( R9 J: M4 P4.index.php脚本如何访问表单元素email的值?(双选)
2 j+ g! B8 L. D3 ~2 p$ f
! J  g, t7 Q7 y: _8 Q<form action="index.php" method="post">
9 H: I2 G0 f% x7 V' y<input type="text" name="email"/>
& n9 k+ P3 }$ L' t</form>
" M0 P2 C+ [  z. P* ?4 j! i! H4 \, x: X: W; A3 |  Q
A.$_GET[‘email’]  f7 ?, `( y( }; W  Z! A; s
B.$_POST[‘email’]( o1 L/ T7 S5 v  j2 P7 H. I4 R
C.$_SESSION[‘text’]
$ U* |8 r) {5 ^5 ^2 a7 H6 DD.$_REQUEST[‘email’]* r) [. w2 }% \; @) \" ], O
E.$_POST[‘text’]6 P1 `0 c* N, Z' f4 e
) M3 w8 v5 R: ~& I

' s1 W) ?# K* }$ c/ `5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
) ?: v9 o+ s" JB.没有变化5 `. J; G% L8 B2 a8 l) Q* I& N
C.在浏览器上打印该字符串时,尖括号是可见的5 Q2 \; N  x/ N7 f& v/ s
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见4 ~) r' Y" i1 t8 ]$ }
E.由于调用了htmlentities(),字符串会被销毁
: k% c5 X3 B# z8 a6 m& [7 D) o; X1 `, M: B$ @
& f1 m% z% g+ N- @4 n( F6 ?
6.如果不给cookie设置过期时间会怎么样?/ p; D3 n$ y0 ~
4 A- m3 j9 @0 k5 p* u. d9 r
A.立刻过期
/ b% ]+ V% H# T( p, DB.永不过期$ J2 R; z- }) ]' }. I+ ^. \! U
C.cookie无法设置: U2 A0 X. l' B, C
D.在浏览器会话结束时过期2 f$ T( _- M9 N
E.只在脚本没有产生服务器端session的情况下过期7 B( ?. h0 \9 p! {( N

; {% V6 ~% a5 t
. G5 B. a4 u8 M1 o* k7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
1 H! D/ ~8 h. X$ j" W: {1 ?6 s& wB.Array
9 z$ @4 i& k, H8 A' SC.一个提示) c7 y( q( B2 t: b* q" M
D.phpgreat6 s; {$ [: F) P, j* H$ Y. b6 ]
E.greatphp
& u* e8 ]: d  H. W" r0 Y- }$ ?2 f- o1 F9 m; i7 D
# M2 v7 ]2 f; |9 h, @- b& {
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?" G! ~) |( v# x2 Y1 L5 v
' e  J- K/ j/ P7 `4 c
A.这两个是明文传输,之后的信息加密传输: H6 ?. \& s5 P
B.加密传输' k9 ?) d9 H" x6 u
C.URL明文传输,查询字串加密传输
" B2 [+ |1 Z) f6 S( w# iD.URL加密传输,查询字串明文传输2 d& g: d6 j0 q  H( G- z8 }0 V
E.为确保加密,查询字串将转换为header,夹在POST信息中传输. D0 e% I3 C% c( ~4 n
/ @7 k4 d, h4 p3 N
4 v8 d6 h! K- ~' b, D# {. @& e* q
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?& e, I. M$ q( |% }2 O4 ?( a

& n) X4 N! {/ O6 z0 ^+ XA.它们组成一个数组,存储在超级全局变量数组中
0 Z9 U) V5 K6 X( cB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
0 s$ `: X4 W. D/ m& L% \, TC.第二个元素将覆盖第一个元素
% j" k5 A9 a) L1 D/ Y# cD.第二个元素将自动被重命名! n. d' y# X  a; A( E* ~5 v( L
E.PHP输出一个警告* a& R- c& Q, ^2 q$ H9 ~0 }
5 p' a: V% z6 v# F* C

$ T) L& \1 M$ x  E10.如何把数组存储在cookie里?. X4 O+ o+ o7 j6 y$ m

9 }9 P% K7 Y" c) pA.给cookie名添加一对方括号[]7 K$ a/ J' O8 o! Z7 H, ~3 S0 c
B.使用implode函数- T6 C4 e- x( P5 f2 x! z
C.不可能,因为有容量限制
& C) S4 C+ [' O: G, d0 N3 pD.使用serialize函数
" n8 e5 `% e% ^- h$ FE.给cookie名添加ARRAY关键词3 P/ Q5 B. d$ ]& h( @  q7 ]

4 a9 {6 Y) _; n& ^/ m5 h2 I  L5 P
; h& p* B4 s3 H3 W11.以下脚本输出什么?

  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
. m9 B# \8 Z, b  U4 [B.1234567890
1 a+ H3 a# j- O# }9 LC.0123456789
( g) D6 B: e# Y  nD.什么都没有
! E. n% `3 H, T4 Y: N* RE.一个提示
8 S3 v- q! B; |* y- \+ s/ x
$ J7 u6 J' F- o! E, ^9 U' k; t2 B
) @) q6 J" M# W  n, A12.默认情况下,PHP把会话(session)数据存储在______里。
7 z; }$ a+ P( {( }/ {( f' ~! B; K. m! A
A.文件系统# l0 M- h6 A# n$ J: C" }6 k
B.数据库
7 t9 T3 V( k- K7 u6 Z2 C3 vC.虚拟内容5 `- m% F5 q. d1 t1 M
D.共享内存
& ?* Z& H9 s$ @! NE.以上都不是* y( J, y7 }, {0 L" o1 j7 p

: b3 i' z) ^; a3 i6 ]4 W* h! ^3 M  h% h. v  F- |& o' v
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
& Q  x2 c$ @- a% A
- p0 E$ Y- O, xA.浏览器的程序出问题了+ Q  {8 t; R+ h& A  w
B.客户端的时区设置不正确  K) t9 Z' s+ [, C8 A
C.用户的杀毒软件阻止了所有安全的cookie1 G' ?9 N" [/ e' D7 q
D.浏览器被设置为阻止任何cookie
# E- |1 E! }( q  f" h5 H! xE.cookie里使用了非法的字符. r: a, H5 ]% w5 B- f5 i& k, S

' a* u6 _* l: M7 F7 |  i% ^2 f( Q8 L; j
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?/ Y4 m* K6 \3 U* p

7 D) S0 g: B2 k% a0 OA.1440秒后
4 S# p* g; a+ j) uB.在session.gc_maxlifetime设置的时间过了后. s7 x3 }0 D: ]/ p
C.除非手动删除,否则永不过期
' ^# h1 h5 v" u' |: JD.除非浏览器重启,否则永不过期
0 R) m$ l7 Y0 s* H# m; }, o7 Y. _E.以上都不对
7 \7 h1 C9 |- b: b- z2 y$ U/ ?' G+ p; b0 u7 N" M, m

+ X$ Q6 l; K. e! Y" {( k) ?! G15.哪个函数能把换行转换成HTML标签<br />?
' v: D2 i+ @, f- J  P" W- J2 ]$ b' f3 \6 e. A0 H
答案:____________- c- P$ S; G# n: J/ E- Y8 y

) v% K* l$ ?% t) b6 l$ M
* J2 m& S) K6 A9 w/ T5 H7 Z1 m1 i
1 E- q; M* N4 i2 z答案速查0 S1 c2 R% a" j* x0 i
1:E
% W, ]) s1 x8 a+ S, Y9 n" m/ |' L2:setcookie/setrawcookie# @" A8 \8 ?  M5 w( U% X
3:B
7 c. I$ }/ r) @5 `2 X$ v2 Q4:BD
$ b: ~: x, }: L+ ?, u3 Q5:BD
- S  l9 N+ u+ p) s( K1 O6:D
2 X% P6 b% Y* H& d% h/ Q0 x7:A8 a2 _& N, {& D% E5 A8 o; m& l
8:B
: u) \. C8 G9 q$ j9 ^6 \7 U9:C# J" R5 @6 S1 P: h; Z% o4 j4 q
10:B
  k% e1 }1 }5 A; ^$ C3 F6 }11:E
& |/ X; t2 J! d$ d5 ?' e3 s/ E12:A
8 Y' O& }% k- t9 m13:BD8 w; G' d1 k6 \5 u# G
14:B
! @' `( j9 o* O  v9 `15:nl2br
; P# |2 R4 J1 f" g( U3 G
7 R, y: S( o/ s6 M
8 }5 @2 y0 L1 B0 o# i( s3 g- y
( D! O1 }0 P! r# S* I0 _8 H答案详解; C3 l' @/ i! p9 {

# V$ Q4 w; z$ I4 p0 D1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
. c& P0 L& K2 N' a2 Z8 U4 ^4 n% f% @* W& k( A1 u0 M/ M2 i
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
1 U# i) f( w* X4 a6 x1 }$ v' n/ J7 H! n. j. {, I7 X3 V. P8 Z; b+ J
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。" }  q$ g! Y$ C

5 Z1 n6 q/ s7 ~4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
1 R* \( [4 i/ J  P( H& ~8 Z0 T. b8 J! `3 k9 |9 T$ X, T
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
1 i( d5 {+ |1 J" a8 F! D, b2 @( A' G1 _; c# D+ a
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
+ C, J2 p. J  z& n% a
4 ?# `) {/ s2 o5 k) j% D/ N7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
4 u  M1 E0 B. f4 f
9 n- C" L! w1 h8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
+ d! ]% \# T: b; Z& B: k5 W- h, L3 j
7 h2 K, k& k9 g9 [; E& ^! v9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
! r4 w9 M' M' ^) }' |9 p6 ]' T' ?  P% \5 v: [5 r% j( W  {+ F
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
  k! u% s( w4 W6 w0 |4 z* y3 `7 n& g; i- T/ m; X( n# O' s
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。% g8 |. q; w/ l0 P, x3 b4 B' L5 R
. T, d& T" `3 N/ {- l
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
( r7 B, K( S/ S0 T9 W( J3 x6 e( g& t8 |$ o
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
" w. b. D3 r0 u/ d1 Y
7 O  \$ y4 |! k14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
4 r/ G# p) l& O- I* ^  s# _9 j3 g! B5 ^6 P
15.函数nl2br能实现这个功能。

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