获得本站免费赞助空间请点这里
返回列表 发帖

[Zend权威认证试题讲解]第三章 Web开发中的PHP

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。: _6 z: F% V5 y3 P# H* m+ E
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
( t8 Y% C5 s, v  n一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。- t- W: j* l2 a+ p( S5 M' d4 U) R

; Y4 u7 {2 @- x; z% S1 ~& M( _3 b4 J% w/ D8 n
问题
. G5 t' i) f) f% i! G" _: M4 ?: p4 q' q
1.如何访问会话变量(session)?5 k! F2 S. n, S8 ~! `

' Z& h  U4 Y/ G0 h" H1 J% XA.通过$_GET
: \& N& ]# t2 {% S' }& s3 f2 H. w( [B.通过$_POST
. Y0 a. V+ z/ S  r6 @3 qC.通过$_REQUEST
- ?. U+ X! L) B" ]D.通过全局变量
$ Q, Y" B# K% U: {E.以上都不对
: ?5 E" S- I) J: L8 S' Q: t- y9 R
' H5 M" k; e' y+ ]2 U: y
2.哪个函数能让服务器输出如下header?2 F" a- S$ I& f

: I2 N8 F3 }* c* ?" t' Jset-Cookie: foo=bar;$ K/ g0 m  o: l+ q0 S' y8 |4 `
' ?  u( Q% D+ t1 Z- p1 a# |
答案:_______________1 d5 b; f7 W8 `* N% B# P* d' K; @

7 R' }* j: l1 _: n
( T' X7 V/ l, b: v4 a- Z3 l3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?  c$ Y# k: W& F) q! e

, Z5 W3 ^8 q' Z$ E8 v0 `A.通过HTTP_REMOTE_COOKIE访问4 ?/ T9 R8 [" B* e- G! ~, f
B.不可能. ^, I+ _; f% g
C.在调用setcookie()时设置一个不同的域名
9 k5 I* v6 k' {8 k" M1 j, n( kD.向浏览器发送额外的请求- e# J, N# y  @# Q) \% Z
E.使用Javascript,把cookie包含在URL中发送9 ?/ y% w, \, X/ k6 n0 @
1 \# S7 U) s7 k" d9 W' I* H& r

% s5 a. Z6 f# `# t4.index.php脚本如何访问表单元素email的值?(双选)5 H7 a3 p- O( b/ k, q& p1 S

6 n! J! Q$ q4 e6 Y" J  g8 Q6 C/ x<form action="index.php" method="post">7 W! h. a/ r6 i$ w) s- I% \
<input type="text" name="email"/>
) a8 U2 _# K, h: ~; r" b) l& E5 _</form>
5 q  l  M' W1 u+ S3 e: g- f( Y; Z" f8 S  I5 F
A.$_GET[‘email’]
* L& i9 r- M: @2 B( F5 _B.$_POST[‘email’]; B$ B0 M5 h; `$ S' M% m
C.$_SESSION[‘text’]
, f) E. u# x! @5 w/ w3 M9 o6 DD.$_REQUEST[‘email’]
7 s( w! c9 ~2 P) qE.$_POST[‘text’]3 y$ j4 R7 D- n) Y0 b' W; _* |

; @; ^# T$ @1 m! A* D; _' M$ `
; `" v9 D( ?' o# X. D5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
4 I9 I2 a9 x9 l, l/ S5 [6 eB.没有变化2 _/ N2 W% V: w0 o7 I" d
C.在浏览器上打印该字符串时,尖括号是可见的1 ?. R$ h- b3 m6 J- V, Z( U6 p
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
4 K0 W! d$ a# x# X' ^# ?- gE.由于调用了htmlentities(),字符串会被销毁0 ?( N) F" g7 {% K
- P3 V) O( `& s- J9 v$ I

: O7 w( |' J. T6 S6.如果不给cookie设置过期时间会怎么样?, k7 ^( o( _4 a' [9 ~! K

/ a" p- G# H  s, U: r7 p" WA.立刻过期1 K: ^' A$ |( n. y7 a6 H5 s2 _
B.永不过期* w. ^8 t* u5 A3 ?; o. U
C.cookie无法设置
( i5 Q1 X  Z! jD.在浏览器会话结束时过期* ]. `8 G3 f5 \2 _* ?
E.只在脚本没有产生服务器端session的情况下过期
4 ~5 I+ J( N* u
; L6 g. F% r2 n+ r* l# N; J$ r  w( 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.什么都没有
) V9 L; W: n. @: g" BB.Array
# u) Q  l- O3 a% E+ m6 IC.一个提示
& L. b6 [+ ]4 v2 Y. H& qD.phpgreat
; r9 N0 U3 Q# q2 J8 ~5 WE.greatphp% o% L$ w/ `2 X4 U
  ^1 q$ c2 l9 r# w3 ~: }

  P6 c+ f: v7 C; }2 W8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?0 F' ?- t. S" C( _1 X1 a0 [
/ ?, q) T. Q% n+ y
A.这两个是明文传输,之后的信息加密传输
9 j* l6 U/ I, ?1 WB.加密传输
: F8 d. S4 f# _  g9 TC.URL明文传输,查询字串加密传输
+ x4 ]' O  @. U1 R" _# M0 t0 P4 c2 L( YD.URL加密传输,查询字串明文传输
: N# F- _+ S7 W- Z7 P$ NE.为确保加密,查询字串将转换为header,夹在POST信息中传输
1 E  l" D, C+ L1 W
9 ], J1 n* F$ k2 M; P% }) O
$ j! y, M+ L9 \, ^2 h' J+ Z9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
0 f/ Y: I5 L/ r9 y. C  y
9 O0 Y0 ^5 Z! ^& n0 GA.它们组成一个数组,存储在超级全局变量数组中
* a/ ^9 l/ l- N0 i5 I8 X( `B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
5 k% b+ F  P. H% ]- JC.第二个元素将覆盖第一个元素- _5 f7 l4 p4 R
D.第二个元素将自动被重命名" z) s) k! p- d% x: U
E.PHP输出一个警告
- j$ ?- S5 e1 n( T, t. C
4 W) t- @. j6 P5 F
0 V4 N! X( J# d# q+ Y  w, k10.如何把数组存储在cookie里?
3 T, H( `; x4 `7 N- k" G
+ |3 b2 o( c; B* wA.给cookie名添加一对方括号[]' }( c* z/ N1 L$ P9 m3 I7 ^
B.使用implode函数
0 H. k* R/ F: [/ @4 F( RC.不可能,因为有容量限制
7 @& ^' Z. J* xD.使用serialize函数
" ?1 E8 E6 J# P- FE.给cookie名添加ARRAY关键词
& |! u- E# g& I0 y3 Y$ p2 W. V
, f- ]6 E" B+ u6 f5 X1 M% n5 V6 N/ @
* `& D, o+ h( i- L* e/ J. i11.以下脚本输出什么?

  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
- M4 |% B8 o8 \6 HB.1234567890% f  ~! D3 l( h- F
C.0123456789" C$ x& p7 F  g/ Q' i5 e
D.什么都没有
- P% [$ m6 N4 D9 [$ q) T) x* aE.一个提示; Y5 Z# U; U, _0 I

+ O- r3 W: z% M3 ~( E
& a: k& |+ {  m7 Q1 E12.默认情况下,PHP把会话(session)数据存储在______里。
5 I0 E+ ?) b: F0 c' B1 S
. D; O4 [( D5 q: i* q* ~- nA.文件系统1 Q( |3 {/ v$ m$ r* v" o
B.数据库
1 m: u" J2 P  c7 M5 h2 b4 m& AC.虚拟内容- J3 Z% O2 s2 T5 h4 X" ~1 u
D.共享内存
2 k( D& \2 E5 j$ V9 \1 YE.以上都不是: N- |, p9 }- t) T; K& W. M
; j) }5 a( e6 p* {

: x* X5 c  L  i  \5 ^13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
- g$ x8 R: C" t+ K. M3 U3 R: Z
7 K& m* X$ U7 gA.浏览器的程序出问题了
- d! Q2 S* R! q7 H; FB.客户端的时区设置不正确( O6 X2 Q6 m0 T
C.用户的杀毒软件阻止了所有安全的cookie
: R3 w+ m* n* y& RD.浏览器被设置为阻止任何cookie
- @& k( f% i* v& ?* Q: a, QE.cookie里使用了非法的字符. ]0 P) K  O4 [# `3 O
( |) L2 P) \& Y8 x
1 Q. U" I- I& E' E
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?- d: Y' B! R& g$ V
' A( v, i6 E! W! G
A.1440秒后3 E% Q, d- d6 V
B.在session.gc_maxlifetime设置的时间过了后
0 V0 k0 U  z$ v$ E- MC.除非手动删除,否则永不过期  O5 b3 [* v) z4 H
D.除非浏览器重启,否则永不过期
" I0 i' u: h1 ~" C; ~! J$ j' @$ mE.以上都不对" t2 t1 t. [. a; N$ P
1 Y3 r8 d' A6 }$ S4 F
: D! |' t/ X0 w. u* J
15.哪个函数能把换行转换成HTML标签<br />?; S  [; T* T1 P8 `3 h
  L* P/ \5 t3 s- Y/ ~) B+ z! @" x
答案:____________
5 j0 }# \# F4 U" y& Q
& z; Y$ Y, _7 T' a  s4 y: _: U$ v5 T0 B1 ]0 P0 \2 l
9 H6 Q5 H2 B7 B! z7 W6 [% n
答案速查
! w' e8 m9 a: \. C- x' d1:E  y. j, T% r$ V/ h+ ]
2:setcookie/setrawcookie8 ^- y6 p/ v7 |  H
3:B
8 l, V# F* n) \1 s$ ^% p" P4:BD
& h- |# w: r3 \5:BD( Y/ q$ l. X+ M
6:D1 A' P! S- p) U
7:A
7 Q: ]  B5 \8 N  ?+ f8:B. d: \3 p8 o1 P6 B$ V
9:C* L# y* W/ v4 }: j. r
10:B
6 \6 O. f* l3 ~7 d6 \% O/ f2 I9 e: n11:E8 f/ W$ w. Z1 I6 V/ F2 z
12:A
+ W6 `& w& {/ V- w  S# I13:BD
  @9 ]7 k  v# i, P1 u4 p' h5 y14:B
! H$ h, ^* V) r0 n8 v- @8 l15:nl2br
. x6 X+ |- t! ?! Q: M# K0 X; \. M, k1 A) K4 B) Z

- o8 b6 @$ f+ q7 V& H
( V1 J8 ?# ~7 L0 F: z答案详解
+ c0 f' ?# u  h& |
# g& a6 L2 H$ @1 \! y. b3 Y3 o# V$ @1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
* ?" h/ Z/ z3 Y5 E2 F8 f& K% o. Q" T# \; j5 G: K7 D7 Y0 @7 \* s4 F
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。' W& d7 y& y2 A/ G8 a% D( Z

# W$ c- P' _/ f2 p: `; K) @3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
9 y5 d' R/ Q; o& U. ^6 ~1 `- o1 n9 m  T
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! T6 ~0 G2 m: v
& l- Q$ r' W! C5 Z( a$ A+ ]; R
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
) a2 a# {7 i7 d! r( I1 y
" ]0 G) J8 a; s+ y; I/ d/ X) S6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
5 G" t' a. t$ g! ~7 U& T) J% `. ?% r* M0 p  {% j* X
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
6 j& P# p6 c+ X7 ~' K. x7 o" I/ p
- W3 S, q. R  n& t# a4 r8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
) V% [& E+ `5 @$ K
+ u2 k1 K5 [: U9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
' {6 x( G8 u. w4 P9 X8 w# j( G! V5 D) P+ P0 k
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
& E3 i2 F4 t4 v
) b9 \' Q  z# `" e0 F1 y6 {& N11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
9 W7 J" R$ D6 F7 h9 Q/ c, a( V  ~' b* @; t9 o! l
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
0 i& Y. w2 t3 P% N3 C; O1 S
; x- }, e# X6 q9 X  U) U' H13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
  ^5 B! A& W# ^
" K" {! z. e" Z3 r14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
( E* H% n; r3 B( b5 R, e
* g3 ]4 f8 ^$ U1 i$ o4 U15.函数nl2br能实现这个功能。

返回列表
【捌玖网络】已经运行: