Board logo

标题: [Zend权威认证试题讲解]第三章 Web开发中的PHP [打印本页]

作者: admin    时间: 2008-4-4 02:25     标题: [Zend权威认证试题讲解]第三章 Web开发中的PHP

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。3 R- {  d+ d3 o2 n5 E1 B, R
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。* A# r6 Y/ R% F, p  P5 V
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。2 {& H1 _* Z. {3 d+ p  v

* N3 ^! U0 U; h1 F
$ Q  ?0 X6 f! l* Z) U  w/ s: i" W问题! }( C+ O. z5 N7 w# O
( ~' q6 ~6 J6 }
1.如何访问会话变量(session)?
& o- E5 `1 s. q0 H$ M; r- A) T+ [
A.通过$_GET3 n# Q8 i  T7 N# m7 t
B.通过$_POST! x0 M+ C- |/ R* y! g+ f& N# B* I8 ^, I
C.通过$_REQUEST, s2 w: @" @; K& `) M  L" a
D.通过全局变量
9 e! s! [+ B1 VE.以上都不对
9 M% ^" u( ?4 T  F, I* f; E6 `
/ V1 P2 s- X. i5 [+ m" {, x# }: [: I
2.哪个函数能让服务器输出如下header?, j9 O1 p' I; G( `+ o  b

; ^9 P( g9 u- m! x& _" T6 r- lset-Cookie: foo=bar;  j" H. t8 H3 y2 `5 V& R4 V
  H% L+ ?* x, z) Y7 Z9 c
答案:_______________& X: j; z" s/ @- _% q& z0 P- L/ L: N" f

+ V9 v3 S; g; P) s4 Z3 Z  m  k1 q5 g
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?+ g) p9 Q; h4 d$ D
7 |; w$ w0 E- g/ c# y. x) o
A.通过HTTP_REMOTE_COOKIE访问
- }5 Z- |/ E8 e4 r! E5 W9 @0 A0 dB.不可能  ?& w" b/ @) X% m1 @/ k4 G
C.在调用setcookie()时设置一个不同的域名$ `; S# r* t! v0 _' i6 C. _
D.向浏览器发送额外的请求
7 I6 u, l. W  \) L) F6 WE.使用Javascript,把cookie包含在URL中发送8 j2 f* W' j2 P8 N0 H0 \; E6 Q

2 b5 n  M( I/ p' }- D4 G# a
( c0 f1 F( N% }. ]' j# n6 T% p4.index.php脚本如何访问表单元素email的值?(双选)
# {+ q8 u- J2 X+ W. [' a
, d) g; k8 }2 C  K9 G/ [9 m3 ^% i; n<form action="index.php" method="post">1 R( u3 s4 b* q, Z) Q: }
<input type="text" name="email"/>" S7 h" u, R( l) V* g
</form>( \. i) O7 L7 |% w) y# |. _

  h% I  G! c  c( \7 }; iA.$_GET[‘email’]
0 F3 G1 |. ]& d1 G5 \1 y! J% [8 rB.$_POST[‘email’]
, p% O, e( z  gC.$_SESSION[‘text’]
+ _. K! s( p+ B. ^7 C1 OD.$_REQUEST[‘email’]
/ M: x( M# N0 `+ ?7 ]9 ]E.$_POST[‘text’]
  t' y0 @0 V$ G
' }) s% S7 S" {% K( W: W
- b4 u, J& T. x. }* M5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长. L% I+ ?& E; N- X; W+ i
B.没有变化
6 x$ m6 T, z$ }8 j* jC.在浏览器上打印该字符串时,尖括号是可见的5 X# t; |9 `0 m% {6 w1 |- z5 n7 f
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
& I! J2 \, }  P0 kE.由于调用了htmlentities(),字符串会被销毁
0 k; G8 j0 n/ O& b
/ v; G4 I6 Y4 G+ Q8 W6 g3 I& o1 W- X% p- d4 u7 n
6.如果不给cookie设置过期时间会怎么样?; P* `" G' l6 l8 ~6 ]
. r: N( A3 w: ^. F, ?
A.立刻过期
$ E) O9 y1 u/ A: p- S, F  F/ qB.永不过期
) n; R6 a# W6 j, b* D) x7 UC.cookie无法设置
# G$ Z% I1 i2 v. {, m* _D.在浏览器会话结束时过期
. Q1 i' K5 z' x+ [* _E.只在脚本没有产生服务器端session的情况下过期
7 E7 o% @4 M% d) h$ B9 D. _2 N. x+ F7 z! E7 m' t5 @$ U: Y
, j6 Q: b% C  }9 R+ G1 [: C
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.什么都没有* {1 C, A. K& h" y' Z* e3 h
B.Array( N" L) f, [, ^9 [3 L* n
C.一个提示* l9 `( @. i- G
D.phpgreat0 m" I. M$ Q7 C* ^# M
E.greatphp1 z1 c  c7 x* N* l( i( t. x

! ^9 d* B" B! u9 z1 r, k5 e, F' I; j7 o3 _* |
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
0 L* q0 a4 r8 C  g0 f, j- l
) i5 C6 f  t4 r5 {( I, n  ^A.这两个是明文传输,之后的信息加密传输
: T( ?4 w! F& O% i& w$ |8 y7 YB.加密传输
) z: l$ {# z" z5 _7 c8 cC.URL明文传输,查询字串加密传输+ Q7 Z9 `  k" k8 V3 D7 @- V
D.URL加密传输,查询字串明文传输  E" U5 I1 |( }! }0 k$ y
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
! U* V- O- U. U; g" f8 ^' I* b1 u! Q" P% ~$ Y7 o) l; B( n
, u3 b' ]- l/ b9 O
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
7 B8 B& V6 B$ x; h1 u: d: _: M8 V. b- P" Q7 P
A.它们组成一个数组,存储在超级全局变量数组中
/ \* b0 g' G& k6 Y7 ]B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
" B8 W* ?" r8 x3 O& PC.第二个元素将覆盖第一个元素
% L7 D/ U9 K9 \1 D& R: ^0 iD.第二个元素将自动被重命名" q" m3 H9 Z2 t7 x
E.PHP输出一个警告2 y( h0 x, j8 ~8 a; r. Y4 x
7 b2 f1 j6 ]# W5 B, w

" J% q- g' H4 u5 }+ w9 @10.如何把数组存储在cookie里?
. @  T) S+ q7 d9 M, e
2 p) b  b/ z" B% a( G3 mA.给cookie名添加一对方括号[]0 X. ?' D: F/ K7 F" L6 P  }
B.使用implode函数
0 D* ?* @0 ]/ DC.不可能,因为有容量限制- ]6 ?  [& l8 ?1 z' n- t
D.使用serialize函数: C$ \: m- N' `) Z- s; Y/ R
E.给cookie名添加ARRAY关键词4 P& f; l' C" ]' x0 @
! O3 J. }4 c4 ]0 H+ @

