Board logo

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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。2 Z5 }8 P# R4 h3 G  Q# o
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
$ e! T, Y1 o' r- ]一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
* O, }# M+ y1 \
) G! r- X3 W+ X7 W5 c% Y7 ^1 L' k* N- U% Z
问题8 Z; I/ p' s$ T; O

7 M, b) d" F) K! `& @1.如何访问会话变量(session)?* [8 s1 P) J: E! ?! j8 o0 w# H" _
  a: [* T  |# g9 G
A.通过$_GET& o) T& q* N, `
B.通过$_POST
; m7 w* W9 A3 d+ z7 rC.通过$_REQUEST
/ a' A. V" r/ F& ~) DD.通过全局变量9 [  `* s3 }  S8 Z( a
E.以上都不对! _. I2 u8 Q: p
5 A" Q4 Q3 t0 G6 f% I; g

6 C( p& c; r  p2.哪个函数能让服务器输出如下header?
/ P6 T6 X. {. h" r0 f( h
# u$ _, _# u# Z+ T5 `0 hset-Cookie: foo=bar;
5 E) u2 C) C! A2 s: T& n
$ r. Q1 a  W& q答案:_______________
6 d5 ^: p+ h) C& Q4 x7 w
+ P. ^4 J$ E( S9 h* ^' D8 ~/ u/ ]
. q% n+ v; A" v  K3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?; i- q- m5 Y: S  W1 Q. Z: i8 X
5 d0 d* ]+ e! o. H" D
A.通过HTTP_REMOTE_COOKIE访问  z" l! ]* j* X" d
B.不可能# |1 y& n7 M/ _9 Z) J
C.在调用setcookie()时设置一个不同的域名7 Z9 s* h: B9 m) w$ I
D.向浏览器发送额外的请求0 j# Z, I% G' c$ I# @* w. s
E.使用Javascript,把cookie包含在URL中发送
# M* \- C4 u) Z* h9 l$ o
$ a$ Q: P; r" |1 s
3 K8 z0 x6 X, z* D" ?4.index.php脚本如何访问表单元素email的值?(双选)9 P4 w9 L7 f$ J/ b, O1 C5 \, _3 v

% P, ^9 x# z; @- ]% i<form action="index.php" method="post">
: i/ G+ x9 r4 J  W& f<input type="text" name="email"/>/ {7 s" \0 O5 k& @; t
</form>$ _# S6 p6 e, R. }5 z
' C2 f+ n4 Z) [: Q
A.$_GET[‘email’]# l- t( V# c! o
B.$_POST[‘email’]
2 X* O% m" q. UC.$_SESSION[‘text’]$ d( [$ L' i- |7 K' R
D.$_REQUEST[‘email’]6 A* W2 Y8 Z+ I( i9 O
E.$_POST[‘text’]
0 Q' L1 N" P, ~! c' y+ D$ _9 o6 m* i- n# E/ I$ f7 d7 y
; e9 ?/ n& \8 R4 ~% R
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长6 w0 u! \) g7 ]5 j! U' t- x
B.没有变化
1 T& [5 w& T; e( |  @% u% |C.在浏览器上打印该字符串时,尖括号是可见的
- z/ ^3 J! `' qD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见( G( C8 D2 I4 \3 A# H) _. @7 {9 D8 k
E.由于调用了htmlentities(),字符串会被销毁
7 ?$ g  M! Z3 L3 z, ~4 A5 ?! H+ I' s% T2 h1 e8 k
* j: d6 V2 Q8 p, v1 A$ k& ^9 e
6.如果不给cookie设置过期时间会怎么样?
3 O9 G' B5 c- e, A5 o3 u
. G7 r2 E+ M  T" }6 \A.立刻过期  v- m' [4 J, D1 d& z+ V
B.永不过期
2 ~7 b, c- @5 ^' c' v5 X3 C) ~9 ~C.cookie无法设置
4 x7 B! d- U9 V# U& JD.在浏览器会话结束时过期2 j  x6 y& A; M3 B2 |0 [5 G! i
E.只在脚本没有产生服务器端session的情况下过期! d5 k3 T' h+ f6 t1 O  v4 W; r

1 W/ R) w/ u' Z# D4 K: o" C5 ]
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.什么都没有: y3 l3 Q6 f" B) n
B.Array
+ o4 Q# T. I7 ?6 @7 g  y9 nC.一个提示
; `0 |+ b3 G  w7 wD.phpgreat. D: }* z. z9 t, d7 T6 q7 m
E.greatphp
, t* t4 w! Y4 g! {
5 U/ C: t$ y2 W& y, ?( f  c( G$ J" F$ O4 ]# Y
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?. q( k, d* r3 k5 U6 x2 ]: x
6 S: }0 T6 A/ n! I
A.这两个是明文传输,之后的信息加密传输
, W: W. R. b3 l* X# B  JB.加密传输/ ?7 y9 s' ?" K: O
C.URL明文传输,查询字串加密传输
! H$ ?3 Q4 t) ~5 V0 E. d. J  pD.URL加密传输,查询字串明文传输3 y* U+ K' s9 O' ]
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
0 f+ J- _8 B7 ^8 b8 M. Q) o+ J6 d
' q7 Q% S+ D8 \, |5 O" `" o3 f4 S3 x$ u
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
5 d8 g$ G9 b% h% C8 b+ e! J% o/ l
3 f2 i+ `1 Y  TA.它们组成一个数组,存储在超级全局变量数组中
: O- X. Y& ?$ \7 _2 t) {B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
( a3 L: I( T# G3 o" lC.第二个元素将覆盖第一个元素
2 c' E+ k9 R: X8 v. D" N' gD.第二个元素将自动被重命名
$ P8 A8 c4 p7 f0 X- OE.PHP输出一个警告9 S- m0 ^# f- L% x+ G- M! h) q
1 |  m* F; j) E0 D/ b: y9 \% h% C

! h7 v1 \% N" Y- S0 F10.如何把数组存储在cookie里?
8 V2 G! U! Y* _4 {
- ?$ x) z( |9 M/ ^0 CA.给cookie名添加一对方括号[]
4 f: j0 N' k3 G; ~5 S" w' A/ jB.使用implode函数
" m3 @" B0 C8 H# Y8 H* XC.不可能,因为有容量限制
  n/ s( o0 ~( S2 @9 n/ ^D.使用serialize函数0 z3 b+ A, Y, e6 V
E.给cookie名添加ARRAY关键词
7 w! b/ ~3 k+ A, [5 ~$ f. H8 `8 V1 ~% s- ^/ @
$ Q& [( x& W: f) y  @) i8 k1 A
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.123456789106 ^' Q7 k4 e9 v7 {1 n# P5 T- A
B.12345678907 n, K4 J, L7 W. x" p% f4 g+ [
C.01234567898 ^: l$ o* o9 _8 b
D.什么都没有; s3 \: z  I5 F0 {* l# ], s
E.一个提示
) u0 @7 a5 _# d! z& q& w5 L5 |; ^2 U# z  m
5 K/ d0 q! k" {2 a" L& `0 J6 q
12.默认情况下,PHP把会话(session)数据存储在______里。
* @: K( S% W  `, l/ _6 z* j* F6 v& f. [. b9 ~- \% [
A.文件系统
: J- n' d1 j, V! T) X" I& ~: h1 HB.数据库3 J& r0 h7 f& [/ f6 O+ k3 z7 i, e
C.虚拟内容
0 p6 \! Y5 \/ {. \D.共享内存2 y" r5 E2 ?  o  B- \
E.以上都不是+ q4 w  v* H' t2 ]7 w
1 h% X4 [& M2 V4 u5 c2 c' i: R7 e
: P  f' j; S2 q  m6 l9 `/ u
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)" H# F6 ~. m, b& N$ J! a/ Y  m( k% E) b
0 e: {, P! n$ V+ Z7 l) T  [
A.浏览器的程序出问题了) E$ X; h/ }* i* T1 |# h% W' v
B.客户端的时区设置不正确/ T/ X% u% h& a% Z  x
C.用户的杀毒软件阻止了所有安全的cookie
! a1 j% q8 V# H0 k+ dD.浏览器被设置为阻止任何cookie" r- N6 `) g  Y! ~
E.cookie里使用了非法的字符
, Q- T4 Q. ^/ B  _& \
9 B' ?2 C' v# @+ @! l& Z0 y' u; j
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?/ n8 w- k2 H$ ~# b" d5 m/ \

# C- c( K, S8 |1 p4 @A.1440秒后) I* a6 _# O2 Q8 l9 R& T
B.在session.gc_maxlifetime设置的时间过了后
# S9 o) M6 t. v+ [* wC.除非手动删除,否则永不过期
3 j5 M9 {0 l. ?( \D.除非浏览器重启,否则永不过期
  q8 c& i6 a2 v  J0 I* S: w/ xE.以上都不对
! r( h' e/ V. O, G0 u
  {4 t& D8 |# o2 P) q
2 y/ H# S9 y, D15.哪个函数能把换行转换成HTML标签<br />?
3 ]/ ^% f0 n- D. d$ V& ]- L' a3 N; a5 A0 E- N. P; a+ _0 g
答案:____________/ F& R2 o, k5 V9 Z2 M- ]5 }: b
* L! M( x- B# K3 A2 S

. d- {% F( B0 ?$ R, H' l" Y
& g3 j: ]; c( E! x! t: O答案速查
3 E) ?, k& h  j, y3 w% l' T1:E
  H4 J& h8 W  e/ p% o5 t  Q2:setcookie/setrawcookie+ e1 n: I2 o6 m
3:B
: p, q) z! }1 W. E# x9 w4:BD9 Q% G2 y! y) z
5:BD
: _0 G: n4 L6 g9 E6:D7 ?( q  @9 l! W
7:A) C1 M; K$ e. Q& |5 Q. }! ^
8:B0 _- e% r9 x6 g& F  T5 ?# |
9:C( h+ ~1 x0 W9 B  ?8 z# T7 B$ u' f6 b
10:B
' G- i; Q& p$ f: I11:E6 T( b, t: @2 {: V2 Y; x& T( L5 a
12:A, g  x3 R0 T. H, U( A& p
13:BD2 R: j8 x5 o% k; Z
14:B; \7 F/ Z" |& N* F
15:nl2br
" u4 y6 R% Y# s3 e* K
- p3 l+ U0 D" c# f+ E& ]5 \  L  Z8 \! x3 d1 R7 C
& f( R) X0 I+ `1 C. j+ j
答案详解/ O6 V. L/ B6 N. ]: ]% |
5 T; k2 K: J" R- k0 i9 ?' X5 m! x4 g
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
* ]( c* g. B$ F# E/ _- `6 {" E- f
; _% j& e' n' i; O# d& o) C* u2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。$ D6 A4 q5 a' q  H% b
2 A! S9 U- `  ^# L
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。6 O9 [; J7 l& {" \" {5 l. C% H

* a4 h3 f- I- X; W$ X+ P4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。* ~7 \. A& O* h  [0 E9 F0 ?
8 F4 e6 k1 L9 r6 Q
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。/ J: Y' m9 t- R5 e; K- Y

7 N/ r  O; O' p9 m( J6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
4 [0 R* \, V+ }5 H8 l( a& ?; z) L& n% ^! a0 h( X
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。' O2 i" v( s( `2 e( s

& w* F8 V9 O. j4 i' v/ A) p9 N* o3 Q8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
; k2 I) j+ s, m' K" U8 z! u# T
6 r& U! c2 i; ~$ |2 M9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
3 L# k9 u. {3 a' R0 j# W) i, k4 B6 T* i* g0 q0 K$ H8 H
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。3 t5 u3 a0 [! h
7 t# F+ K$ Q$ d- n9 C5 _9 @# g
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
2 Y- C3 d' `4 m$ G' p- T) X* [! Y$ R4 E# `# T
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
2 b: ^! c4 [- n% h. B: [5 i( w, _/ \
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
/ @) f+ a) G% c7 |; Y4 t8 p! c2 }0 s
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
4 C! O9 ^. |+ j8 Z8 t1 R/ i# t1 Q
5 m& \' B' V" S, N15.函数nl2br能实现这个功能。




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