Board logo

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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
. J, g! }6 U8 }与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
4 F7 }7 l7 y3 L0 L7 \5 F一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
: T9 d. j0 y" W3 r, o( k( F
: h; D3 z+ t( r9 K" U- e) v/ F" H; G6 j$ j
问题
  [/ Z' w0 {7 V" b# I5 T% D0 R% K4 j
1 V: _4 S1 p" A- @9 K/ e1.如何访问会话变量(session)?7 B+ c, h) O/ E; V9 K

' J! t" N! c' K, @4 E6 aA.通过$_GET% E+ v% E* v" @) K; _
B.通过$_POST* V0 R9 u* V! v8 b5 `+ v5 f, L: a
C.通过$_REQUEST
9 W" K# w+ v  ]* k4 K1 }# g7 nD.通过全局变量
: ^' Y6 {# x& C$ Q& b8 p2 hE.以上都不对
  D. a! `# X) W; v% F7 _" z
$ j% ?$ H& Z% v5 w% M6 R: A# ]6 K: L+ R. k0 h2 f: b* }
2.哪个函数能让服务器输出如下header?( J* B$ \, @0 s8 A
8 m. |  @1 W* e. U5 j- S1 W5 E
set-Cookie: foo=bar;
! r3 |0 d0 X6 g$ g& U3 D& m; |% L0 s5 t
答案:_______________6 j3 O& [' r  c( q" S. S

4 i2 W8 F2 e. g$ v2 X# g/ M! B) I" |) j+ f5 Q. i- C3 \  q6 n
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- G7 v5 T  n, |# _9 T# m" N/ u9 V; [+ o0 D
A.通过HTTP_REMOTE_COOKIE访问
1 z5 K$ P, O; S  r; PB.不可能
% R" e' y" P7 X! IC.在调用setcookie()时设置一个不同的域名) m9 i8 l) A- w+ A: r9 Z
D.向浏览器发送额外的请求
) h, o5 `) n. T  h% }E.使用Javascript,把cookie包含在URL中发送
8 M3 X4 ~, g9 R2 Y, O. _
, x- x6 k0 d% \/ ?1 c- o" R, G$ }
4.index.php脚本如何访问表单元素email的值?(双选)
8 E& ~5 y5 ^2 E' v# o# r* d) G# Y9 J) B
<form action="index.php" method="post">
. r: K+ f7 _/ I' X+ y" p- W9 a<input type="text" name="email"/>" P4 m" p, T4 S1 a  \
</form>, [% z8 Q: l+ r' A+ ?- p& b
  Y8 r# u8 Z" R( ?2 S# _( a% u/ {
A.$_GET[‘email’]
* G9 W) m+ V- QB.$_POST[‘email’]
. O$ s, t2 S4 ^% eC.$_SESSION[‘text’]
* I7 t  }! W/ ?D.$_REQUEST[‘email’]
# K) s: f% C  q' d3 D( G4 `6 Z5 }E.$_POST[‘text’]
4 w+ F; p: `" i7 k! e1 Q1 ?; e4 t$ K; J

5 M, z+ H1 y+ C* j( p5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长/ n# l) }2 F, u" C6 b
B.没有变化
) |7 B0 o8 B: @6 v+ Z. s2 b! JC.在浏览器上打印该字符串时,尖括号是可见的
, u) y& B- j# P7 t$ T$ l" AD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
9 T5 u; h* @, U- mE.由于调用了htmlentities(),字符串会被销毁
/ g* h, X: M. [' s0 Y* l% r2 x7 n2 X8 L; I

$ _2 l$ E( b0 }4 L" \/ J6.如果不给cookie设置过期时间会怎么样?
3 m4 o" I& x, ^( c# x( e5 w% Q
, T+ B; P3 X1 I. i$ ZA.立刻过期
1 s3 l& \1 _5 ~- XB.永不过期
+ ?) A. K& m' B. BC.cookie无法设置' m" x: @& G; g* J! P# |* o# Y$ _
D.在浏览器会话结束时过期
" E. t4 g' x7 B) Q# q" A4 |4 pE.只在脚本没有产生服务器端session的情况下过期
- e2 s$ F8 v/ B; ]7 ~- \  @
8 H9 t7 }7 n; k' A" N; m* b
- z& A+ F7 X0 q, J7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
) g3 A* V  S) N* [; wB.Array
! B$ T) W. Z3 rC.一个提示! Y* Y; k& B! {! ~6 C" Z
D.phpgreat; C7 a, l+ B8 s* A' o
E.greatphp
# [7 h, l3 a1 t2 o/ `2 q
6 Y) X, j* g+ Q9 k, C" U  k1 L2 V
$ S. h" l% y8 g8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
0 b! H$ l, b4 R. R! d
. c" O. h) d2 v$ `, E, SA.这两个是明文传输,之后的信息加密传输
- Z. d+ s9 R8 y( B8 Z- lB.加密传输8 j! q& f  @0 i# e7 v5 L9 C4 f4 @
C.URL明文传输,查询字串加密传输8 }0 @2 W; C# f: v; O  f' U
D.URL加密传输,查询字串明文传输; C" A- z  _/ p: L
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
* A5 P+ X2 J) ^* b4 g1 G- w  B4 ^  c% r
, x8 R2 a; w" {1 |* W2 ~
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?' D4 L3 o0 k6 C3 P/ \! Z- {
# _" Y% d& T/ I: L& t
A.它们组成一个数组,存储在超级全局变量数组中& T& Z6 O1 b$ ?4 g
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 y. x" M" B1 ^8 ?1 KC.第二个元素将覆盖第一个元素
7 \- J. o; D2 yD.第二个元素将自动被重命名
1 Z0 V& F3 p- F: {' sE.PHP输出一个警告: o, |9 W7 R  n7 q/ O% D0 a$ F
) l+ g. G9 v1 Y9 {' }% P

; P0 `/ Z9 g2 \8 o$ Y) G10.如何把数组存储在cookie里?# i- Z/ l# Y2 ]
4 [/ I' ]0 O! k
A.给cookie名添加一对方括号[]
( U3 v9 z! s# \B.使用implode函数
+ [4 s, ~0 D! L, V6 G( ?C.不可能,因为有容量限制0 h) o) Z: \! `( Y+ Q% z) T7 ]
D.使用serialize函数
+ b4 t2 o- R& n2 {9 H0 f( d* T  }( XE.给cookie名添加ARRAY关键词3 w3 F( ]1 O& W" G& s7 t# u" W
% g' k: Y7 Z' u

+ `: m% b( V3 Q: I  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 h! ~1 O0 h  q7 }: l! x6 s" W
B.1234567890# N5 J( K: \7 v( u0 c
C.0123456789- l! s) h+ C# c- R$ g8 c8 Z4 ]
D.什么都没有
( p8 Z1 o3 Y6 }$ }5 R, Z3 yE.一个提示. |) E' q  t. ~. o

6 Q; k) Q5 [& Y+ @
3 {' {% i- v, w1 E+ c12.默认情况下,PHP把会话(session)数据存储在______里。. L2 a) m6 ?; @# e4 S; E: G8 N

8 Q/ g8 l" w4 l( UA.文件系统0 ~6 ]0 a5 R) G& z. K
B.数据库
  w7 U0 w. f9 }% y" LC.虚拟内容
' k6 a: o: `. F7 w: b+ oD.共享内存
* J8 u, z" R: m# J( K* q. rE.以上都不是% f. T3 M+ X$ z; V+ {4 _  ?' a& W) K

9 Q! I" q9 |& h! s* k
  w3 s5 d- d4 G+ a" x13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)8 w& r8 Z$ k8 _0 X
2 W+ @( p! O0 h  O* v5 [
A.浏览器的程序出问题了
5 p) E' o, ?3 U& ^: p! z5 C1 B& c6 T6 jB.客户端的时区设置不正确
4 ~; o, r& C- sC.用户的杀毒软件阻止了所有安全的cookie
$ J* k. {0 n$ _! {2 p9 G% G% SD.浏览器被设置为阻止任何cookie) s2 P4 n: `8 B7 d3 _
E.cookie里使用了非法的字符
' G) M: g. w: v2 \" d8 N9 b, E  S6 C, b4 ]
1 U0 z( D4 e1 [1 C  t9 j7 W
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
) R9 P0 k4 n! c; L# v# i6 B& z, B0 M7 j( u! z: F* e9 S
A.1440秒后
9 g( ]) j6 c& CB.在session.gc_maxlifetime设置的时间过了后6 Z! ]$ g0 [" p/ Q; i* j& Y5 P! v
C.除非手动删除,否则永不过期
" F: K0 ^7 V7 E7 I; e' _0 |% zD.除非浏览器重启,否则永不过期
2 B% S  s' c8 QE.以上都不对: o& b/ y6 @; b! {! \3 @. k2 g  u( y
) ~3 T. A( ]/ }& w7 Q! I9 U5 Z
; j5 w! I5 ]2 I7 V, j
15.哪个函数能把换行转换成HTML标签<br />?
/ w' k: i& Q" b) m7 k: G$ j2 `6 L% W3 [* ?: ]' F; q" O
答案:____________
$ N5 [2 u- z' z6 ]& P. L# J1 R* ~# q6 A$ s# U* e' M) w

. n6 l1 v& I7 Y+ c1 h- v6 y) A1 T( p1 j  q- X9 @+ X) A5 Y. v
答案速查
$ m- d( c8 g- @  L- c* p$ z$ k1:E5 g  ~8 m+ k3 H5 r! Y& _8 v% Q
2:setcookie/setrawcookie
+ \7 G/ N7 b; U# M% z3 p3:B
1 g) A# l/ i/ z" F0 v: P4:BD2 ^* s( M) W, {
5:BD
: |: [% F* R% o9 W( f, K; F6:D3 ?( }( S/ t3 ?# s& J
7:A+ A; b0 O2 b4 `: C
8:B
0 _1 o2 A' u" P9:C
7 U4 S* V$ T4 q7 c2 ^1 ~; |! T10:B
7 P. n: p- [" P. u8 v11:E! a2 h$ |, f. ]0 q
12:A1 Y& A$ y0 B' X! C8 i
13:BD2 z% _$ F3 v: s0 f
14:B; d# {8 u5 ^$ z* {
15:nl2br
" K; Q: q0 c0 V: y% `( p. u
  F7 i( J" Q' e3 ~2 O
( w/ S1 G! a, L% G7 W$ D" i' C: \7 c3 `4 }6 E& A
答案详解/ J& s! ]# L4 d& g3 O

* W, z; g+ I6 |' L* T6 M1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。" d4 u5 y$ f' ]" r6 G6 {, n
* V4 N- ~* m5 R: D  T
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。/ T) ]; @' D' a5 ~. y( r

5 t" U$ J: K! S% S' ^& \3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。: p$ x8 N3 B, d' q
0 r) Z7 U6 y9 J' w6 J* {6 z1 M
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
- E7 H+ s: f/ W7 p$ j
2 D8 g; P0 @% e# i' a2 |' |8 p' R5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
* x0 v  Y2 g* W2 L* ]9 N2 Y
* t/ ~* D% k4 m  i- {0 N6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。7 k! U9 W" Y, |: z" w8 Z$ {
. l1 [6 {( G3 T: e5 [# {3 x; Z8 p
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。  V2 c) a9 _/ \4 i4 {
( N$ e" d5 A6 w* x
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。8 S2 j8 j; e. p/ a  Z

0 e9 ]) E  U; Y9 I$ M4 C4 A9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
7 c% G" N! N$ n) ]1 k4 g
3 \& S6 o3 d9 e& T7 n' K10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。, T" W; S9 V0 W7 o. Z' r
& ]: Y# b. X* G
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
: s. z$ U& n) U0 p: {8 }2 @: r
" A8 y8 A% d2 C$ L! \+ f12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
3 |9 e0 {# j2 b: I
3 _/ C7 `) l3 a& C% z) S13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。2 o* f) V4 O. P, M
) W' u! V# t% u4 C2 }- r
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
$ V- u6 l. }% X' \7 |: S% K+ G+ L& l2 z1 p0 {5 ]
15.函数nl2br能实现这个功能。




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