|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
" R. ~# w8 p2 @9 x# F% \" T与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
9 }1 l- m6 |& p( _( S一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。 Q$ }- W, P5 Z9 [: Z5 g5 y
7 N/ N7 v5 L4 }) p) D$ d5 f/ v- }
3 k7 p( Q* N" h( A, y3 l
问题 K& r# _/ P% H- Z
* g+ n! Q6 j* p% _
1.如何访问会话变量(session)?
, B3 ^6 d* P! ]# a; q0 n6 H, s# O- @# K# M/ ? T5 @1 C
A.通过$_GET
6 q) X1 G( d2 v, x! GB.通过$_POST
! t9 ?4 j* g" w4 P- IC.通过$_REQUEST
( o1 ^5 O+ o: S$ r4 OD.通过全局变量( y$ A0 r: a4 ~- J4 l/ e
E.以上都不对4 `. r `# I$ J8 I/ h: n
$ V0 K% V3 W- E! x( b. f k! z; b& e! M: i7 z0 Q7 u8 C6 H
2.哪个函数能让服务器输出如下header?
( M% K- R0 r# Q
) d7 x0 `" i9 T8 a& h0 E/ V; Hset-Cookie: foo=bar;# I: N5 K# {6 j& y* w: A
: f% V" m- ^$ o6 a8 `- [
答案:_______________
+ |) M9 D6 x+ o a5 K( p6 Z, E1 E+ I3 Z& L, C
& F; | @+ V1 e" {- F3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- Q& v w1 O1 c( a) j& s1 w) _9 z% L. v+ I+ r
A.通过HTTP_REMOTE_COOKIE访问
# S9 N. K# B: {0 n6 h& T0 FB.不可能7 Z( P, |8 E! S2 x$ W
C.在调用setcookie()时设置一个不同的域名4 l# ] u0 m( q) Q* G8 W
D.向浏览器发送额外的请求0 z! G o' q& D4 ?7 z d
E.使用Javascript,把cookie包含在URL中发送
, z; j( @& ^; z+ B' e: i8 F- W; I" _, k
8 U; A# N: |( z9 q; a8 p4.index.php脚本如何访问表单元素email的值?(双选)2 Z! q# b& j! l
& D) h( _) u6 w% t! J<form action="index.php" method="post">
2 } L X! s& t. v# H/ f4 C<input type="text" name="email"/>
2 u8 Q. L+ j9 r: w" S, Z</form>
1 S' O9 Q. i" L( O
4 ?$ g& I7 {0 [$ e( tA.$_GET[‘email’]1 a+ B5 s7 u0 {1 K0 @6 x
B.$_POST[‘email’]
, }4 C7 x% a( q! n: ~$ B9 r$ mC.$_SESSION[‘text’]
, i5 n' z: y" XD.$_REQUEST[‘email’]
; `7 Z* i4 R& L5 u0 g9 Q# oE.$_POST[‘text’]0 q2 a1 O: F5 F1 ~* y
& c5 \2 @7 Y" D ?* F) \" T, q. Y& H. I' a
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长. G! g' V: ~( X/ u
B.没有变化) b F6 {2 w2 m. ]; D# G
C.在浏览器上打印该字符串时,尖括号是可见的
3 b! o: y: a; M9 @( B7 o jD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
2 N, G. g( K, b' A" `E.由于调用了htmlentities(),字符串会被销毁+ C z4 V( A) ]5 v) c
4 ?) H F( @$ x/ c
5 L' N+ x6 M! Y# Y6.如果不给cookie设置过期时间会怎么样?
% K7 z! {! F. q' b( T
" M( h! M" |, i& kA.立刻过期
5 K% q: ~, S. ~" K4 AB.永不过期
2 k2 d0 f0 F! RC.cookie无法设置7 D& f1 E' ]- N$ K
D.在浏览器会话结束时过期0 `4 Q9 b2 s2 |3 c9 W; N
E.只在脚本没有产生服务器端session的情况下过期
, b2 p3 W1 O2 }2 K8 U# Z. M5 @
+ ~2 @0 ~4 d2 @1 i6 L, l: u: y8 Q; F
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.什么都没有
0 { `- _1 F' m5 {B.Array: o. l# ?+ |# S c
C.一个提示- A* A$ M9 \5 D( I6 I
D.phpgreat3 N" L' s* k+ [3 F4 i8 q
E.greatphp
$ ~* [: T" K+ L( c7 s3 R" u0 J% W( `% z' N8 Q
; f$ M0 s5 W; m- G; b. X F; d8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
8 x" y- K" t: T; w3 O
2 ?# E; U/ S [* |$ VA.这两个是明文传输,之后的信息加密传输
/ K4 J) ]4 r3 g; F2 K( ?B.加密传输1 s: Z, X) H% T# N5 G
C.URL明文传输,查询字串加密传输- K) I" |. l7 i; Y7 }
D.URL加密传输,查询字串明文传输* x; D- B8 B% q+ `5 a* b% E( V
E.为确保加密,查询字串将转换为header,夹在POST信息中传输7 X6 I9 `3 Q4 p, G' |
0 r; M, K7 M- v* W5 {" s
! ^' ]+ N2 `2 t$ x8 N9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
0 h* g, H! A- P) i6 L. `$ l+ u1 Z; c& m# g. Y/ p! D6 F( x" A
A.它们组成一个数组,存储在超级全局变量数组中2 d) }0 U! G1 r
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 i3 z N+ t, W- V f; cC.第二个元素将覆盖第一个元素
7 `, F3 [: i; e( s/ W6 FD.第二个元素将自动被重命名& d8 S6 m, L- Q, q! }" M
E.PHP输出一个警告8 _) l* `9 T; x# W/ k
S: X8 Y2 j1 }0 t9 n
0 f! i( F' E5 J$ Q$ ^% H10.如何把数组存储在cookie里?
' J5 S% W2 G1 j' S, Q$ R9 J3 h9 s
Y+ ]+ X8 a/ H% F. O1 k9 t- CA.给cookie名添加一对方括号[]( J% K$ [4 Y5 h6 Z; P
B.使用implode函数0 q$ {1 R3 K; h5 F1 U* B; {
C.不可能,因为有容量限制. Z8 n2 Z& [6 {( p, r
D.使用serialize函数
) f: a ?: Q: O* N4 s/ H" U8 UE.给cookie名添加ARRAY关键词) p7 X S) e6 L# _( Q7 ?5 w
. n6 g& N6 D7 h5 m$ O( R r- Z. ]- N# C) s: R) l
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910: x3 W; u( F5 B- p
B.1234567890
0 B: P1 ~* @! W) {C.0123456789( U' A+ }4 m; l: A% z7 B
D.什么都没有
9 }* M. p# ^% e0 Z) o+ F5 UE.一个提示
4 @3 u; ~0 ^4 k4 \; H8 c
$ L& i+ y8 G% `( ~6 Y0 u5 i. j$ ]4 O; ^
12.默认情况下,PHP把会话(session)数据存储在______里。
2 S9 F1 S! g1 |" v
z) d1 d; g0 b3 d$ ^A.文件系统
! m9 Y' P0 a, d; s% |B.数据库. G* A+ N: ~! D4 y" Q$ ?0 s
C.虚拟内容0 _) A2 _1 P1 a6 ~8 O6 n/ M$ N
D.共享内存
/ V3 }5 p$ I) KE.以上都不是
( b, c' q9 ]4 K* {
) D* d+ c7 t. j4 F3 T. H5 N
$ A. F `9 E7 ?5 y) |1 b13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)% V8 U4 q: B! q" O# L" E# l: f" h
& F+ v. R& |+ k% z" |& B. IA.浏览器的程序出问题了9 A! h" ^9 M, K9 v4 m2 d
B.客户端的时区设置不正确
T; y* b. x% [9 n8 NC.用户的杀毒软件阻止了所有安全的cookie
9 r4 a. e) Q- p& N0 wD.浏览器被设置为阻止任何cookie
' B" p: {2 W, I' W$ D1 UE.cookie里使用了非法的字符! h0 X+ y+ C" i, E& I
, p( a8 x% q$ A2 Q4 I% C- r8 B( H5 x( C
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
+ E7 C8 C8 g& i) S( K& @+ v8 m& E4 L: b& {' @6 ^5 t4 I
A.1440秒后
8 ?1 h. H% S7 nB.在session.gc_maxlifetime设置的时间过了后
0 Z% ^0 }. C2 n: c/ w( o" b7 [C.除非手动删除,否则永不过期
9 O- k( O& z3 n( W+ R [7 RD.除非浏览器重启,否则永不过期$ r9 w5 H4 U/ F
E.以上都不对2 _ E' E( R% H' W4 ]5 t
+ t* p8 K# w \5 C) ?
+ y4 Z# w5 K t8 t; w: z. [15.哪个函数能把换行转换成HTML标签<br />?7 Q8 z7 f% M; ?( Z; N* N
# ^ I6 e) t" B, v答案:____________
; r q, T; E! }. v j
" j5 b _, U2 ]5 t; L7 q" h5 J% A* f X
, `9 z( D" E) _, j8 W6 l答案速查
- {1 ] x1 {2 j" T1:E. ~ g0 @8 u; D ?
2:setcookie/setrawcookie5 {3 T4 Z; v5 U/ h: e
3:B
0 E3 c" z7 p% X- @4:BD
7 J7 [5 X8 O; @/ @5:BD% f' d) o' D8 X9 l$ |9 E
6:D1 v' a2 k' C/ r2 o0 T1 n
7:A: a. u3 W3 [9 M+ g0 C5 s
8:B
; v0 ?/ X H o) T2 N) |# ?7 O4 I9:C
9 v y1 \ h$ ]% `, d( \7 i10:B
2 E- ^' [5 ^- ~. C/ H1 F" L# a3 g11:E
* k; {) v2 G0 a. }! F: I+ g12:A; L1 ~: P* G8 K" x
13:BD
z/ q) v: u3 h# g: O7 Z- i! F14:B
+ V1 M. r: M- O+ q1 ^( }15:nl2br' _2 [# l9 L X" a4 i: l: J" Z% \( D
7 V; M) Z: w& @' t0 a% {; [+ i/ }4 ^
# }0 J* x& W. {1 E$ ^4 [+ g7 c e
答案详解& l0 o3 q1 {2 ~2 x
4 \3 K5 H! g# s$ l0 A( Q5 a* l6 Q9 n
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
9 o" e8 {: o9 ^, r
; }- Z7 x2 S; |! z2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
( x: C, x4 R' I$ }2 k7 H$ M) h$ b& w3 b( ?- ]7 s X' [8 _) [
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。% |. @3 Z) ?; E$ B
7 R$ q$ F( `+ v4 @3 h
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
1 k2 T0 U9 S$ q+ I; k0 q1 E, V: j1 W3 a/ u5 G
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。: s, T1 ? B" _9 d' d
* h1 z4 B I9 }* `
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
$ M: A; I4 I' _4 z
, e; n" H* ~$ U0 ~) Q' y7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
4 l, w0 `' E3 m8 Z1 I4 P
- [1 y) i! T5 J1 U6 }3 j0 x# @* I4 h8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。- V- i: ~+ z5 _1 h+ W
, Z+ ]9 m% H7 {" W9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。7 J3 Q, l! c' c$ m
- T6 T3 }9 ?& X4 V* p" D$ `10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
& n. Y! ~( N& K/ \7 a& N
4 m/ X* A5 d6 u11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。 t' C* Q6 K6 h/ e# e+ z
9 ]( ?6 v( O; K12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。6 _6 l5 l; R* j9 d9 @
+ i: M+ A0 h5 |( _+ Z5 O' c& v
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。/ O0 u0 \8 i) }+ p7 F; C
, R: L6 o& i. g6 {3 C. p E14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。8 v! B9 _$ @/ s! I0 D% B, Z* g
) ~! A; m& `( a% L0 T Q15.函数nl2br能实现这个功能。 |
|