6 t7 a# P& g; s4 x11.以下脚本输出什么?

  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
' }' w; X; c0 W* |; A1 GB.12345678906 O& D! m5 {3 e6 _
C.0123456789' z$ O9 c/ s; ~: {# n( B4 }' y9 K
D.什么都没有
. j+ c+ V* q( e6 LE.一个提示: \. `7 O3 g; u5 o0 k

6 O5 \! k: Z/ [/ y7 ?9 `+ H, G4 U5 m* B
12.默认情况下,PHP把会话(session)数据存储在______里。- T" ^: `+ [% k: g& `' R: o
! C- j% T. M; H  N4 Y
A.文件系统
7 b* v( G" ^! s  `+ wB.数据库
/ q% L7 @8 I; H$ Y, [( @) IC.虚拟内容% ^. v3 t) s: S+ |6 [) R6 _
D.共享内存
# m5 y: L: l8 fE.以上都不是
, \) f+ `$ R& e3 G+ _" h
. Q+ s) u5 F8 R
* E+ Q1 z$ r0 }13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
' v& }# U9 ]& d4 Z8 \/ m! }# s' P# s& o( X: R
A.浏览器的程序出问题了3 T' I2 X. X; G$ i; {. H8 H7 \& X
B.客户端的时区设置不正确, q. g; I4 K* e! e
C.用户的杀毒软件阻止了所有安全的cookie
! G0 `8 `+ u% u% FD.浏览器被设置为阻止任何cookie4 _- a2 u1 T  X* _- D- ~
E.cookie里使用了非法的字符
: O/ w; H* c7 [* \+ I1 {
& J: z. i$ D& _" q) K- |* L
) g4 r  y( g+ p+ y( ~14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
/ ^% O, {' L; Y- [8 R1 K$ w$ L8 b+ z5 u' ?$ a# M( J
A.1440秒后
* q$ Z# h8 N, H2 ^2 iB.在session.gc_maxlifetime设置的时间过了后) s9 u" i+ L! A/ \0 |) Q/ d1 C: M
C.除非手动删除,否则永不过期
. p6 Z0 P. ?0 y' q+ WD.除非浏览器重启,否则永不过期' N8 d9 H" Q) ^# p) {
E.以上都不对2 s8 V& b+ F+ ~  w- ?) d9 s; Q
3 ]: ]7 _% B% T9 b" O
" f& E- n4 J0 U% G3 {9 Y4 ?
15.哪个函数能把换行转换成HTML标签<br />?  B* o& U7 s3 e: s: g+ x
0 a9 w+ P$ O% n8 t  Z
答案:____________
' J* e6 S  D) b% R
: X4 l# F0 n& _, [: l7 Z: o( ~$ Y
2 Z( k7 g' q! [& C. z
0 t' e9 U* N, [4 L  n答案速查; x! }+ V$ Y/ Q# V+ W
1:E
. m7 e( y3 e9 i) N) y3 C3 o2:setcookie/setrawcookie, w/ y9 ]3 k( _: L$ P! h
3:B
# T. g" x0 d! P! }8 C4:BD/ c) x% d; x8 G. J+ S
5:BD
7 V- u$ F( ~# C+ L" y6:D" B, g/ D$ b0 x5 O9 \9 ?
7:A
9 f1 }- s  [, o8 o; B( X8:B( `- \, D! v7 H2 [1 T5 E! t1 `
9:C3 [3 I( x( [7 K) U9 o( q  U) c
10:B
- y" e  ?6 F" o( ~8 j% F11:E
6 F$ J. v% @  K+ x; |12:A2 ?7 ]2 J" f% }
13:BD
9 O3 A2 y" W  z14:B  L* ?' }* t+ J0 i
15:nl2br6 ]7 R) j. P4 O" A* R
, t' W! k9 C7 i0 A* n' z
4 {7 X$ N% G4 H+ i; |
3 Y! w. E9 k+ m& B
答案详解
( c$ n! P5 _8 P0 c+ N$ w+ _
  V7 H- G; S: j, H- l7 `1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。5 |) g; {2 o' d& q

% s  J. W- B- X) B" L2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
8 l9 d' O/ z' U$ j  @* E- ^/ L
6 W4 {! W4 L& r3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。# M0 X& E3 Q/ S
: B% Y3 l% o" G/ i. E: ^
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
6 ~7 M6 `' v; y( h, }/ w, r
! X) R" Y, S) x; `5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。- }* o& J# {$ a" ?1 T) \

* [) R+ k+ o8 {' {! L! W3 T6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。$ a' F! v5 K) Q. q  W& s

) X/ [4 J. A8 q  o: [2 y7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。9 c. P2 X3 U5 ]  l

" @& n3 R; x3 [0 g3 X- v2 s2 M/ X' w8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
+ U+ n/ f# G4 ~& P! m- Y
! H  C  O' M% I' u9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
6 v$ J! d5 k. q9 h7 ]7 E$ N% _  n
2 H8 w' `4 A4 |- S0 a9 [10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。. g; h! {( S$ L9 \2 y

6 q+ b. c% p) Q( x11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。  ~; W/ D/ M; O1 h6 i1 d

4 A  ^  O! V- w. l* i9 X" _3 }12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。- V  h5 l# w. q4 X! x

5 p2 y( L- z6 I13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
; x5 `( b5 h$ o( K) f, p: O0 s* O3 i6 u7 i) x9 \  e9 [' \
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。( o! l/ o' Y$ t; \' T: j
5 u9 Q! A7 ]" x; S7 v: n
15.函数nl2br能实现这个功能。




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2