Board logo

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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。8 a( Y& z! {2 k2 J4 ~9 ]6 E
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。0 m/ O; Y, J+ T; [6 D- {# G7 h
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。6 m, ]6 B( F0 Z& k3 O. a9 S

3 t3 r2 k- u% x$ [- n$ H8 c* h0 y7 H/ O4 i' d9 l8 _
问题, I; E+ l  F+ J* b
" Z& R8 A" ~8 ^
1.如何访问会话变量(session)?
' o' _' I* X# L
7 j9 v' q# |" M  ]( eA.通过$_GET9 o4 h  Q: ?8 B: Y& Z
B.通过$_POST
' ^) `/ G5 m! F2 H9 I. F* l( rC.通过$_REQUEST6 U! ?7 R( _0 M& X8 ?
D.通过全局变量
2 }- f. e1 T* qE.以上都不对
% f1 Z! l, y, E" `- b0 B
6 v! R) ?9 N. S* p) q. L) Y. |3 _- A- B  b5 K  m
2.哪个函数能让服务器输出如下header?9 W4 P4 G* Y3 S" d1 N, q% A

" E/ i' m; v! yset-Cookie: foo=bar;. b$ r5 Q) s1 S6 K4 H8 E& ~2 W
+ ]" M( v; K; B; }/ m& @8 H
答案:_______________
1 W7 [6 H. a8 _4 O. Y! o5 O' X. w/ C9 k* Q6 Q

: ^; }2 W* H( L3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?- J" z4 u# s3 k4 C0 q! k

6 B0 M6 n7 t* o/ p$ vA.通过HTTP_REMOTE_COOKIE访问9 A& L: f9 }8 ]+ f% v. `( {
B.不可能' I" X3 x' C2 t3 b0 i6 V2 u
C.在调用setcookie()时设置一个不同的域名' m+ C  q* {/ k5 L, z( U' N# Z
D.向浏览器发送额外的请求
: d4 O* A1 T$ D" yE.使用Javascript,把cookie包含在URL中发送( I# H  G8 |; [) h2 G& y

7 _  }1 \+ S" r: P5 j# i! p  j& s  D' l1 A2 q- O& j
4.index.php脚本如何访问表单元素email的值?(双选)
) F% q* _! u8 a7 Q  H/ {
/ y% G. t5 R/ B1 ?1 `<form action="index.php" method="post">
- J5 Y/ A9 S0 x8 |6 E& S) E7 M<input type="text" name="email"/>
% c8 W4 ]( \4 x0 g. l6 {" p</form>9 H$ h$ N5 \* c/ Z7 |. o3 s: M

( F1 B, o: Y8 Q( h3 \) yA.$_GET[‘email’]8 F% w& I! X) n( X, @& |
B.$_POST[‘email’]2 |* c  I. e+ ?" ^& S
C.$_SESSION[‘text’]
! g  b. b7 V+ yD.$_REQUEST[‘email’]3 X! |* `& T! w+ t/ |+ L& J
E.$_POST[‘text’]
. X$ U0 q5 [* O! P
1 d. O5 P' X6 X
* N8 x; _2 P% N8 }# e5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长" ~! P- m, f% B
B.没有变化
) h! |+ i* @  C' s0 z" q* xC.在浏览器上打印该字符串时,尖括号是可见的, {% B( d1 P( Y
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见, _/ `4 J7 b# t4 j1 O: Z% L8 E
E.由于调用了htmlentities(),字符串会被销毁6 l1 ^% t% T; Z1 v
3 [/ J4 `1 L% p! }( w
. t( W/ r% L' F4 t, [2 _
6.如果不给cookie设置过期时间会怎么样?
7 Q4 u$ s0 P( ?- c4 z; b* W& m& g5 p1 C4 }/ ?
A.立刻过期  }1 v. M; x- |/ o
B.永不过期) L+ i8 ?0 d4 J% G
C.cookie无法设置
, M% k% Z9 Z( j' D9 s4 {D.在浏览器会话结束时过期
; ~0 J$ Y5 ~7 g4 U6 a" FE.只在脚本没有产生服务器端session的情况下过期
& w% x7 ?- r  O, {) p! l) y1 v7 s
- C1 ?: m  O* k, v( n
0 m9 h# I; Y3 L  }! n7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有6 n% N. S/ y& o2 ~+ ~4 T; q
B.Array
  v" z; V  H  V$ g! DC.一个提示; j* @, Y& Q/ E4 @4 c
D.phpgreat/ z, [' p/ o! U  Q, W  i
E.greatphp6 p0 p% u- W6 m: n4 h. U  g$ {

( ]8 j0 m# R1 y+ ^3 a) e8 L" r9 p" D7 d$ {
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
3 R) w. d7 ]0 A& ~) d" i9 m& X/ q" K7 H; B
A.这两个是明文传输,之后的信息加密传输; o8 Y: e& q* C$ A& |# e
B.加密传输  N  u$ ]3 `* A
C.URL明文传输,查询字串加密传输
+ l+ J+ X  ^3 ^" c  ]" `4 I( jD.URL加密传输,查询字串明文传输6 M9 ~* {5 H. A# e' s2 E
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
! ~5 u% E) r% l4 s' z  R0 j% l
8 L! `0 F9 t0 U. j- ^$ {) w8 `" r$ r7 H% x7 J3 L0 z3 E2 F
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?* _$ a% {5 ^/ R) k6 u9 n
% E; O; g* L5 i2 {7 e- L8 |) Y
A.它们组成一个数组,存储在超级全局变量数组中% s+ z+ A2 l5 \" a% n' c8 z
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中7 A0 e3 Q5 f. ^- f! F$ P
C.第二个元素将覆盖第一个元素6 Z" g4 V+ K: B
D.第二个元素将自动被重命名" k: E7 S1 l+ ~# i& G" a
E.PHP输出一个警告" ^0 h8 g) H& |
$ e! A2 b6 _$ c+ _9 ?

; n2 a: j0 [6 S10.如何把数组存储在cookie里?. r  V, d' V4 Z& }& R! V

$ d" x" m$ @' `3 M* S. t6 BA.给cookie名添加一对方括号[]
6 R8 u8 M& X) a* g- dB.使用implode函数
. E$ g8 H1 k  m! x( m. `" oC.不可能,因为有容量限制5 S+ x8 w6 c; _# _4 m
D.使用serialize函数" o  C  L5 E( M
E.给cookie名添加ARRAY关键词
* [* j. O* z  |+ m/ J4 e/ i+ w- }4 p" @7 H# w$ r4 n8 ?
! z. S) u  w6 M1 L2 h: 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.12345678910  k$ f4 S7 l0 u- n
B.1234567890. d# _/ F3 Q( _/ v! C
C.0123456789
4 J" G$ I+ n5 ?3 FD.什么都没有
  D; x- p' X0 X2 Y8 BE.一个提示/ Q9 w% S: _- p" r, K

4 x6 C% _0 u0 K: K1 z; Z2 h
5 A% U+ z. A: a, ?' u. U12.默认情况下,PHP把会话(session)数据存储在______里。: }- f2 S6 R4 O/ Y! K

) e' X  o+ H0 u& U( OA.文件系统( h" C9 x; T1 y) G
B.数据库8 V; z& A. `2 ]/ k, _& a" o
C.虚拟内容
  L0 v' _/ F1 I5 _: KD.共享内存) D# z1 n! @3 H( v8 N, b, @
E.以上都不是- @# ~: @! Q2 o6 H7 ~7 X6 A3 R9 {

. k/ i, O  T. [4 j* a2 U0 ]) [- g
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)0 i2 ^3 ~$ h: f! P

$ p6 u2 y; j) j3 ]5 n9 @1 kA.浏览器的程序出问题了  c5 \& z# Y% g" t4 [
B.客户端的时区设置不正确
8 \/ _+ G. Y% L6 e" U% Q4 jC.用户的杀毒软件阻止了所有安全的cookie9 n3 O! F" m  U6 \8 I: X% b
D.浏览器被设置为阻止任何cookie
3 G& o* d, t7 TE.cookie里使用了非法的字符7 c$ q% h6 e) a& d/ z& ~, B! {

8 f* F) R8 h( \6 A! o& w0 J$ G$ f) o1 Y. O. R+ _& f( G6 t
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?8 i! l- l( u% H+ V( }. a

7 ]) a' J2 K; I. y6 b6 VA.1440秒后
; U( l* l0 g# vB.在session.gc_maxlifetime设置的时间过了后
4 N7 h! U9 `4 @3 sC.除非手动删除,否则永不过期
# g( M3 ?# a+ o' J2 ZD.除非浏览器重启,否则永不过期
: u) E" R9 f$ E: e4 Q4 C/ u0 AE.以上都不对
. k, L+ W4 f  q/ T0 y, R0 i
+ [+ J' ^7 ?* |' X4 y$ m4 P" K' W' ^  c* d& ?* x( C5 Q: ?6 @
15.哪个函数能把换行转换成HTML标签<br />?
2 o% {, y+ b, b6 F4 x/ L. n, i
  {3 Y& _+ S' G. p答案:____________
. S+ ]( ^* N; M3 u! Y6 c$ j8 o$ v$ i, e
$ J, ?) e/ b3 D9 q3 F, M

# M6 V8 s# i* t5 p" N3 [' W答案速查" l2 }( S8 R3 ~  b" A, w
1:E
1 w, B$ o! C6 T. @2:setcookie/setrawcookie1 I5 I5 C8 {# {+ O
3:B
) D7 W: p5 L8 k0 q2 k& H4:BD4 w+ x& @5 D$ b* F% \3 m
5:BD
1 |& J5 l: b; j8 N6:D
$ n- U) V& l6 {6 S' ?  G: T7:A
6 Q6 g/ y5 @9 b& J) |$ G8 x: c" D8:B+ o6 @) H7 r: c6 K3 {  Z
9:C
8 o+ o6 n, n" }10:B$ ^' h4 W6 V5 l9 Z1 v  L
11:E  D+ i8 s1 e) D5 H; v) {
12:A
- ?5 N( F9 M( Y. v+ b13:BD
. ?2 H8 L1 y3 K0 t$ I2 V14:B
: E. |# ~+ Y* `$ D7 w15:nl2br7 s5 k2 m. Q, w3 ~) S& q0 h+ w2 W
3 N# n7 B& Y4 K4 E5 z3 e

