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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
! H4 [3 z5 M' W; Q0 u与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。2 o+ g2 ^5 a5 x$ T  m
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。6 V  X* k' r6 U7 E; }  K
, @) k* k4 w, A) M7 v* m0 N$ _- r7 o

# U$ {0 y" l5 i6 I- m问题
0 `+ I; ~( y' G1 F+ Y8 I; ^- [+ y+ G/ C1 s1 d, K+ S
1.如何访问会话变量(session)?8 z( |8 I) r) Y/ C5 w& p) Q3 s
2 P- F; e' B5 q
A.通过$_GET7 q' ^# z5 D9 x/ h+ F3 _
B.通过$_POST) ?  z) s* `. e  l& v
C.通过$_REQUEST
1 R1 _  D& f# I+ m& e" f3 MD.通过全局变量
0 V; D/ Y% }4 E9 l0 mE.以上都不对
2 \) p: K/ r) ^& U/ X0 E. {( C' ^. o0 M
: @0 W% R2 \7 S- X( E8 B: L$ E6 ^8 G7 p; D
* c! `: p+ _; `/ R2.哪个函数能让服务器输出如下header?; b! p  J+ r% h8 O9 M

$ x" l8 R* N% D  @6 \set-Cookie: foo=bar;2 r. k# E, I3 @" i3 l$ d' T8 |* Z! M8 A* x

& V& p- h+ q" ?& W% l) B: L) ]答案:_______________0 P: x5 H/ f, M  }3 z

4 P: F. z! C5 G! ?7 E/ D3 ^+ z) w0 f3 |
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
  n+ Q* @, a& I& p
, p+ B; o5 t" M5 QA.通过HTTP_REMOTE_COOKIE访问
1 H- U1 D% o1 uB.不可能
9 A! g' j9 m" L9 mC.在调用setcookie()时设置一个不同的域名) o- o- k0 |9 B( f. T) ^. r
D.向浏览器发送额外的请求. V; C" j6 Z7 ~& c6 c. F3 B* O
E.使用Javascript,把cookie包含在URL中发送
, _. ~; F  H& M* `+ F
) Z: B" B5 k! b7 z; d( k, J+ b/ n) X0 c& X
4.index.php脚本如何访问表单元素email的值?(双选)
8 r3 G, ], n; A, G1 z1 `- N7 P) @# b/ o9 [+ x
<form action="index.php" method="post">/ B7 w5 Z7 _0 A( W) w; C
<input type="text" name="email"/>
! g3 ~, f' L; O/ l, ]& W</form>. f& r' Q8 e8 }

