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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
3 d  {1 z% ~& @; g/ @- [7 }与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
) z% E/ x9 w9 t4 Y4 f) Q一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。5 @7 o+ P. {0 j' L/ _

; v& G  c, m, p+ c# f
/ t7 U  N; {8 x# S, g3 q: V问题* U* C$ q. J8 r- U& O
2 x$ M" P% I* G5 d- i8 U
1.如何访问会话变量(session)?
) Z+ h! |- o0 S% z+ u. F7 Z0 D3 Z5 D% _9 Q) I5 t- D
A.通过$_GET
- ^( n+ v4 F& ?7 {4 q: Y, t6 wB.通过$_POST" X1 K; q; C6 B: d
C.通过$_REQUEST
2 x2 k. S' V4 c% L1 Z! qD.通过全局变量7 N4 o+ l, c0 t1 M* @. k
E.以上都不对
8 d& ~9 J4 v( `3 ]# a7 K3 S& F- _# g# ^. w# T8 ?6 Q
, T; t( r+ _. n. c
2.哪个函数能让服务器输出如下header?
: }' R" O0 i# @7 H/ E3 y8 f9 {+ I& B
set-Cookie: foo=bar;
, D6 ^  Y1 W9 h. x
" \/ D' M# M2 ]( E0 x答案:_______________! T# _: c! T+ l# ^! V2 G; \
5 b  R. X2 m- J
. q$ k9 J( |5 H& @
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?0 s: p: V) E1 S4 U! m& S
& q  O, ]+ j! I; p8 C( d9 {
A.通过HTTP_REMOTE_COOKIE访问# o6 j* _6 R# j% }- S1 f
B.不可能: N5 ?6 W) y0 ~( c) H
C.在调用setcookie()时设置一个不同的域名( a; F- p* x' J* E0 J, z
D.向浏览器发送额外的请求1 ^  b3 I! I! ?, ], o$ b7 R/ U/ m
E.使用Javascript,把cookie包含在URL中发送
. ?. B& y- _: R6 X/ y
5 W0 D$ `0 L7 D2 r
( I- r8 s& O0 i8 w, a5 S$ S0 w. P4.index.php脚本如何访问表单元素email的值?(双选)
( |& z" C. \+ y4 ?$ z6 Y, e5 |
! C$ _7 t# D/ l4 E- w! x2 l<form action="index.php" method="post">
" R0 Z" N/ ?; {, w<input type="text" name="email"/>
% A2 r* H1 c% ~$ H</form>0 A* }! K" G, c2 t9 ?$ o

; k7 K- }6 b" q6 L6 [3 g, A7 HA.$_GET[‘email’]
+ r2 G2 U; M7 e" `" RB.$_POST[‘email’]  S; e1 v# k' z8 }# m( c. ~8 I# f
C.$_SESSION[‘text’]7 O) m# J& U  w, v  V7 [8 O1 q! W
D.$_REQUEST[‘email’]8 }* W% N- T( ]5 Q5 y9 A$ P
E.$_POST[‘text’]
* R1 r$ Z, ~9 ?( R1 d! G8 ~( \# D# m$ o. V. m3 [$ ]

5 N9 N: O0 u, d# I! K5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长7 s5 V+ a7 g- G4 v
B.没有变化
$ D6 C2 {2 i3 }/ }C.在浏览器上打印该字符串时,尖括号是可见的
$ h- C; C. b+ X0 AD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
# e" L1 |& r7 `E.由于调用了htmlentities(),字符串会被销毁
' ?; j/ n8 b* _( p0 E5 a: f
" T) G3 u- R: A5 E. ]7 {0 |3 ^2 ]- y0 `
6.如果不给cookie设置过期时间会怎么样?/ `; _0 K' Q2 t6 S9 B
' {8 _! A. c% o; i! Q
A.立刻过期
! n! R& x: M0 j8 c  d  T. d! WB.永不过期
( ?0 |0 ]$ H9 RC.cookie无法设置; T, K. T4 x1 A- {, ~( [
D.在浏览器会话结束时过期
8 J7 s+ q  A& R. j  [8 H0 Z- |! GE.只在脚本没有产生服务器端session的情况下过期: l8 \+ i$ A* U1 c8 v

7 q2 [4 u! p! {& p! B7 l" e$ ~' k! A! W& Q9 g) C% X
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.什么都没有
9 w4 D: I, q; _7 g7 B# jB.Array, Q: V' R; V& j. W
C.一个提示
! Z1 e0 G3 g& v& v2 L5 u/ G) M) z' kD.phpgreat- O+ G- G% ^0 j: T
E.greatphp
1 V% j4 B* l& f% T+ N
( H2 u' J/ S: y" W' h* Y3 f
# ]6 C( Z; `* o2 @  e' r( H- A8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?# p* e4 T! q0 N5 p, I

2 Y" S, z5 w$ f: {" j; c; n8 n# KA.这两个是明文传输,之后的信息加密传输
# d' }3 S" Z. @7 c4 BB.加密传输3 |7 c' n/ N+ Q7 Q) E/ Q
C.URL明文传输,查询字串加密传输; L  z1 A  w8 {7 c1 d
D.URL加密传输,查询字串明文传输
5 @: C5 {  M( G5 Q9 S9 \% ~1 CE.为确保加密,查询字串将转换为header,夹在POST信息中传输& f$ j8 o* o5 M4 J
3 C, w+ q, n0 O1 `" Q" t
" m7 |) h4 }4 m# v+ n" E
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?7 O  m9 S4 N1 K# a( v' g
9 d# X! o) Z& q( \- m' t. w& p
A.它们组成一个数组,存储在超级全局变量数组中
; @& |! p7 g; c* @+ I* D  }  iB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中. t) {; l! u3 W* B
C.第二个元素将覆盖第一个元素3 G6 I) L5 S  P7 b3 P( \
D.第二个元素将自动被重命名
9 H6 R; @9 ]9 V/ o  J* nE.PHP输出一个警告
) C' I) L* \) v" a5 k, f9 k
% E4 `( Q4 P9 B  a
8 Z. u' A* j- ^6 v5 V5 A10.如何把数组存储在cookie里?- k9 D6 @! W8 F; A! {
. l/ R7 T/ F' M/ m2 m2 ?6 x
A.给cookie名添加一对方括号[]
. M) T  D5 v$ l- |  u) \B.使用implode函数
1 A% X0 G0 G6 J: V1 j; y3 EC.不可能,因为有容量限制
( t. g! x$ |( hD.使用serialize函数+ M  g# M+ z8 Y
E.给cookie名添加ARRAY关键词  O% e1 a& r% U% {" F
0 M1 f' m* I1 \8 p; m  m7 ~% s

; u5 K! C0 m- s$ A7 l11.以下脚本输出什么?

  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% P2 L: p( A; G0 X7 x
B.1234567890$ a" T1 S, j; }, w5 v2 b
C.0123456789
# o  m+ @& M% F/ L6 U. ^# BD.什么都没有
' y8 i( b3 H0 G7 U5 VE.一个提示
8 H; W& w* Z( @1 H) X+ \  G( Y4 I2 U9 N* G$ Q& L. ^

' e. w% r7 K4 ^( S* E& n1 J4 s12.默认情况下,PHP把会话(session)数据存储在______里。
& |8 i& ~8 E) t" h, q1 I- M# Q+ o4 l  {
A.文件系统
% B8 R) \4 L6 j% ^: e7 vB.数据库
, [  i. `% c6 U: N% tC.虚拟内容; [3 C9 w+ j' B- e
D.共享内存. O! g' {) v9 L8 I# b' Q
E.以上都不是
% \0 o2 Y1 S& j7 }2 ?
2 o' g4 w5 a; y
. n- d' T. G6 k3 l: X! M+ x13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)1 c6 }' v' A' w7 O) @! F

3 N# p8 |- t4 D5 GA.浏览器的程序出问题了
* k6 n2 w$ C4 p* I9 G+ t3 W! cB.客户端的时区设置不正确; i1 c/ a& S4 I3 d% |
C.用户的杀毒软件阻止了所有安全的cookie
0 u. ~6 G6 J+ |, Y6 N  V4 |% ID.浏览器被设置为阻止任何cookie' _# K- @. `& o1 ~& w$ b
E.cookie里使用了非法的字符$ I- H" `7 j$ A$ u6 E! v- k% ~) q$ P
; T: j5 h" l5 k6 E' D

! N* i, ^0 }- H) r1 i& @14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
+ e9 u! u8 l5 ^4 P+ x. s0 I
5 j6 X& [! Z6 }5 T& t7 c4 fA.1440秒后: J( s- d; N( f( Q* Y$ L
B.在session.gc_maxlifetime设置的时间过了后
, K5 s; s, F* iC.除非手动删除,否则永不过期
7 x9 o; R0 ^5 v! }+ a( {& MD.除非浏览器重启,否则永不过期, v8 r: S' L1 Q
E.以上都不对% p) g9 a5 _# R5 u* `! w
! @' ?% ]4 b4 T/ c/ N- k

* ?6 e( {) {. r. @5 e! J' n15.哪个函数能把换行转换成HTML标签<br />?
- D" o! d! h% q4 M& h8 q6 N( M/ W" j2 R5 U% j& N6 o4 p) j1 L# T* Y
答案:____________
* j: E8 v0 Y! ]9 h( u2 I
2 _- Z3 @: x" S% q8 I8 E! j4 d' Z! l/ }

' w1 l% A  X  B( [9 U  W答案速查
( B( Q% m1 Y2 @: m1:E8 S; f* o+ I+ R2 e; `1 p
2:setcookie/setrawcookie9 L* k+ g: Q3 R2 g
3:B
9 R% g7 Z) ?9 v- e, T2 O! X4:BD; \7 l7 X0 r1 q7 `& K: C) J) q
5:BD
. R; D& Y5 ?* ^+ ]! f' A6:D
6 F7 g0 A( w: v7:A  Z4 ]5 ~/ d$ L( p
8:B
, a! R+ L$ c  v( o# h5 H4 I1 y9:C" p7 G; Y. I. _8 s5 c: t' h+ C: B
10:B* f: p% I" {4 H4 ~4 }5 @: q# B
11:E
& y8 q' p# n3 h0 \" D  [/ b8 k& H12:A
* C, s9 C% @' {" p# c' {& C  ~13:BD
5 M7 W# S0 g; r2 h14:B& D( b- J, s- k- m( C+ S
15:nl2br8 ?) e4 r$ E/ {
$ X6 x3 i6 _- u

- U- G/ ?: s$ C; D
" {( }/ C- }2 [4 ~$ i# O/ Y) c答案详解
8 q0 B$ ?; R) l/ @8 Z( w/ X+ c$ `3 A3 L
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
' g- L: t2 K/ X. I+ M- u
; F1 y  v8 Z9 Y( n! J6 w2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。0 k3 v5 @' o6 j
5 ?# Y; x* V0 y" z
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
. x4 \9 K, A" s/ o% v  Q8 Y5 j4 M, i- C/ K0 J5 A6 e
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
+ P4 U; @: S2 V. p' A
8 E) t2 ?1 n2 y( O1 ?5 |5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。7 }% Z2 v5 A* g8 ~: |

  ^6 v4 z2 F  k: Q0 F6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
1 \( L4 e% c  e! s; p/ Z* X& W( l3 Q4 G' B
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
1 G8 E, K  o; X5 ~! z, Y1 g: S# L+ z' a
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。# h+ W$ S- V9 u+ e* L

& O( i8 i# h( w- F. y3 V0 Y9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。7 n8 p9 h0 a6 i9 C5 ?  K
/ [: n! _- b" q
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。0 o8 `3 P- {! c' x: Q* Y1 S0 c" X
2 g" ~  H( z+ K" W# F0 z0 b; q. b
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
5 x. p3 O1 c2 D- V0 f2 M$ g& L
8 k+ M+ r7 a8 R. A( c: E- v12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
7 F2 ?  O6 x& o! ?1 B
& O3 \- g5 Q, K% H8 p1 \13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
1 ?* I8 j! R/ i! m3 B
8 k( i4 R( ?; T! H9 x  W14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。8 H, D9 C: U! u* c( j. V( N
0 ?. x5 w5 t# A' B: O
15.函数nl2br能实现这个功能。

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