: K. S" v& W& _0 ]2 ?
& a$ a" l, c) E2 d) `# |答案详解  J1 O% r$ I! g" X7 ^

9 R6 N8 n/ v/ \  \2 k/ K1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
% A0 G) i- F3 D- v/ F: \8 u; n  m6 r( c% J- ~
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
' `+ m/ S& m7 U6 f1 x. V! B
$ @* M: \3 G6 M! `. c& z3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。* D, w$ H: v/ G, f- V* I

2 r) \: ~9 W- r* f0 |% I2 u4 v8 O4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
1 J- w' L% b0 k. j1 x$ d% n4 z; y$ U9 c% ?) u# C. S
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
' u  [7 W* M3 S) J/ _: t4 l. E7 k: n
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。2 t; x+ D/ d4 {$ x/ \% D% A. e

+ f! d1 L( \9 X5 Q5 H+ Y1 C3 A& ]: Q4 L7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
* k% n2 Z% U# J: L( U7 V7 U& _8 S1 V1 E. q. r) D4 j. B
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
( V  _* p* \0 ~) I2 D0 P( \  a4 B
! x" M' [# i5 c& {9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。1 f/ n3 z8 z( e; }9 o

' C5 d: ]8 C! S* V- m10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
  A' }. j7 v3 Z+ i4 j5 M, e3 W: X1 Y5 K! E9 g
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。" I( x6 c6 D. O1 j. |
4 W, f4 K/ \9 L0 g4 l/ g
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
2 R+ W0 B( ^3 O, x6 i* o* w
9 L  T* y5 Z8 r13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
; X9 d8 z% v7 F2 k8 b3 j& J$ s0 \8 V# o! W4 W- Z7 ~; J/ I
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。' ~0 M- s: |& H* o9 L: _
/ L, X/ a& g' H0 s, ^
15.函数nl2br能实现这个功能。




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