Board logo

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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
# Z2 v/ S) m" W1 }) i- ]9 ^+ n3 W与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。. a! g0 f" T! V9 o0 X, d' S  T
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
' J1 X* d# n! f: Q+ f( h: C' G
. e9 B( H& a! d( j# L' t! G
7 o# u0 X, r: [问题4 k3 \% e0 W' h& \
$ X3 h& l  m6 C/ b
1.如何访问会话变量(session)?, m) X! C) x) i/ x

. x4 k2 }3 g8 A7 y: _! X( kA.通过$_GET5 g2 [2 m, r% J9 u& u5 `8 S' |6 v
B.通过$_POST' L% j9 p) A6 N6 A/ I8 Y
C.通过$_REQUEST5 s) K; d! n& U  r( S# w2 L: R
D.通过全局变量
0 S: Y" R8 M  V+ Z& |/ Q  AE.以上都不对
! K4 a" C4 ~( h% M( t! t
5 m$ e* c, }4 R5 D! j- Q" O) I0 o! ~/ D5 B0 ~% k, [; U6 n4 s
2.哪个函数能让服务器输出如下header?0 P; D' ?1 d* n$ |  s  f
5 N' z( T  f" Z8 G9 l1 P+ H
set-Cookie: foo=bar;
2 f; p3 B# l- P* a  q, |- w& Z  V
答案:_______________9 q+ }5 y; i4 F/ s

* ]6 {$ v% ?. \$ @' L8 D& u
  B" y1 N) p' ^/ c+ L5 w, o3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
) Y; a9 R# ]) ~5 g& [3 i9 L% d9 N1 b1 h0 ^3 y
A.通过HTTP_REMOTE_COOKIE访问
# ?2 y0 }; b9 GB.不可能
9 @# l& B5 }. \' B3 `C.在调用setcookie()时设置一个不同的域名/ ^$ M; `1 J  d$ ?' w! Q* E
D.向浏览器发送额外的请求
% R! N2 k: P4 Y/ OE.使用Javascript,把cookie包含在URL中发送7 A. `. X' K: S8 @
* ?# i9 C7 L$ `  z9 x
* T2 Q. o3 \5 L
4.index.php脚本如何访问表单元素email的值?(双选)
2 z, ]; X% a2 l4 W' ]& q1 h2 G! T( G8 B
<form action="index.php" method="post">9 w& J. }% M  F1 z% S
<input type="text" name="email"/>" g& G& C/ t8 K: S# {: X: ?! q
</form># _- Z, e  y  E, _7 v" O

5 C; {: _) C% c7 oA.$_GET[‘email’]
1 ?8 }1 w+ h/ Y. M7 TB.$_POST[‘email’]
# w: w7 c" W9 y" w( o1 UC.$_SESSION[‘text’]) H" |% H8 Q8 b8 M) e! |
D.$_REQUEST[‘email’]
$ ]$ h6 M0 q& Q( dE.$_POST[‘text’]
, U: {) ^$ z' s: @& |
- Q1 v/ E# R' o! b8 L7 h0 Q8 M2 C. [1 {7 [2 O) U9 W. J* o
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
& E2 h* [% R& G+ J8 vB.没有变化
3 u8 E5 o- ?3 Y* \C.在浏览器上打印该字符串时,尖括号是可见的+ Q( i6 C( e9 a( B
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
- I' F- B: H# BE.由于调用了htmlentities(),字符串会被销毁+ o, m% b$ B6 C" Y

4 V% X& B0 d: F6 ^0 F: D3 {
4 r- O: r& g8 x# C8 h  b6.如果不给cookie设置过期时间会怎么样?
" {) m8 z" I4 B6 s. n0 ~; A/ Y8 \+ ?
A.立刻过期* N* m* X- V2 B. F
B.永不过期
: L3 C3 K$ O+ H* D& i1 |C.cookie无法设置& s- y3 [% f( P" K2 E+ `
D.在浏览器会话结束时过期! I$ d& j" |, v! Y4 x$ M. d
E.只在脚本没有产生服务器端session的情况下过期; }0 v5 B* h1 R" E$ q# N- W

# E' @2 S: v" {8 \! ?9 Q  l7 @& y3 P9 ]) n# x: m+ k( o
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.什么都没有  C# o+ f9 ~' D# n, C" i
B.Array
% Q* K$ y) F5 Q: A7 b* I- i" b# b$ pC.一个提示) |- y/ w3 a) P9 _2 Y8 h+ f4 f
D.phpgreat) n5 L/ u4 A( D) X) E& Q0 {2 @
E.greatphp
" l5 [& f! C$ q% K' L. F; p  W1 I
4 S' D" w3 ~  }5 }+ w- _
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
8 M1 ?( {; [! E; d; v0 a3 d' `& n. b
A.这两个是明文传输,之后的信息加密传输
$ ]+ E2 s$ r5 c$ U' M* t' F7 x0 FB.加密传输9 Q  C5 H4 _+ C  Q* T
C.URL明文传输,查询字串加密传输
5 S8 U# I/ V8 d' hD.URL加密传输,查询字串明文传输
. J3 x5 y; h  [. a. cE.为确保加密,查询字串将转换为header,夹在POST信息中传输( y/ q" e+ g$ p4 S. m2 n# r

) Y+ k" v7 F1 j0 P& L. G7 r2 i' j4 e6 U- p  c1 @3 q
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?: J1 s: T. V9 K! O8 z
3 U7 o0 X- A7 R8 D7 [
A.它们组成一个数组,存储在超级全局变量数组中+ i" z. d1 G7 j
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中, e3 w+ I2 i; J) K. s
C.第二个元素将覆盖第一个元素
- _7 l+ S3 T# C2 O. XD.第二个元素将自动被重命名/ i7 w( C: A: X9 X
E.PHP输出一个警告
. {- d- q- v3 m& ^/ S0 p5 {: l
3 e; q1 J2 X( b# ~4 e8 h" p: q, _8 @! w: a: w' ~" N5 K
10.如何把数组存储在cookie里?
5 Y. X: ]; g8 r, U: z$ P$ A' H
, t0 q' \! b, ~! AA.给cookie名添加一对方括号[]
6 y1 G5 a: m9 `4 J+ e/ k; y" I8 bB.使用implode函数% B& l" ?- I+ t6 f* b7 P
C.不可能,因为有容量限制
% F/ s% a# u/ I' U% I4 `% tD.使用serialize函数1 W1 I; B4 P5 R  }
E.给cookie名添加ARRAY关键词
$ c# M2 j, ^" J, d* T! R
/ y" F/ e2 v& s  e3 e- e/ f% t& o0 p$ d& E2 K
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.123456789104 H( b) \3 w7 L; j' T7 ]
B.1234567890
5 ]( L) T1 v, w0 `6 C+ k" aC.0123456789/ w1 y* M* h* K# {: L# {" m% p
D.什么都没有. ]* H2 u( Y6 [# I8 y
E.一个提示
! O* {$ G7 F- Z; Y8 v9 p
& X4 E; j7 N  E! U
) @" o0 o$ E* T2 M12.默认情况下,PHP把会话(session)数据存储在______里。
, S1 x) K8 k; `' b1 ^; u# |' e* F( z$ q' }
A.文件系统4 ?* T9 D$ I+ O( y+ H
B.数据库2 R# A/ C  J2 W. ?5 f) `! A
C.虚拟内容
2 @2 U/ N  d9 H: I- vD.共享内存# h. e  W4 P; ^+ l- u- b$ F9 Z! \7 e  R
E.以上都不是  @( S  m$ g$ u7 {4 k7 I" H
2 u6 l$ E8 ]2 \) R1 h

" k) ?9 p) |+ }. v) s: [13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)+ ~8 `9 d, b8 y/ M; h' ]8 K

# _; ~) a7 @# M* ]A.浏览器的程序出问题了- i3 t* I$ ]$ N5 K; j* z# n
B.客户端的时区设置不正确
; o# X6 y% k2 d2 ]7 uC.用户的杀毒软件阻止了所有安全的cookie
( B- u7 s& Y+ P( D) f5 ~* E* XD.浏览器被设置为阻止任何cookie7 |2 O4 H2 w1 C3 y  K4 g
E.cookie里使用了非法的字符* Y) e. ^/ V) n$ ^5 _

, C9 Y: g! ~6 ?4 M7 d" Z, k* y; x6 R# ]2 Q
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?# @, u# [# D5 G
+ p' a2 W4 Z- r/ w
A.1440秒后: X1 W( S; R9 N9 q6 {! n9 F
B.在session.gc_maxlifetime设置的时间过了后1 d7 l) P  J8 R8 z
C.除非手动删除,否则永不过期
( Y* J& a3 e6 DD.除非浏览器重启,否则永不过期
# Y! ?1 d0 f9 w5 L; [E.以上都不对  A) p  s; f4 x; D
  l& ?* V( ^" B; n

! ^3 p8 n0 y: P* o% ^' K, }. k15.哪个函数能把换行转换成HTML标签<br />?) L0 E7 T! Q: A
7 u6 v- p$ m' n( q
答案:____________" M( \3 f0 Q( g% X

  N1 Z) _' ~+ a/ S' J  F# c9 T% {
9 z8 g2 r- x3 W, }( c/ ?  |5 L* {, v4 }( d: L
答案速查
! T- p* j" n8 p2 L, P1:E
% J6 J, K2 ^+ X; U: [2:setcookie/setrawcookie
# Z. _- x. n% h2 P3:B' ?2 d6 t$ |7 [3 E" y8 d9 ~2 j4 p9 r+ K
4:BD; U7 Y. M  U- B! e3 v
5:BD
- h3 K1 t7 `! R6:D
* |4 ~) k( A! \: A4 M7:A
7 l) v4 Y- [$ \9 E+ K' G5 Z8:B
( ^/ \$ n/ {2 L: B$ l  S9:C
3 D2 ]1 c7 Q( r, r, D. q0 r10:B; l' T, h5 y9 k% X+ Y
11:E! v( D( j0 h8 F  n" Z1 a3 M& S9 P
12:A4 c- p8 }+ M0 E9 {" L& l7 i, I
13:BD
- m) D3 h& O7 b# m14:B
* i0 ]  V! \% J& D9 E9 C15:nl2br
$ u4 I: A# _; c& J) ~0 Q# B- Z6 ^, i
: r. k. R6 m" U  w8 Z
( I' B9 U* o) ~! m
答案详解
, e+ @' A/ P5 ]- Q. M; ]4 {9 o" z+ j0 @" w7 ], Z$ _
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
* ]6 e) n! [; s, Z8 }! B1 h+ n) Z7 |4 s6 a
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。6 v6 ?7 r0 m$ x, h7 }/ q+ w
+ v; T# p+ E5 w6 j4 J8 _; B% F
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
7 G# r4 U7 ~  V  T: U4 Z7 V
- _2 s) s$ `4 J, ]0 w4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
1 u+ d- i/ E' _5 z* m- ~. m) X; n* `: t
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。, k! V* y# W) V+ m0 S! [
1 K  D, B! X  E4 c! U* @& g
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。* a' K- n3 z' F

$ ~8 K  @7 n9 t0 s, P0 G  q7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。3 b  r2 m" j! w6 i3 j8 r) {
' E+ y1 Z5 ?+ D% ?( H
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
& A! t0 b' x. m
" U9 U$ z- I! b# q0 |7 I; Z6 S9 S9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
* d& J; o' [- h+ w) H2 ]4 N' S! x2 N! z) j
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
; Z0 T( a- |. l* z" I% g8 ]3 r* l3 e9 ?+ z4 Q' W/ H
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
4 b+ a1 d0 k$ y/ p7 z) a& T( M) r, k7 E, f! u
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。+ u1 m% [( d0 `+ [: p- x# T

( D* k  x" w5 h7 Y  |' e13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。, h8 V  T* _6 M4 j! O2 h$ N

1 e4 N8 b8 V- n3 o, j14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
& h% @0 ^6 j$ O8 c& A* U+ n) U4 s5 M4 Q+ c5 I
15.函数nl2br能实现这个功能。




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