  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。) W) P. x3 [' I% O, r
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
. |6 z' j% |3 N! ^) ~7 T一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。" @; K# D0 N; z( b c. N3 E% g
0 @5 B/ g3 }( ^$ B% d' M9 E' O( P; O0 T5 H
问题
7 O: A* h& B7 Y" \+ V$ F# Y
* ]; z3 u p" K/ V1.如何访问会话变量(session)?2 e1 u7 \. x: Z b+ w; { u( O
: k! R$ r( [) c( V" mA.通过$_GET( g* N0 {* L6 n! v. W6 @& s/ [
B.通过$_POST
/ U+ J) s7 c) V3 ZC.通过$_REQUEST
2 l( \* T7 a$ Z" Q0 D4 X% s1 nD.通过全局变量& I( }5 T6 S5 n# I
E.以上都不对* o7 T- o* U( x' ?3 \1 a3 X7 ]2 ?
( I r/ |; R# M) ]' t8 l
0 Q0 X! t9 h. i3 f( \
2.哪个函数能让服务器输出如下header?: d3 A( \( X& q) w# q& C W
8 j; J* }7 b; eset-Cookie: foo=bar;0 _1 R) n( |3 @- j5 A; D! |; ^
5 r- @; X! ~% P) ^! A答案:_______________
6 D) E, i5 w) Y' V4 `+ w8 @ n# p& B+ C' p, t4 U
1 R# p b x1 {4 V9 C2 T3 o8 H
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?! l) g+ {+ N+ G+ V- ~
; @5 } `; B, t' }
A.通过HTTP_REMOTE_COOKIE访问
1 E3 y6 M% ^' ?2 gB.不可能0 e' y" Y/ ~0 `' a6 t, }
C.在调用setcookie()时设置一个不同的域名, G7 J" T+ B" w* h& K: U
D.向浏览器发送额外的请求# j$ q- w5 l+ g- s' y1 M
E.使用Javascript,把cookie包含在URL中发送
9 o1 @) i/ d. \8 v" z5 J
% T0 o6 S) @) U, d- | W- l, P! S/ e1 s, ?" N* ^0 `9 u
4.index.php脚本如何访问表单元素email的值?(双选)
% \" y9 [. `" l4 A; W" r! J& S8 w. y# \' Y. Z3 ?1 O( F2 |
<form action="index.php" method="post">8 }/ w& n; w) N! Z) x
<input type="text" name="email"/>
5 L0 w. p3 q E- m+ ?+ |</form> N9 W2 o+ c# ^! R4 Z" U
7 b* I1 `- _" L. DA.$_GET[‘email’]
- q! [2 F; i2 X8 U" `" h1 xB.$_POST[‘email’]
* l/ l) D+ G/ M7 CC.$_SESSION[‘text’]3 h: M k6 Q7 }+ l. [
D.$_REQUEST[‘email’]
% q4 z' M$ F: R" m3 T" TE.$_POST[‘text’]4 x8 f% t( [9 b1 y& U
. s# [. i% m) Z: j; X- j3 Y
" ]% ]2 y: E0 \8 k7 E: ~5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长, ?8 i* F. Q+ g/ Y1 f& a5 E; B
B.没有变化7 m% ^; x7 M: w+ q; t. F8 h( J
C.在浏览器上打印该字符串时,尖括号是可见的
6 t- s4 Q6 X' S) L; w/ CD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见# s! [! t7 O- Y) ?/ w
E.由于调用了htmlentities(),字符串会被销毁
: Q2 A) P- ]& e8 E2 z% V
! r6 k' Y3 J) \% n, Z& e1 F
+ m2 {6 z. L1 m! p6.如果不给cookie设置过期时间会怎么样?6 p0 i/ Q/ S$ H8 K% ~
: b; y2 N! J8 D4 F7 v
A.立刻过期
: J) I- W, x- t0 qB.永不过期# d# ]6 [6 c# i5 @9 L* G' H! R) o
C.cookie无法设置
* b2 E/ y" w, \" o& c2 oD.在浏览器会话结束时过期
+ P" B& `8 }& i4 hE.只在脚本没有产生服务器端session的情况下过期
& G5 V+ e+ s9 A: y& a; y2 u, l! F
4 X& L4 V1 W+ O% l o# a r: r, |; _, N. X0 B# E* P
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.什么都没有* l5 d* d! l a0 F @9 j R
B.Array
. }1 D: ^6 E: q9 WC.一个提示
; C, u6 V* X; {5 o0 \D.phpgreat
- d. b' e I3 H0 JE.greatphp
+ B0 g' O+ H2 d1 n6 y- P) r2 g L) K# S0 P v, k
0 M" P( D8 F1 D" U+ D8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?9 G& O6 o/ w; u- m. M
+ q5 V; B& T `. V& X h5 f+ C: H4 i
A.这两个是明文传输,之后的信息加密传输) N8 X) Y b2 [' b7 V F
B.加密传输! A4 I6 F& \3 N; D+ {
C.URL明文传输,查询字串加密传输3 @/ u: {$ D2 S4 ~8 Q+ {3 M
D.URL加密传输,查询字串明文传输- F& N6 l9 L& d) e' U/ [" q2 v- e
E.为确保加密,查询字串将转换为header,夹在POST信息中传输: V' _3 X/ o0 T, k/ L5 r+ R
* Q( J9 H3 q* m0 @8 Y7 ]# ^ w7 |9 k, F6 `
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
1 A# {# J% _5 ?9 A4 I
/ [2 t2 D& b. n3 IA.它们组成一个数组,存储在超级全局变量数组中, _0 J- X# s& q! g( f; `
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中7 L/ @6 L4 A2 x, Q$ a' u( s
C.第二个元素将覆盖第一个元素4 d3 q+ T& ^. e+ Q
D.第二个元素将自动被重命名
! _( T/ G4 f- s9 jE.PHP输出一个警告
: v m( Q w$ f8 v
! Y5 C: j: S6 c: {# D- ]# x4 d) N* ?3 D6 y5 f. d5 m
10.如何把数组存储在cookie里?7 B/ y* l( a6 _( F* `8 `
4 }: v Z4 {* y$ e* fA.给cookie名添加一对方括号[]
( u' y% c7 r& sB.使用implode函数# B% B! G6 Y; M$ H1 p/ [ M8 n$ W
C.不可能,因为有容量限制) o s" @ N) y
D.使用serialize函数 T/ R5 G6 Q" f8 Y5 b; F9 J
E.给cookie名添加ARRAY关键词9 A; H! Q `1 e
- F* v0 E# F( L: \
& a' t" Z6 d5 }- t' _/ ?; n11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
* ~) I. p. q# o/ J+ l" [9 SB.1234567890- Z! Y8 G/ D6 A8 S* ~
C.0123456789: q% j4 e( {( E) S5 N
D.什么都没有7 g$ z, l6 W# O# n5 a; t" Q7 f
E.一个提示8 M/ Y/ q' X4 b0 \
; w! x+ W& Q. ^" I. e. B/ A
7 }+ U% E2 u! Z3 t% ?/ E& V5 ~$ X# A
12.默认情况下,PHP把会话(session)数据存储在______里。# [4 _, }5 V4 _3 N) ?
- Y% X4 X2 t/ T @% _8 x3 r
A.文件系统
! Q% ?( c; I! ]) ?B.数据库
U% o1 b& t7 D6 _5 E4 _C.虚拟内容; ?& V3 ^9 ?" R9 u+ ? k
D.共享内存+ ~; S# B8 {4 I. h- Q( g
E.以上都不是
( t" x2 j% ?! N1 [" l4 ?" S) ]1 s7 F8 E, N H. Z4 F" Q( L. d& Q
8 ~. U+ h0 P) ^# Z1 h ^
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
5 d% i% V: J5 u6 L. I6 f: o3 t) Z4 {: M8 q# t. ?
A.浏览器的程序出问题了
1 M0 b$ H! j& Q( \- W! rB.客户端的时区设置不正确. G. A1 h; j) u! r! T
C.用户的杀毒软件阻止了所有安全的cookie, A/ r& j: G7 A. T, |8 J/ a
D.浏览器被设置为阻止任何cookie
4 q1 ]8 y- M6 T. _ WE.cookie里使用了非法的字符/ I2 ^9 j0 Y, h2 _# f
- ?1 J0 j/ [* \7 |: P
5 y: @, i# ^: C- p$ L
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
8 N* J# d" \& U8 ?% @8 R# M1 Q4 t3 T) [9 d
A.1440秒后, ~! o( {7 q" ?1 S
B.在session.gc_maxlifetime设置的时间过了后
6 N& Y$ G8 j7 fC.除非手动删除,否则永不过期6 h# ?0 j5 U& Y4 j6 V. |3 N# o
D.除非浏览器重启,否则永不过期4 s2 a+ l* q8 p6 N) ^
E.以上都不对5 u! M) U V* f2 G G5 l
8 Z5 q. b) l0 L5 g; @# _- r
* M: H* |* F! R5 }& w; a15.哪个函数能把换行转换成HTML标签<br />?
0 L! b% y1 f+ K/ Z+ C, g0 [! K/ `1 ^& y; b0 G
答案:____________
8 P% ^; |+ d0 B) a) c8 O! E$ o7 _5 J) U* c5 i y/ A
% W _3 x8 I8 U* J; a! Q
% G5 A8 B0 S, ^; }& T% D1 S- @
答案速查
% K, Z m) [/ t0 O* s1:E
) V4 @2 n0 Y/ d( b4 [2:setcookie/setrawcookie
+ S7 H( O- y$ Z7 \7 r g; X3:B
5 A+ X4 r* b' F. u" y: c$ X( g4:BD2 ?" l8 U! b* j9 c8 P3 {6 d
5:BD0 \9 q; U4 ?9 m( ?+ o* B% g& u
6:D1 t4 ]% p& N* I, X) }: c; |- `( T
7:A
& f3 h4 y: A/ a, G6 ~8:B
. `& R# R: O$ D7 t0 G9 f9:C
2 `0 H9 z# y: b( L; Q. j10:B0 R1 j9 d4 X# P. L: E
11:E
6 u6 u/ r7 \$ K2 ?/ |& v8 x12:A8 A! T4 b/ C! h: E. d
13:BD
2 s1 ?, u% B9 U. D& C4 I14:B
/ L0 P7 B! j9 x n- h- c15:nl2br/ V- |% a0 n/ E4 Q7 [5 c
/ h- f; r3 M: k D" G" z+ K
2 Z0 {8 v2 n5 x# O8 t0 F) M. I4 D' D/ ?4 F1 }" H, J
答案详解8 S; o5 [1 \, @4 t0 h1 G9 Y2 y
3 y! v1 i' f! G: o0 R1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
9 X- ~9 O9 I. Q8 b2 s
: o" m8 }% e/ Z' v- h" A5 ~2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
% B/ S7 I- C) T# n/ |: }
8 y# z# i$ O- ~/ C4 L) `7 K3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
7 r3 j6 r' E' I0 e6 a0 F+ e
$ I( S5 M5 ~7 e3 p# N/ h& ~4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
2 X+ w$ R, D; q. S5 [+ k' R6 h5 x9 y0 r! F: d
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
/ w/ [7 `( K7 y; l4 t4 U4 J
9 }) o# h( F( a6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。0 o0 @, \2 H+ z9 X+ Z+ j
3 ^2 ]) _8 l7 a v
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。/ i! f x) P- n# m6 [3 p& d
+ Z8 O3 _" ]% N# n9 k8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。) `4 n! y& V6 c% u
+ I5 n0 M- N/ y, U* X
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。) M% Q" d5 O+ F0 f8 x" A; x
2 V6 M! _0 i$ r A- w10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。+ \ K. w" J+ i
' I O! C! h8 ?! E( d11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
. l2 m8 B0 D2 t, Q( b& `- q3 r5 V% D& }3 R
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
0 s8 `% v [% m, e" L# ] w$ M5 z( r) }7 Z
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。$ s5 V+ o- h [" {' B
4 t2 A: y! c; m1 ~$ k14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。, x1 P1 C6 |5 T& Z/ G$ ?2 G, F$ S* N
2 A' q" v4 u ]! J+ j/ i15.函数nl2br能实现这个功能。 |
|