7 I9 P5 a, p! K% AA.$_GET[‘email’]7 [8 i0 {" P2 _
B.$_POST[‘email’]' e# N- G  P& n0 w/ S
C.$_SESSION[‘text’]
4 x. J9 }# O9 ^! m8 C( Z; b- m- `D.$_REQUEST[‘email’]6 o  m+ r, r1 a) s
E.$_POST[‘text’]1 o' E0 _% _, [% Q4 J
* N" j7 a, R& O6 l* G7 O
9 x0 p4 y4 N% W2 c
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长0 O  x+ G" F% i, G
B.没有变化
( r' \3 m& v9 N0 O1 F$ c5 U6 pC.在浏览器上打印该字符串时,尖括号是可见的$ }2 V9 D& i+ ~5 g# q$ @  G3 A% G
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
& J0 R# N6 Q& f, V( d& ~E.由于调用了htmlentities(),字符串会被销毁, x# m+ D( I# n
  l$ K4 y6 @/ P: m- W# S

9 q( V" g, D' x+ U8 Y' X) ]6.如果不给cookie设置过期时间会怎么样?, ]& g8 r. r; Y
6 Y5 }3 G8 M+ L+ I# W
A.立刻过期
2 B: |, Z4 L$ m8 X" N) }. [B.永不过期! R2 ]+ f9 J: L4 G5 J  ?
C.cookie无法设置) o- ^, F* Z# q, w2 m; {+ m6 W3 d% P
D.在浏览器会话结束时过期
3 H+ W4 x9 V2 F! f, V! ~. qE.只在脚本没有产生服务器端session的情况下过期2 W; W! `; i3 g3 d# Y5 v

0 w- z: \5 x. ~9 f' t# h/ ~# `4 @* N4 n! J5 u; B
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.什么都没有2 V: C1 T# g  g0 g' H7 k. `0 n
B.Array. x6 H6 P% b# n: z
C.一个提示- a; T, y, ~$ O( L2 u
D.phpgreat' A! N- v4 x: F/ D7 v
E.greatphp
7 q- i" D8 Q, e% v. D( w- W
/ I$ r7 t- i; e) g
- f5 z- G; X# I+ A$ ^8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?7 j4 L0 c6 t- q; A+ V$ `& S

4 {" a9 L2 t. Z0 b7 E2 VA.这两个是明文传输,之后的信息加密传输- [% {7 p/ r$ M& Q" S6 K
B.加密传输2 K& [% K; W; b
C.URL明文传输,查询字串加密传输* J7 y1 [# }3 H" P# e
D.URL加密传输,查询字串明文传输1 a4 p" q4 i6 D2 ~7 y
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
" Q+ }1 D( _8 i( K3 D  z$ T/ F3 Q; c0 C6 S5 j

( [. r1 _  }$ P  Q9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
$ [, z) J# K8 K% F
4 V- y4 E! Z: jA.它们组成一个数组,存储在超级全局变量数组中+ Y' L1 E" R% m7 u5 T- r. J1 W. H* G
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中1 j/ l* P% S% M$ D
C.第二个元素将覆盖第一个元素0 ?8 `3 `$ L  o$ C* G
D.第二个元素将自动被重命名
- t8 X6 u5 a! ~" l% e+ sE.PHP输出一个警告
- }% ^* p; [. w  p  A( l1 G
6 l9 V( D. c! Q2 r
$ p' c$ g: L7 a! j& E. S10.如何把数组存储在cookie里?
' r, v2 [: m* a( [' Z! E" A& |5 x& `$ r$ b1 q
A.给cookie名添加一对方括号[]# s- c, m# [) W! q& z3 e( A
B.使用implode函数
4 Z7 Q2 d' v! @C.不可能,因为有容量限制8 ^) H+ r! ?. _) \! }) s
D.使用serialize函数$ t7 B9 H0 H1 r( i
E.给cookie名添加ARRAY关键词
3 v3 X+ D+ J& e- |5 z- l7 l3 O4 c* z/ e/ \+ D$ S4 Y1 e/ x6 \* }  G
- I* p+ {% [! ~" O" }) i
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
/ h- ~; [/ X& ~% f8 m! J1 FB.1234567890! f! l+ R( g1 U, k
C.01234567893 E- ]8 O/ ]# V  N3 s" G
D.什么都没有
1 ^6 a3 \7 O$ B5 `  A, `5 ~E.一个提示# b  C! B/ V! P5 A) u
! N$ J3 t0 E& \& r6 V! n% Q
, Z( B, f8 _4 U0 n! V
12.默认情况下,PHP把会话(session)数据存储在______里。& f8 T( c' E6 k7 g% n# v
: X( ]' r% p7 N; [. F7 R, x
A.文件系统
( v/ @# B- ]0 bB.数据库
7 S) |0 o4 s% w  Z3 WC.虚拟内容
+ n0 v: H' j" X4 M' @, wD.共享内存$ ^1 d& l( s, _
E.以上都不是9 D  E- |9 E6 n5 ~3 T, k
. C  m/ o! i/ U+ @
; x# I" A. {! O$ H' T! U
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
* g. d" d! S. K# D8 W5 Q; N6 O+ f5 G: l$ U5 {- {$ D+ e6 m
A.浏览器的程序出问题了
( f# w; M( [, bB.客户端的时区设置不正确: o, H& i  b/ L& X1 C
C.用户的杀毒软件阻止了所有安全的cookie
5 O) X1 T3 n$ Y& _  ^D.浏览器被设置为阻止任何cookie
6 X; C6 l0 o# a: i6 ME.cookie里使用了非法的字符
  W  L, i2 d6 P- n/ i6 k" f" `, ?8 p" e
1 J8 A  U5 L# ]" f. M* @
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
( c( Q/ M6 E- @) v9 c9 V% {6 W% [; \$ W. G, H2 a7 ~" l' M" T
A.1440秒后8 |/ E5 `4 m- H4 Y' l8 g+ {
B.在session.gc_maxlifetime设置的时间过了后
: J: i" s" Q% _/ w& M  a7 GC.除非手动删除,否则永不过期
( ~4 X; B- @3 t9 c2 WD.除非浏览器重启,否则永不过期
& a- V" p, [" |3 m; v& m' rE.以上都不对
* g* x; I# h1 O' A8 o% G/ {' n& n, d) \  r

. F+ j, t* m& c! F' w7 W$ A15.哪个函数能把换行转换成HTML标签<br />?
" J4 H, A' x6 V3 ^- K& v! i& d5 Z
% a1 Y5 Q5 o$ W7 n" {% \( A答案:____________
4 H0 ^9 W' Y; I3 H( U  ]& c& o1 w) j
: w7 ^+ T3 s4 P% }' V

* c' \4 V! R* b- u) e答案速查
+ d8 t: ^( G/ r- y+ {" F1:E# _& L- o2 }3 d4 N$ ~: [% R
2:setcookie/setrawcookie  g6 f* g' E9 T) o' v. E
3:B% [" ]. |5 F7 m1 M9 O/ o4 Z# U9 r( U
4:BD# B0 p9 ^6 o* i7 i  q/ z* y/ _
5:BD( c& p2 a' c4 ^% h4 a2 S5 Q+ T
6:D
* s. U* h$ z/ F% o* q7:A: t8 p" {: U8 E) g* e
8:B5 P% L$ d+ u6 r& m4 T' b; a
9:C. T$ x5 A+ u# ~& H# J6 p
10:B# {6 J8 E8 a- ^" l0 K$ b: j6 H
11:E, R6 y4 t3 C9 T9 u% w% j
12:A
9 J( t. M: A; a/ X13:BD: L1 S( ?) @+ Q" X( K3 T
14:B+ U2 R3 S- [# }3 T5 d% G
15:nl2br
, }1 e* s8 \5 X6 j/ {. B8 g0 W+ N9 s6 R! u: i
2 n* x* ~2 o0 T3 c3 ?, Q
( g$ H% v  X  y7 g
答案详解
$ [# u$ O# D3 x$ Y, x! Q- u
; k2 X* r) K# `6 b) F9 S9 ]- k1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
% `" n% p' V) k( P/ E. K! Z4 u
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。% k- k6 P  ^9 P! C) ]. a4 X2 E

1 \/ S! x6 V% N& i! M- u3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
; ?% b) s/ ]4 t! G! o
2 N: P  o  Y6 f+ I( B1 K1 i1 A4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! N, I8 r# b$ J7 y

5 m0 B8 ?. f) `0 T% m; n7 S5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
6 a1 @' [1 W% f: O  f1 @$ Z$ I! J7 E) i  S1 c
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
4 k; K, ?7 R! t' E  o, ?, f
' o; N) H/ b- [. q7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。' l0 i, S2 H; x1 z

0 `3 L$ S9 S, W' d) Z8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
3 A2 H, I: ?5 ~( W1 ^7 N/ ~
) m8 P) Y$ J/ b8 [1 w# [. b: [9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
/ h$ E5 m# v9 w* x% A2 f4 q! u* @: g
6 A9 Z! h1 X0 L4 l9 _) B10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
* o8 I* c! P, i. A% U
# m1 T+ a/ B- `- {6 f; [11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
5 K7 P, k' f! D3 d2 G
7 I7 q+ E: G! @. L12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。- f( ~# k. j! }) ^5 U1 R8 v

& G* `4 L& }/ s9 p13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
/ R' T0 h* P  f
& L3 Z" C7 _. \( I! r" H14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。, B1 W9 F) X  [* g: J: {  j
  u, E- X8 Z% l( b; o0 B
15.函数nl2br能实现这个功能。

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