Board logo

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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。: x& R" M8 r5 Y5 c2 Z
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
+ {5 v. F" H' m( N一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。2 `+ f1 S$ _/ g4 F0 B' {
2 ?1 {+ \+ D7 C) v$ e6 t8 S% J. y
3 I. A& N. |5 \9 ^; `+ p* z% f
问题
8 V$ h# X9 q+ }' p- z6 s- E
! W8 w/ |$ ^. ?5 |2 q. A- z  P1.如何访问会话变量(session)?& ^, N8 D, l3 P4 C
/ v- y' M2 k: f% j
A.通过$_GET
" ~: B' G" a8 g& E: X9 bB.通过$_POST
$ s7 w- p% V& o8 ^5 i) I- ]C.通过$_REQUEST$ W1 X: u# N! m; T; |" g
D.通过全局变量( }: r6 E3 @+ u- {3 [
E.以上都不对
1 l2 N8 H2 M3 W  P7 |0 e; s" b( O2 D+ l( ?% M! q

3 f+ A4 M, I3 l. P2.哪个函数能让服务器输出如下header?# D0 o0 K, V" G. I3 q

% {+ T: }& k+ Z- P4 g( e" J  [, wset-Cookie: foo=bar;
4 b; b' T5 V1 c! @' W4 H% r3 E/ Q7 K! O* d. \& r# e
答案:_______________
' ?+ `. S6 Q- p6 B1 h5 y* l
+ \  d6 e) D  j0 b; R% i5 T
# Q. C4 }/ Z. ~% N  E) W3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?8 \. w# A! |1 h+ m7 y

" I2 U& w( r0 |! b) w) ]A.通过HTTP_REMOTE_COOKIE访问# Z$ {8 V5 U. A; F
B.不可能
* p$ Y$ t; O' P4 oC.在调用setcookie()时设置一个不同的域名; L# X# L# y- I
D.向浏览器发送额外的请求
6 t, y/ g* Y) a, }E.使用Javascript,把cookie包含在URL中发送) B! d  ]+ U5 |" R1 D
, f# J! e6 Z5 I

. n! A+ h: G$ l9 K$ c4.index.php脚本如何访问表单元素email的值?(双选)
: M; L( `7 w, u2 y! S) ?& {" Q4 `  T6 C1 Q$ A* w+ \& @
<form action="index.php" method="post">
2 c8 ~5 |4 Y6 A8 k<input type="text" name="email"/>% f; a. Q9 h* K- V
</form># `* \% c* s: N9 v" J5 `+ V

8 p0 i6 l( m$ e! s/ s, _7 fA.$_GET[‘email’]. m& V! J# t7 E/ l/ e
B.$_POST[‘email’]
! a1 }; h# R7 Y& ~C.$_SESSION[‘text’]' w$ |  p+ k) [! B. b1 V( p
D.$_REQUEST[‘email’]
* _) |: Z+ n# s& ^E.$_POST[‘text’]( m! z0 k) i3 Y& f0 `

! N/ J1 [2 l$ |, f4 V: b- t
3 t$ f% m4 Z0 ?" E& e! I: o' H5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
4 k  i. D( F3 M: \) jB.没有变化
+ Z3 U2 x  E7 v/ O% I+ xC.在浏览器上打印该字符串时,尖括号是可见的4 V  I, P9 l- r9 b( C6 K
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见( @3 N1 U# @# X7 i/ Y; M2 l1 e
E.由于调用了htmlentities(),字符串会被销毁! U, v( ^9 r2 k# Q5 H& W
4 [; \4 L2 V$ L1 ~% W: W: b
1 [: Z' ]2 s1 ?) t2 ?
6.如果不给cookie设置过期时间会怎么样?
% ~. r' `' r4 Q8 Z  ^! `/ u) Q3 ^7 u  v+ }6 K8 P7 ]6 p
A.立刻过期
7 Z, C; d3 [  UB.永不过期
( p8 B' ^& N6 o- ]3 I$ t1 PC.cookie无法设置; a6 d* u1 u4 n) \
D.在浏览器会话结束时过期
9 y( f% x- ?2 K* P3 d4 hE.只在脚本没有产生服务器端session的情况下过期
0 z: v! J2 [; K* N( S  X. V! B5 ~4 Z

' P' L9 d% [$ |4 ~2 B9 \( |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.什么都没有
* B3 q% B/ r; I# q" j) k; a3 `B.Array( Y% Q. |+ _; _' D8 {" |
C.一个提示! Y( d- M1 r9 ~0 w% w. R- a
D.phpgreat/ d7 W8 T8 O0 s. W# T; m
E.greatphp: I8 k3 l+ B) v, m$ n9 U& f

& @8 U" ^1 H1 Q5 g# p! e
" D% d+ _  [4 s, |3 F0 ]/ I8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
. r3 j2 ]# {2 D. v# U1 s
! _! J# P: E+ RA.这两个是明文传输,之后的信息加密传输
9 |6 g8 b4 v/ h/ z7 |3 V" wB.加密传输; E0 G( s- I6 W1 a5 r3 b2 z
C.URL明文传输,查询字串加密传输+ c6 ]" J; m' |+ F6 H5 G
D.URL加密传输,查询字串明文传输
& z: i, g, f' VE.为确保加密,查询字串将转换为header,夹在POST信息中传输% o" S0 j0 s: u7 N0 ^
1 I  A/ `! O: f, R
4 C8 Z/ N0 J- I
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?- q$ K8 z4 U# U0 G3 N$ }) y* F

* ?0 e, {. n# x7 P  Q$ M3 hA.它们组成一个数组,存储在超级全局变量数组中
- W! E& \& t6 P% _B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
5 r) {5 w! h5 v: Q7 a4 ^C.第二个元素将覆盖第一个元素3 k' w  y( s* x" {) E
D.第二个元素将自动被重命名3 \: z8 u, t2 j8 C; `1 A
E.PHP输出一个警告1 B. e/ m0 H. [0 w
3 S, |" t& x# _9 f

& z# f# _7 `' j' n7 t+ z5 d10.如何把数组存储在cookie里?. Z2 N# e% u* M) y8 m# n6 t9 I
3 ?8 B/ b& D- Q% N4 V; g
A.给cookie名添加一对方括号[]; j; W$ u3 k' p  E* b1 q- j
B.使用implode函数' z. U! L  g( I- q& U# Q+ X1 I3 ?
C.不可能,因为有容量限制
, z7 {  T8 ?+ k# [& J- \: UD.使用serialize函数
) k; n% z* M8 O& T0 I. zE.给cookie名添加ARRAY关键词
' Q8 H! A8 _7 g# p, f: p" h) g$ o  k- |3 a9 S; Z( m

( |- g, I$ W. ?2 j2 d5 P% f. f& e) |% 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
, y% D) E% p3 u2 L' i. KB.1234567890
; G5 K/ L0 B& Z1 v% FC.0123456789
5 s$ I2 Q3 e1 }5 P( v/ KD.什么都没有0 |8 Z6 b. ^2 [" D
E.一个提示4 d3 l7 _; Y% o
$ \5 L. E6 f* q% h  y
# P7 d9 a& r0 O* R0 X9 `; ^
12.默认情况下,PHP把会话(session)数据存储在______里。
5 h( L( A/ h/ y: ]" N4 H$ z1 U( C
A.文件系统
) ~5 J7 @( x; y- d5 f- Y5 GB.数据库; `' x- u+ n+ k  m, Q: q! r/ O2 A9 D
C.虚拟内容
* z- N  ^, c8 I. QD.共享内存4 w8 G4 Q8 g6 V: Q; o! j
E.以上都不是% N/ B0 [, o8 |% o7 h/ E  p
' i/ h4 F& B$ c0 K% _

5 }) H$ }) {) O! V1 M13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
3 d: J6 Y7 w' H4 ]
# V% C: y. D7 {& h: y$ k+ NA.浏览器的程序出问题了
7 w+ V+ Z/ ~3 |B.客户端的时区设置不正确( N8 Z% f6 k  A0 \! N
C.用户的杀毒软件阻止了所有安全的cookie
- L2 |0 @6 T2 w9 b! j$ |: E) N: l! xD.浏览器被设置为阻止任何cookie
) \0 V0 ^3 i; X# Q' e: a- z8 M9 qE.cookie里使用了非法的字符
+ X  r8 w- u% R! |
$ X( v! F# ~' g; \
7 r( [* x+ g% E# w" p( z: C14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?6 f$ M& g+ t  F5 K- d# I6 i

; t& L% [1 t0 B' oA.1440秒后
+ n2 p0 c+ Y' J0 ]. BB.在session.gc_maxlifetime设置的时间过了后
1 L5 v5 f) B8 h% K: t3 P- @C.除非手动删除,否则永不过期3 k) L! o. M( {+ m! `) a0 v9 K. I
D.除非浏览器重启,否则永不过期. u  l8 e9 f! l
E.以上都不对
7 ^7 T7 t* \! V/ I: p9 M$ n% l9 L" P0 r8 V, }0 W; x3 t3 ?
  x' f+ Q- @! C( W; O" s* G
15.哪个函数能把换行转换成HTML标签<br />?
' c! ], e- M1 ]: s9 S  [* ~& B- T2 d
& w  M/ S2 |0 Y" s; E" X3 h) T% k! e答案:____________
; l: Y1 G6 w. f. v
# s( i" b6 [# }) K; j: Y/ W: S& u
! ]8 u/ X, A! a8 N5 ?
答案速查) ], e" N2 \! {. ^8 u& P
1:E
4 ~2 T: }7 j. i$ Y2:setcookie/setrawcookie; o( @1 d1 l/ |3 t
3:B
% ]8 l3 @) p  E9 T3 ~+ E7 T4:BD- x( q2 a( O  A6 N/ {' x" l/ P5 w
5:BD! D" M1 R1 x1 o2 }
6:D
! q7 C$ {) \2 `5 P9 }+ o7:A
- s5 M; \5 i0 i$ W2 M9 j8:B
5 \! G" t" U0 J% l% ^9:C5 N# }4 C" c- ~
10:B
6 q- w  V  E  B7 I: A! N) _1 l8 ?11:E: l; t( h- W# N. R
12:A
( I% _& n+ \3 ~0 T4 H13:BD
/ E3 v; B) h" w4 l4 T" y5 [14:B
0 E* I! J1 X; I- N5 p15:nl2br
2 ]- m' w2 `! r; W/ z' ?
. s, D0 z/ w- l" k9 q$ q6 R9 k0 K4 [$ g+ H# T1 Z  x5 _. b1 u4 o
2 E. c; I: e5 M  L- ~' a
答案详解
3 d8 M6 o; D: z( {* N, y3 {3 j0 v( R7 \3 f9 |
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。6 q. M! g: D" w& w! D
/ t1 ~7 `# M- {( s1 \2 l) o6 o; g
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
. {, T( `! n$ y% G
( R: P) V# N- d' n3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。) z7 }1 ~) N" X; j# g

2 Y' d5 o  t6 K: J4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。7 h& O/ y9 p6 L  ]1 L

, `3 {& l1 Z9 g6 e: o5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。2 \3 F6 A6 S  p! g, H! r
, ?& c. h  o$ v+ Z( l
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。, h  A7 p; Z8 f; g4 j
  E! |- q; P2 N0 b6 c0 v5 F
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。0 h# z6 [- E8 q: [9 F8 j
+ p& q0 W2 Z' E# B+ o4 G
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
2 \0 X, P+ O& J
& a0 S+ t8 i/ e6 S% y" |9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
0 x- I+ U  T( Y  j0 n( ]; r
; n! x5 P% ~, c" X; ]10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。. B, k( B: G% ?
" A) W) x0 w6 c% C2 _
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
4 _6 X, {7 ^0 u- }8 W1 x4 `* d% {% _2 u/ H+ |3 n) g7 S
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。' L  c( R& ~1 e  f4 j0 M1 V. I

  p7 w# V  |  B1 v6 J2 Q13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。, H: J6 v4 y* E" T# f/ @" |  B

: y3 y. W0 _# r* a' t" U6 x7 T14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。; M; `: M; i4 r4 T0 A
. `" b$ {# A8 H0 X1 k, `/ J. |! T$ Z
15.函数nl2br能实现这个功能。




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