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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
- V$ V/ T5 E0 q# N9 m0 Q与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
7 |! n) B. [+ S3 ]3 U5 k8 c- A( r7 g% K7 D, W一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。. L( q/ l+ c: e
2 B6 b) R" o" y- o7 J/ c* G8 L
; v: G) Q! q* ?. A5 t; o& {
问题
2 n( d. |$ C- @
& o. b5 ?1 T) b  J* \, b+ q1.如何访问会话变量(session)?
4 {1 [$ j2 S! h. @: J, ]' N/ X
: g8 G7 i5 ^$ h1 m8 uA.通过$_GET
$ }& ~% \# b2 v: G5 fB.通过$_POST5 \' F" G+ U) @. L5 Y
C.通过$_REQUEST
7 d# b4 y% s, T- E0 xD.通过全局变量
" S0 T$ J8 e$ i% W+ b% vE.以上都不对& c6 L' n9 N0 x1 p. ?* E

6 {# N) |$ `3 z9 X0 B7 \* D4 n# t2 x
2.哪个函数能让服务器输出如下header?
; R: i. q, }7 M, w0 T) H
$ A# m5 O. ]0 F2 h* Aset-Cookie: foo=bar;4 C/ Y5 B# c. R7 o
( `4 y5 J5 t+ t/ e+ }9 X0 h5 ~6 E: \
答案:_______________
' `* @2 o" y9 T6 C! w/ ]+ E% H# M/ L0 `/ U( R1 a

* ^( N9 s3 s4 ?% Z, a4 I- M' i/ U1 v7 s3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?7 M8 ^( H, v: P! ]) a/ W8 [1 d. t* J
* ?' \& z5 O8 z; r% _* E& Z6 I! S
A.通过HTTP_REMOTE_COOKIE访问
( C7 E/ w" ^0 t) f" l) wB.不可能
# |$ T( v, z# g$ TC.在调用setcookie()时设置一个不同的域名
7 N/ v" ]6 q9 c% b7 bD.向浏览器发送额外的请求$ A. t( F& z' L% c- s( ~/ ~
E.使用Javascript,把cookie包含在URL中发送) F# e6 I( k/ W" ?9 z

3 m9 l& F# j9 E* s9 a5 e" K' m6 M+ W  p( F3 o: h/ R8 f
4.index.php脚本如何访问表单元素email的值?(双选)
2 [  k% O) R" h4 \2 @& R& B% R6 z5 l# Z" V
<form action="index.php" method="post">" n% A. K1 j' A# Z6 j5 p( B8 v/ q
<input type="text" name="email"/>
& n1 A9 D$ I/ O9 l, \" O/ [% l</form>- S+ q: W, h. v3 W

5 p7 \+ I* b" u# aA.$_GET[‘email’]
2 O( T+ J  _- x" ?1 J# @B.$_POST[‘email’]
( Z& Q* d' \8 j6 a; |# eC.$_SESSION[‘text’]( N$ K+ M; U" H# U
D.$_REQUEST[‘email’]! l6 C% |- {% D! K, q4 m9 R
E.$_POST[‘text’]
- U% @8 r/ j4 R2 N3 W
6 B7 g- S, _2 `4 T/ o# _
1 G* s  O) F5 P" z! C) }5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
' ?/ Y1 p+ H5 n( o/ @% |! e7 uB.没有变化; |$ s! t: i9 o9 R6 f. v
C.在浏览器上打印该字符串时,尖括号是可见的
. f* }' Q9 A/ l1 ?* iD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
( {; Q, B1 t! {# X$ C2 n' [) OE.由于调用了htmlentities(),字符串会被销毁& z! w2 U0 R, L" W

+ f. j5 V$ _- }( ?, `0 l/ l5 M  C; @) K/ e5 F
6.如果不给cookie设置过期时间会怎么样?, n; m- ?2 D4 d8 y; x  W

+ q1 S, J$ S4 I' Q/ |A.立刻过期
" u4 H2 D6 K- t2 CB.永不过期
/ e) n" v$ S0 T* b3 gC.cookie无法设置
7 ^* `% N; O* ^* |: VD.在浏览器会话结束时过期
# f( T- o6 L# K8 H; c6 ]4 DE.只在脚本没有产生服务器端session的情况下过期
1 |5 E6 |/ @7 }2 c' S
, u& e1 ?% w. R2 L' b) @5 U" M: Y
% o" e5 ?' y7 f/ H1 X7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有3 m1 _& L1 J  Y' x$ U% X8 X# R
B.Array1 a! Y' s* o) u7 M3 G
C.一个提示6 R, |& c  E5 A) ~
D.phpgreat' D( w$ }, V" w
E.greatphp8 D) A- G+ H- |9 O; e8 n

! p2 |' }3 W% F& k
  ^- f9 Y/ j; M' ]+ o8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
2 F2 f3 F+ S$ A; A% R
6 o2 s/ e: G. c0 gA.这两个是明文传输,之后的信息加密传输0 X- Z. R* v( \. `
B.加密传输" Z  I7 Z* F* ~" a. ?% K' j) _
C.URL明文传输,查询字串加密传输# M, [  E: K% R5 S) |  F4 N
D.URL加密传输,查询字串明文传输
) Q# z0 ]  r: g2 m4 @2 K7 lE.为确保加密,查询字串将转换为header,夹在POST信息中传输
* H. t5 q+ K8 _5 a) j& m! q5 |! f$ K# Z% m
, Y; i' {4 i* P! W, j2 d
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?% c6 j6 P, a4 u0 p$ G) W% I5 q

) ~9 Z  ]- `$ J- U- B% MA.它们组成一个数组,存储在超级全局变量数组中
! p1 C  O5 v8 a- F; j5 vB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
/ d( F( B* j7 N, F" c! @C.第二个元素将覆盖第一个元素
+ i$ s. Z! E/ Y6 cD.第二个元素将自动被重命名
! v$ r+ X! T( L# hE.PHP输出一个警告: O6 T: l4 x' p
9 M$ a' r+ C0 c$ [& {  A& b

7 C7 `7 P0 ^# S: B" z7 d9 D3 M7 M# h10.如何把数组存储在cookie里?5 Y3 L0 ]* j! h$ r6 J

6 W4 F7 l" d' J/ H9 P- D: J+ X* YA.给cookie名添加一对方括号[]  K% |& A% N. V: N4 }
B.使用implode函数: O/ k/ v. W1 j& S5 R4 X7 B
C.不可能,因为有容量限制
* I6 h$ ]# ~' T7 RD.使用serialize函数
3 m6 |! A7 Z8 A0 y- ~' [E.给cookie名添加ARRAY关键词' x) u" k) Y- ]0 r1 q, B

8 _) H' v! J8 R" q6 |" V- N/ A& j( ]* o; l1 j; U. S& x
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.123456789105 ^; P# C0 T8 v; K
B.12345678902 L! V; J9 ?; ~; B3 R
C.0123456789
/ E  @+ s  \! Q( N- d1 bD.什么都没有# u  y" i+ {) q/ o
E.一个提示
  ~; g% [: k1 `/ X0 r7 E# _: r  R* ?/ M. F% \5 R

  Y7 F3 X5 i- k; l- c) t, ]7 l  u12.默认情况下,PHP把会话(session)数据存储在______里。
7 S4 y! ]) V& a! q  [
! I  T$ X1 m. }9 K5 hA.文件系统
2 a( [$ N" C- \5 F0 z" w( L" @B.数据库
- l" {0 u! c. `8 |" f8 Y" Y( W6 {: rC.虚拟内容6 a$ F1 C+ @, a# @* j8 _, O7 _
D.共享内存) R( ^8 M/ k: @" u8 W* p* N: M
E.以上都不是
  R3 ?# z' l9 ]* l7 W" f( ~7 H+ `- z7 r$ m; q- [
$ _. C( U1 ?: \8 P
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)  f3 C' x8 p$ b  A1 @4 R
- N' ?0 {1 n4 D( _$ G. h
A.浏览器的程序出问题了0 ^% @$ ]- O7 D1 Q& c& ^2 G
B.客户端的时区设置不正确
3 r7 c5 j$ t0 J. }  o& W  YC.用户的杀毒软件阻止了所有安全的cookie
$ P  W4 l% V: {- f+ c, S( OD.浏览器被设置为阻止任何cookie
$ o/ \3 e% `& i( O9 r- \* m( b" iE.cookie里使用了非法的字符
) f0 \7 H1 s2 u* Y- j) l! `+ H6 p2 r* p3 i$ l
  b* s6 z- y" W4 m" e- O3 l
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?" ~, d. y( J* p- o' H& w# [

2 s3 i7 S8 ]; pA.1440秒后
3 {! M2 s# i% w% |* @" JB.在session.gc_maxlifetime设置的时间过了后. _; R; ^. e7 x+ L$ d
C.除非手动删除,否则永不过期1 ?" g( X2 q. g
D.除非浏览器重启,否则永不过期
% i& k, r" q" `" k+ ]6 T" W$ N5 IE.以上都不对3 Z" `( H' q& C1 u

  }  M; r, J5 r  P, F
6 `3 _; z1 a# |1 y15.哪个函数能把换行转换成HTML标签<br />?
7 ]( ^$ }4 X0 U# _7 ~5 b
) z4 }0 s  ]! b0 M8 Y" v. b答案:____________
8 r6 K5 b+ w! Y& r( X! d# X, t6 |. f3 w4 L: u, P2 B2 l% w; w, I
) T! [( m! Q% C) ?* S) }
9 l7 S$ @' l: N" n+ ^6 ~6 H% t
答案速查0 i! r3 ~0 b+ J
1:E
9 {2 ]& X4 d2 w/ s  e4 X2:setcookie/setrawcookie/ g' Y/ f# p7 d' |9 M8 A
3:B
4 c# ^% d$ B: y" o% s4:BD
6 ~) w5 H6 t. d: N# d5:BD
  |% P+ q8 C5 b$ E- z/ @% ~( C6:D
* ]1 ^0 k  ^& G  I- b7:A' q5 [8 k$ I& ?. M% [* W  j, j  x7 I  \
8:B, e4 |' ~- z6 F+ v; S
9:C
* h; @% i! Z% k10:B1 u  y8 F  V9 z6 o  N
11:E
9 d( P$ Y% ^6 W+ f% z% A' o12:A
: [( N# W0 X2 k. w13:BD! r5 ?' |3 M* ?& z
14:B
  z; r" q: v8 S, Z15:nl2br
9 \) M" X# O. W* ~! {6 i* O" T9 {% X( q: E/ y- U- D. {

2 e) B# Y5 V& {
' J' l9 b) Y  t6 h' l答案详解/ L- G" X  v$ p: c1 w( a
. I' o) l/ K) s3 w/ _
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
( ^# g4 g1 b/ F  u3 ^1 q" [1 _) B8 S5 M$ c6 @
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。. t3 w/ H- K$ w  H& L/ O& j3 Z
. h# A; H2 n, ?6 W: Z
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。+ d- Z' @: z2 g& c: c  k

; k3 ~) P3 H* {/ f9 p+ |" B7 \4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
4 p' v* X, {5 V! g5 X/ I* l( X! W9 \, ~
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。; R( E* L6 ]5 z. l5 D  K

  Z! I( L6 T. u& N' T; {, ?3 r6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
7 g3 v$ \, x% m
5 _9 M/ z4 L7 m: |' P. o. Y0 g7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。& ~& y, ]2 Y5 A* C( ~7 o

" j/ V& m( l, l5 ]8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。! i8 p: K+ ?$ {* a6 z; C

' W9 C$ |7 a5 w% i7 g9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。' a# \! `6 ^" Z5 `% z8 @
) ?0 O7 Z9 O  R
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。/ n' q: k3 W; L5 `
1 u* A1 ^" V+ o' s' f
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
* w  i! G* B( F; V/ l, Z2 F6 s+ E5 g; o; q- b
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
# K" T/ d/ k/ V& G) Q0 Q& C8 A9 D, s, h6 I
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。! U7 ~# K: n4 P
0 A; I! S) v4 w% q' g
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
5 O$ v" U1 K$ B' m1 R+ G% R& W1 j6 A" x
15.函数nl2br能实现这个功能。

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