  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14221
- 金币
- 2401
- 威望
- 1647
- 贡献
- 1349
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。. z5 \# e- L3 T' U
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
* F, b+ r/ j- S一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
, E/ p! K' h) o0 q, v
) i# _8 Y: L2 s" Y
' C" B. f# M0 H l9 f9 h; M9 g0 n问题' M7 O2 Z( q' N5 a& ~6 B3 y: a7 c+ L
' x1 A/ [3 o9 _, `0 N6 Z1 T% G% j1.如何访问会话变量(session)?! C: f* j8 [% q. ]
{: f+ p9 r( `6 B8 _1 r8 NA.通过$_GET- n; p" c" s' L& K/ D, Y% M
B.通过$_POST: v, D$ o0 W, W0 r; Q) l2 y, C# [' T! Y
C.通过$_REQUEST
; e9 P( i. G' f+ T3 n1 X7 ^& r% O& F7 F! HD.通过全局变量
: ?" z* Z+ [; ZE.以上都不对- f! d. }! x }
/ K0 [0 C3 E. K+ B4 r$ k1 b
% t/ I4 Z8 N0 c2.哪个函数能让服务器输出如下header?
6 b8 b: U0 k7 W- ^1 L# z+ N) c8 L& x1 V
set-Cookie: foo=bar;
! b8 c$ m8 s' f8 @' j
& a& V) K0 C) _答案:_______________4 Y5 X8 m h; B' I$ G0 t, P
+ b- N" r4 Q, Y& M* |
' K8 U# o; z% P% f& ]5 `3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?5 M. R9 \8 d# w
3 d# L$ t) H' O% s3 JA.通过HTTP_REMOTE_COOKIE访问, U! j+ r& t+ c
B.不可能
# s7 \- K- v# y! yC.在调用setcookie()时设置一个不同的域名* K" j0 R6 R+ s3 r1 v
D.向浏览器发送额外的请求. x* F1 M$ }! Y+ ^8 o) j5 S+ ^5 l
E.使用Javascript,把cookie包含在URL中发送
2 Q: `& T+ f' I6 ]5 k& u. m m T6 d p" ^4 \. v8 Z$ u
$ [) ]( T6 Z) ^9 x4.index.php脚本如何访问表单元素email的值?(双选)
9 f4 L. E4 @$ C
& h6 z& d2 G2 O2 I0 A8 e<form action="index.php" method="post">
2 f$ M* @' L; H/ P8 c f/ K<input type="text" name="email"/>1 h* A, \' N C" [ u
</form>* y) i4 K& ]7 T; g1 ?' n
) Y8 d9 ?$ M" y Q
A.$_GET[‘email’]& S: h' [4 S& e( _6 o! H
B.$_POST[‘email’]8 t0 }: \( N/ m
C.$_SESSION[‘text’]. s$ v" J3 I; _/ ?! @9 {0 R+ j
D.$_REQUEST[‘email’]
3 n5 \& y" C+ LE.$_POST[‘text’]
7 z& b2 |" M) w% G( |/ V. j
5 g" z" M3 }/ S. T3 z8 I( X# V
9 ^& O% e& F( B% O: S5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长- X. V" j; Y" }: r" m9 v. t
B.没有变化2 Z+ r% Q& l8 U5 @4 G8 |
C.在浏览器上打印该字符串时,尖括号是可见的' J: n( y6 P# S5 O. O; E- e# k
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见* m; O. I2 \% x% D4 v
E.由于调用了htmlentities(),字符串会被销毁
$ @+ V, S6 W6 T/ G% [5 x( Q. |, \3 f' N( }* b8 a
! g$ A( x* q) t4 X
6.如果不给cookie设置过期时间会怎么样?
/ G6 U3 @8 l/ V( D( ~( J
5 M: O9 w& E; P& ^A.立刻过期
, d9 Z" P+ V K) {7 `B.永不过期) r: B- D) w4 \) w2 p G
C.cookie无法设置( O) Q- _* S: @ d8 f$ @
D.在浏览器会话结束时过期- i4 I* W- @" g
E.只在脚本没有产生服务器端session的情况下过期
5 K+ n2 x2 Y L& a# J; v2 n. H, f9 B v$ ~) v+ s
. E* D( o/ X6 w6 d5 j: g- c
7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
' m) `2 `% l( C& MB.Array
: I; m! s& E( ?3 ]) C, r& ]3 EC.一个提示
& F( ]- c' F$ Q* nD.phpgreat" y0 B0 b) H5 Z5 K' G
E.greatphp
' W' m! Z0 V0 s' g( Q9 T5 {) {" J$ L# _( s( L
2 s. _+ X# u" }0 [: T/ [5 Q# y/ A
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
8 ]' `! ]4 A" t; H3 L
2 p z: y# Z1 h Q M$ WA.这两个是明文传输,之后的信息加密传输+ w, a" ? h0 i B
B.加密传输+ }5 _! t2 u. T: n% |5 A. \
C.URL明文传输,查询字串加密传输
/ R8 o& E0 B& }D.URL加密传输,查询字串明文传输- H- r! Z/ l6 A* {; G
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
: e2 U2 A; W; J) f. n
* `% V) l! i: e. `' [9 N, M% O6 q) e2 K/ K+ c4 U
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?" E2 j! Z% k/ r3 Z8 J6 Y8 f
; ~ Z. C; b* b5 U
A.它们组成一个数组,存储在超级全局变量数组中
" a2 j. B* w& p6 xB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中$ O" X5 K! L' V, @* P" r2 T4 Z. }
C.第二个元素将覆盖第一个元素( j7 n- z' C- y8 E
D.第二个元素将自动被重命名$ x1 M2 e7 x2 m" i
E.PHP输出一个警告, w% Y. ^' y* b2 E
8 \7 j5 J. Q3 p4 i! h$ i1 \' N+ x
, s( t/ G8 n3 m: h0 p- Q
10.如何把数组存储在cookie里?
; L7 ?9 w( n6 k
) R/ d; |5 Z Q& Y9 |8 T. V( r& mA.给cookie名添加一对方括号[]! u! W7 R3 k; t- i
B.使用implode函数" o: Y( i# m* g j& S, b
C.不可能,因为有容量限制
# H7 L# ~) `. v" yD.使用serialize函数
. o: ?: S' I4 Y& s. D HE.给cookie名添加ARRAY关键词
7 n5 ^. E% `; Y& Q+ Q
U0 b [. [5 g5 N8 [. s. ~' q& ~ m M
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789108 ?+ O; f7 C! s8 @2 K. Z# J
B.1234567890
9 w4 j+ h1 L J6 d# oC.01234567896 f3 o3 X L6 {& c8 w! Y
D.什么都没有& x/ |+ l: r$ N/ R/ U
E.一个提示
' w1 G; W7 Z+ ?6 a
: p; m- V& s8 K* }1 |9 n: J3 s+ T5 |0 d$ |0 Q( m
12.默认情况下,PHP把会话(session)数据存储在______里。
7 r, Q: @& Q2 v) b) u6 _9 E9 C, B: y' P6 H, h- |7 P1 U
A.文件系统 C; A& L. D1 }/ T# p" ^' S9 Q+ i
B.数据库
0 w% n5 T' E$ z: n3 yC.虚拟内容
; O5 K% j: C8 }( sD.共享内存
$ d9 c+ r/ G) uE.以上都不是
4 a" c3 N% E% t. q2 H- c2 X
& w T, h1 z1 E& y. a: b3 k( K! [$ k" T, U4 M
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)) ]' \5 H1 G! [
2 m, w+ B6 U" O
A.浏览器的程序出问题了
$ F3 p5 m/ {) K- xB.客户端的时区设置不正确# N. ^2 G: w/ E& |/ L
C.用户的杀毒软件阻止了所有安全的cookie; O) a9 Y0 J. l0 ^# N7 l, u
D.浏览器被设置为阻止任何cookie
6 ?9 b+ O$ b& p F) H3 ]) [E.cookie里使用了非法的字符
- u! I) l- x6 _! P' ^& Z4 d0 U6 ]5 p: U u) B
, _" B$ B3 u. h
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?- K* p2 z- h+ |. e/ q r) @* I
) A& d. s. l, c" F1 ^" b- @0 p6 E; a
A.1440秒后
O" i O& K+ d( K- d/ k! hB.在session.gc_maxlifetime设置的时间过了后
" y+ R6 J4 ~* nC.除非手动删除,否则永不过期- _+ v6 O3 e3 h
D.除非浏览器重启,否则永不过期( u& L3 d" Q2 s& V6 {% g
E.以上都不对2 p0 h* L# p9 U& @$ e7 h( Y
; J f! W8 E% T, L
0 G+ _1 G0 G9 f2 t0 Q q15.哪个函数能把换行转换成HTML标签<br />?8 Y8 z7 k; A* t( ~+ c9 u% b
8 n3 V* ?# m& o& s/ ^答案:____________2 {) Q( I' D+ o4 u
! w1 ]( M" J+ @: P5 H
6 U5 G! Z0 U$ n$ | x
4 Q3 q3 ^: a/ C% ~3 L
答案速查0 B1 i( _1 `6 ^ c
1:E
4 U# D, J7 `8 |0 L( G2 l2:setcookie/setrawcookie
3 d. ]; ]5 c6 D; j2 [: B3:B. j7 I. X. I, H
4:BD& l7 H) n5 r+ j% e$ L! O
5:BD* z# g" q% t+ Q3 }4 ~) r! b
6:D
9 I' g9 f" |9 F0 M6 x8 H! }0 K+ W7:A
" M) X3 r" g7 [! u8 R r Y8:B) W) U: ?, T" I3 @4 k
9:C
" \0 G3 Y; x5 [4 F, _10:B% z8 T% y, U* w# }+ n/ |5 p5 _3 A6 F* n
11:E
+ D& {2 s0 R5 T1 d! W) z! o Q( R1 f12:A% p4 i! x' \) P {6 o# K6 x
13:BD% C! Y, f8 R, [1 L# W4 H+ G
14:B
6 M8 {. C, ^' |9 U" e" c15:nl2br$ I& g5 k" I9 d3 J5 x! B
3 F* _- o" K$ p/ F: B
1 C# D7 O4 R( G
( j4 T1 r7 B7 K, ^, p答案详解
- ]* F$ [* E4 c- i6 ^: m) C6 u* n9 F1 b4 {' ]4 f
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
) j. s9 e! s& U: I8 t6 s7 C- v
. y, H4 S R0 m" b$ d. d- s2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
3 G% F3 b5 K8 T2 u4 ~
$ ^# Y$ f$ E6 d4 s6 q3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。4 N& X6 E- p/ b/ u
W- G" A3 G$ S( u4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。; n- _4 a I0 X3 d3 ]5 i2 l6 @
B. d4 p. i r4 z4 u& B
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
2 i1 Y) {' L3 a- F( M6 @1 D; c+ T( D* p/ v; G5 C
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
3 a7 V1 | K8 s. G6 e8 o7 D2 e- j& \
# V. K2 M$ X( Z7 U7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。; Z( k. [5 Q) O" b
' Q* C* u/ A% d( L7 ]" g/ u. o
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。3 Z+ f) `; ^ I0 I$ P$ u
3 E& W( Z# n( S3 ]0 D8 b/ y6 T
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
6 z/ B, V5 y# W8 _/ [" ~1 q C1 p" N- I
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
2 E( C& S0 v# j2 H! i# C3 _$ U, V. S2 p/ }% O5 B& l
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。& X0 o6 \+ m8 {9 r2 r7 S+ d
! [, ^9 Z5 Z8 k: p
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。- S; e* p& r7 U8 b4 W2 k6 ?
/ L' P6 b% x, L; F
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
( p( m% T/ L4 P: R5 B- a# W" ?. S1 V2 Q" M' r* U2 N1 r2 \+ {
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
/ `3 B8 O* J+ Z! H
6 Y" g) L1 I: h! z15.函数nl2br能实现这个功能。 |
|