Board logo

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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。6 C) z, t: F# k4 U% v2 r# ^
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
; S. X8 T* Y/ G% ~. Q一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。9 O) J, T# g! }. b, T  ~
  w4 G" i6 q9 p+ `
4 S1 l& e) w+ W6 p) B9 s$ [5 o
问题
/ y/ H, W! M/ w0 |7 _! G$ M* D0 z# ^3 a% p- G
1.如何访问会话变量(session)?
5 p& G7 P6 u0 s0 u+ _5 E! q+ R$ w5 y$ S/ i  A3 S/ h
A.通过$_GET
8 J: b' K, X/ o" ^6 u7 Y6 MB.通过$_POST" i% j/ `/ N; b: \$ w5 e
C.通过$_REQUEST! S  F/ t* P8 {: K9 t
D.通过全局变量( ^5 m0 g% l0 _# m) _2 e
E.以上都不对
, F4 H- ~" b5 x, v
, }* P& k# C3 L/ t7 f0 L& s
# Z% y9 s$ k2 Q* H$ G# ~2.哪个函数能让服务器输出如下header?! h) i6 `1 C  P7 M
9 j5 d2 x- O' m/ }. C
set-Cookie: foo=bar;
- y( g; S6 Q( {' d: E4 l+ s; n* }' s0 L- P, r( O
答案:_______________# ?& E- X! Z' t  q9 c

  Z3 _; f2 L7 O8 S" X. J' B' y$ Y8 y) S" x
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
" _/ X* P+ r6 u/ I/ a6 K! u7 m2 g5 J$ R: n, |
A.通过HTTP_REMOTE_COOKIE访问
5 ]: h; H/ h4 e* cB.不可能
! S% K9 v+ F2 X% v( `2 B! hC.在调用setcookie()时设置一个不同的域名
( G* q" Z4 y5 w, j! Q- [D.向浏览器发送额外的请求
" ]( H5 }% _: Q9 D& T/ gE.使用Javascript,把cookie包含在URL中发送
2 q. W7 [8 l* ]; e
% L* i2 E9 D  d. a0 z7 `) L$ G
5 L6 Y7 {3 m* n) F6 D: `; p4.index.php脚本如何访问表单元素email的值?(双选)+ f1 y; j/ ~1 N) E6 h6 n; o9 w- k8 t
- f5 L0 K1 O6 ?! Z# P9 D+ V( ?+ b
<form action="index.php" method="post">
& G0 m: H7 u, E6 E% G7 A<input type="text" name="email"/>, Y$ {* L3 {& e7 u/ ]$ ~6 {8 Y* ~
</form>
- C% x3 Y1 N, |* n) o; {- P0 C- h% r) X0 j
A.$_GET[‘email’]( i% f) m/ y' R6 {/ c. h; \# }
B.$_POST[‘email’]
4 c0 I- v/ y, `# f, ?C.$_SESSION[‘text’]5 P5 A1 K, Q. \$ }. y6 {$ r
D.$_REQUEST[‘email’]
( K+ H  F0 w) a4 h6 `E.$_POST[‘text’]
  P: m% G& O$ C& f2 M$ Q
+ e- p  }+ g/ F
$ r! j: w; H% N% x2 n, l8 G6 n% f5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
4 o; ]* j' ^0 X2 R/ M# H- q' wB.没有变化
0 G6 A; ~( D3 V1 FC.在浏览器上打印该字符串时,尖括号是可见的
3 A' V4 _* b' M; y# HD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
- G# U4 n4 m9 W) fE.由于调用了htmlentities(),字符串会被销毁2 M" C; h6 b3 O, Q+ ]: {4 x$ P) w

! F7 q8 p! f+ G5 E: R: Z" ]
5 T8 ?1 C# v2 t  I4 V6.如果不给cookie设置过期时间会怎么样?! N/ f& x; k" [2 v3 ?, y
$ ?) U, I6 l+ @, `, L1 E9 S" x
A.立刻过期
1 \( Z, M8 g4 PB.永不过期: J' e: C/ H& q2 N
C.cookie无法设置
. |; u3 z. i% `5 `0 gD.在浏览器会话结束时过期
( C* a  e1 d; q+ C0 V$ mE.只在脚本没有产生服务器端session的情况下过期
: a, b0 d* m& j% }7 _3 w4 E4 n- M$ G% {" }

4 o; @- V7 M! s( Z4 g% t* S7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
# ^8 P/ g. r  r9 v8 T" q8 l4 ~" P& vB.Array, T  d- J8 b" a
C.一个提示8 f# L1 c% o9 B1 r0 T  F% r6 N
D.phpgreat
2 ^) N# w% H+ q1 h! q: rE.greatphp4 o$ P+ m0 n, L0 R' b, S4 f

) Y4 e; E( t5 X. K2 C
# {1 [7 g4 c7 X& }  d. |6 X8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
) Y/ J1 h( i7 v. y( I% w: s- v8 j3 O0 m# w0 u0 W
A.这两个是明文传输,之后的信息加密传输
* i; U2 F. x2 N& J( oB.加密传输: l; a' N3 Z% O9 g) c+ _
C.URL明文传输,查询字串加密传输- F6 E- m! H. |! Y, Z
D.URL加密传输,查询字串明文传输
3 g/ y9 v* l+ g- z1 gE.为确保加密,查询字串将转换为header,夹在POST信息中传输& |1 f* n3 G+ h% y

% g3 H6 t" O' V( L6 n- I  g
8 r9 i* c" \, d! w& q% Q9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
$ \6 ~; p1 n  M! M; x2 s2 b( g) w% j3 v/ f/ P
A.它们组成一个数组,存储在超级全局变量数组中
' z  e9 l2 @% _B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
2 b' y3 L5 b1 R, y* H  H% mC.第二个元素将覆盖第一个元素7 B8 f! B) D* i$ {
D.第二个元素将自动被重命名
7 ]& w6 D) H1 w4 K& r# kE.PHP输出一个警告9 v. n% @( U% O) K# \

6 i6 G+ b- g/ Q: ?8 ^4 F! P% y/ k  a9 G+ K$ ~# h# \
10.如何把数组存储在cookie里?
5 u0 R+ a- z! i
$ j0 W, w; I  E% u. a; M) LA.给cookie名添加一对方括号[]
+ s! H0 f! H; |2 ?- EB.使用implode函数
" {. j2 i" r8 r& nC.不可能,因为有容量限制
4 z8 s( Z0 C* k. eD.使用serialize函数
4 _) r- I0 b- ~. v$ xE.给cookie名添加ARRAY关键词
- A  x; V4 a- C4 O) ^. i; b) `
+ ^- e2 ?& j3 C$ l. T, g' ]8 V) r, @0 T' S" M
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
8 r; R& W, I! f) X, D( q* cB.12345678906 v5 k* g; `6 [
C.0123456789
4 w1 \3 ^/ n7 i3 T% `D.什么都没有  Y% B/ R% g$ L' `" z, x6 R
E.一个提示
& {# y' q- q& r1 b$ [. o2 N# e. U6 z2 d; u5 ^; p

* v+ \( G" a* v12.默认情况下,PHP把会话(session)数据存储在______里。
* w" N" o8 l5 I5 G' ~; i7 j2 X/ {
A.文件系统& W2 S: a) m+ d7 ~5 Y, T
B.数据库+ q% z. p% h3 N, t1 @1 K" A
C.虚拟内容
) ]: A, w; j% Q8 |' [% TD.共享内存
$ K* m4 Q2 t! v4 h; jE.以上都不是: w! V7 Z. L" E6 r
2 K+ p. |: s& h3 F# m, D

* D: Z3 N  c+ X: O3 N& h13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
5 a# _+ o, e5 R; J* `6 ?# p- u' c0 G* ^" E
A.浏览器的程序出问题了
2 _$ Q" P4 N' I  J. N: R2 ~- ^! UB.客户端的时区设置不正确
/ A$ F! j4 ^) O3 I7 j* G5 gC.用户的杀毒软件阻止了所有安全的cookie
1 b  q+ L2 c8 H, M- `' ED.浏览器被设置为阻止任何cookie
4 I; T1 n2 {* {9 W8 eE.cookie里使用了非法的字符/ x" |8 R" n3 t0 H- L5 y9 n  j
% }- s3 h1 ^+ }

  ]6 a- }& P3 c/ u6 z14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?: C+ N! y7 t' F; e- u
: n& y/ V$ H* W8 r0 q: V0 _& B% [
A.1440秒后. Y+ [. n% d* v+ u. |' y0 A6 _- @
B.在session.gc_maxlifetime设置的时间过了后
% @% o# v$ l) |( `# bC.除非手动删除,否则永不过期
- ]$ o4 N' C: pD.除非浏览器重启,否则永不过期
. ]: `2 R( h$ _- pE.以上都不对3 }, P" B6 j" `+ Z6 J2 C' E8 B

2 n. B/ O: {. H
- r2 l9 ^4 g/ C+ p7 O2 i" a5 G15.哪个函数能把换行转换成HTML标签<br />?
2 s  c: X2 M* B0 r+ z' s5 e
. M3 I( n1 u6 w" I0 d答案:____________+ b/ x8 C1 c# e/ s

' Z1 _5 B$ J, j' L2 B0 f+ ^) P  p5 g  B! ~
) e& w0 F$ K0 y, A7 j6 m
答案速查# V: D: m) g- {
1:E
2 \, M4 H7 a( o7 W& P# I1 B2:setcookie/setrawcookie& l$ X  W6 l/ o% A' Q
3:B8 R6 d1 N- b* s, h- I8 t0 L
4:BD
4 H, o: N  O# F2 o5:BD
; C( \2 ]+ k, {6:D6 c: J$ a6 I8 R- ~0 [/ o9 L4 c
7:A. c4 y+ r6 z+ M, k+ P/ B
8:B! |8 O/ ~* V& n4 q$ y
9:C
' T( h. L% |2 U1 c- X% r( J10:B
# A# u9 s/ m; @11:E; o, s3 y: A; b7 f+ v7 S
12:A
; n8 S* s4 X  F" w- W/ v' F13:BD
; B6 L; {8 P4 n6 z14:B
( {) I) ?! ?( `15:nl2br: A6 R* L5 ?& |. O* x, _/ M
" B7 }! q  j9 I, ~- Y

" [! L7 F3 W' Q
6 P) c/ U) \. d答案详解
; H9 Y+ P9 t& Y9 s- u( M  c! h/ u5 d
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
, S3 {  c4 K, Y8 c$ w! s- Z9 o. c: e: @0 y5 V5 W  h
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
# ^6 W$ v' `/ f0 c( `1 h' n
" `$ ~. P6 \+ \( W3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
4 v) B# X' h% |) R: e
1 i7 \& b( X, o2 d# x9 v4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! o( \9 z. p$ M+ j# X
5 x( ^7 {% h. i' \( Y0 C
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
  o% q, E4 J' }
. v1 A4 b6 ?/ t6 s9 |6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
" L* v7 Q/ `7 U
* Y4 I! u' l- z5 U1 j4 b7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
; n9 B' q0 {0 q, H2 s& g% g7 d' t) R. F  G. e" a9 W* L
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。: W: ]2 R! B1 C5 C& I0 l# _

8 w/ b. x# T, c! Y) U- ?; d9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。% @! {6 Z, F, j( W' @- y, f2 F
4 I" x- N8 H% y8 k6 r1 Z0 W! O
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。+ V* K# G: E, s# M' m! N: x: C

& c7 Q& K5 I  l0 k( k11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
# s: `2 u6 m# W" e2 ?6 N% e6 k! S- O* C3 R7 t6 z
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。+ y# h1 h. X3 r+ K- e: H5 x

3 Q) }1 @/ r( _0 v1 q3 ]0 [13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
7 Q) h/ P3 E0 t2 o- b; v  b1 g0 @# f9 A" G% Y5 W! }8 k+ l
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。' d1 ?7 O: W# G, c9 V
9 J* n  \8 X* m- _8 |4 J$ L. U
15.函数nl2br能实现这个功能。




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