  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14197
- 金币
- 2389
- 威望
- 1647
- 贡献
- 1337
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
+ D! C, O. f3 N2 M与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
+ X6 R0 c8 s) \7 W( r- S一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。# m/ \* K' A/ d+ b/ N
+ N9 j% G8 e/ {/ |. I! u+ d: f( O4 n- M1 a2 u% @6 d3 m" Y
问题1 X7 h: R; R% @# Z8 }3 I9 C
" S: |$ P2 J+ m7 v1.如何访问会话变量(session)?5 ^, X7 c7 G+ Z: z$ m7 }
4 B: J6 M; O; A
A.通过$_GET
7 H( a6 `3 ~) A* L, H( \6 E3 d% RB.通过$_POST
/ ~, B1 U5 Y: J' ?C.通过$_REQUEST
% H; m- _ _. O6 Y" C8 iD.通过全局变量
. [# V% }: q+ yE.以上都不对) E" J' O. u4 s0 y- B
+ I$ R4 {5 n( e6 v/ Z8 P
+ t; O# O7 Y* ~! @0 j8 z
2.哪个函数能让服务器输出如下header?2 b( W$ c- V! q8 O) c8 x
) u8 t! t; T; @0 xset-Cookie: foo=bar;
; {1 Q7 O% h: S! w: k5 R" P: h: [7 o) B. I) p2 M
答案:_______________
5 v5 k) x0 Y1 f7 R0 @! i9 ~9 h0 ]5 Z3 r( L* U
+ P6 p7 W* e% k+ W+ k3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
% A; R9 G# e' n$ U4 K
; @( N9 T0 d8 nA.通过HTTP_REMOTE_COOKIE访问1 ]+ ]0 Y" K) J$ \
B.不可能$ E ?2 v+ G; \8 I( V' h
C.在调用setcookie()时设置一个不同的域名% k) `% f8 u8 ?7 u" ^( `8 I
D.向浏览器发送额外的请求
0 [8 S. g( q$ WE.使用Javascript,把cookie包含在URL中发送
; g5 A; W& w) R7 _* p* O$ P9 i7 R# R0 q# v% B
/ x8 s1 B0 r9 x0 W* P3 g/ x" J4.index.php脚本如何访问表单元素email的值?(双选)2 b% _8 v/ D; @
w! V' [( y2 j5 i) S0 p( k: a
<form action="index.php" method="post">
k0 u! r1 t. C" u, [1 p2 _<input type="text" name="email"/>
5 O# a9 B) P4 b</form>
$ a7 u$ S, d# r% F9 |4 E0 o- ^2 n& `5 ^' w, H
A.$_GET[‘email’]
6 Y) S& ~. _6 h+ O8 R# h% Z& ~1 RB.$_POST[‘email’]
) t' A3 U; ]$ B- H' HC.$_SESSION[‘text’]7 M1 I8 G' O# j6 J# }
D.$_REQUEST[‘email’]4 x% F6 n0 S% w6 n" `' U: N5 N& c
E.$_POST[‘text’]' c" i v# B- L
2 y: A: V$ ^: h3 o8 b u
5 f+ K0 x6 j9 w$ C' Q7 e" T8 s5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长, U' e# O5 f5 f. C- ]$ V9 ]+ E
B.没有变化" o3 O, _2 e: Z/ ?# d& u: J
C.在浏览器上打印该字符串时,尖括号是可见的3 E1 i5 L% C" F2 u7 S% v% }
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
" k1 k2 `* V1 S0 J$ v, E) h$ G5 E7 ]* lE.由于调用了htmlentities(),字符串会被销毁
7 U) f, B& ^" @& y! a! t8 r( E% f1 L/ m) J: a
" u, v0 Y, u0 u! w( H& C; o) l6.如果不给cookie设置过期时间会怎么样?$ ~7 X1 Z/ B- t/ d
& X; Y% J) C/ n5 Z1 g( r
A.立刻过期
) [! y& q, b H4 u+ ~) C d5 b9 RB.永不过期
( p7 z9 ^5 v9 j8 H: i Q/ oC.cookie无法设置; ~& J4 p2 Z; M5 v
D.在浏览器会话结束时过期
1 Y; _$ v+ I9 z. p- X& H/ V' g9 d2 dE.只在脚本没有产生服务器端session的情况下过期; _7 L# h2 c# Q. ?, l8 ~/ C$ f
0 K/ z. K4 T i: d3 ]7 g* j6 t
2 e* x/ h+ D+ m7.思考如下代码:如果用户在两个文本域中分别输入“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 q5 f2 `' `& ^6 H. y: B
B.Array
0 F1 [* v2 G7 \/ U: gC.一个提示
' Y5 y' w6 P1 P+ H) @4 r# E, GD.phpgreat4 K' L/ R! E+ V& p. j! C5 x
E.greatphp
8 u. H( ?% J5 R3 J' m4 D5 s& p
% O: m+ Y5 e# N1 Y& _/ c( }1 `1 H% o+ f) T- ]' v! U' q8 ~0 y
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?- F" Q! \/ B9 a! r* U% n
9 ~' q; ^3 a+ l. U* {A.这两个是明文传输,之后的信息加密传输, A, {8 i1 F) O; |+ E
B.加密传输
0 Z6 V; M' O1 mC.URL明文传输,查询字串加密传输
& m% f. y* k, S9 t7 \! cD.URL加密传输,查询字串明文传输* T7 L2 M2 }; M) z! {$ f
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
S$ o$ w) f: K) E& ]# A& t+ U
a# _' e8 T3 j2 ?, @( J: G" I
* i4 V& J& ]5 P) h9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
4 F: R( o$ J& ?3 a) {* W4 \4 f5 K; k
A.它们组成一个数组,存储在超级全局变量数组中) d+ L. s P; \# }
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中 `) ?- B7 R( T4 L( t2 T0 [( O
C.第二个元素将覆盖第一个元素( G) D- Q6 m0 Q# s* I; G
D.第二个元素将自动被重命名# h" s: r0 d9 X9 `# o4 n* Z7 S
E.PHP输出一个警告
& ^% b8 h' u5 a' O
?! U k1 z& S G9 t" ?1 o6 W N; H/ y6 [
10.如何把数组存储在cookie里?
: P: L; ~& s2 S% m/ o7 _. B$ l0 p9 }- W4 M, q; W
A.给cookie名添加一对方括号[]
% D4 u/ o4 u! ]% ?B.使用implode函数
3 |" \2 b# d, ^" Q g/ M- SC.不可能,因为有容量限制
h' i" C |9 B9 h/ fD.使用serialize函数" f& O* ?2 p5 L7 h& Q' G
E.给cookie名添加ARRAY关键词. H/ G& ?, \" o! A
" K( @9 M5 i w3 {- F
$ x+ v, g. l" h) ?9 d11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
: A8 G5 ~) [' T: Z0 j, o6 @B.12345678909 P, ]1 {4 P& @, _4 i0 @
C.01234567895 H7 C, M* b9 O
D.什么都没有. c- d" l; z% }3 X
E.一个提示# d/ `' C _$ f) G9 K, `! z
0 Q8 N7 `! \& k4 n
5 I7 }0 C- C% n3 {
12.默认情况下,PHP把会话(session)数据存储在______里。
. K$ `8 m+ J: y7 v
4 ?4 N m: M3 l, F: `6 V9 ?A.文件系统
: K1 c, s0 j9 [1 k4 r; M( WB.数据库& l1 Y# C8 R* m4 A" \: B
C.虚拟内容' {- i4 A7 ^" O
D.共享内存+ z; H+ ~/ X3 t2 Q+ j# \
E.以上都不是
7 g2 ?( b5 k6 j& u. w; h% v$ |) u+ } ]8 j( K$ c, g1 Q0 @, R0 P2 W- r
) ^' t5 |% r- a0 ~" h# g- T
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)& G' m. e( T' T8 v% @
# L6 K$ F( ]8 y6 eA.浏览器的程序出问题了
5 D$ Z3 `) D' N3 J2 w* L& ^B.客户端的时区设置不正确) ]$ Z) M7 `. F' ^# h9 c- R
C.用户的杀毒软件阻止了所有安全的cookie
/ @9 {4 _4 t \: M. b& o% \D.浏览器被设置为阻止任何cookie: A, r5 a6 q7 w! q4 d* Q+ C: c' D
E.cookie里使用了非法的字符1 ]6 i7 y0 F2 e* I) h: q/ b
4 \7 ?8 z/ p) J: U5 ^6 }1 ]4 a; B; D
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?6 j/ K) _6 f1 k, V
9 ^- L+ Z% w) D, X9 }! kA.1440秒后, U2 z! a' `( I4 t
B.在session.gc_maxlifetime设置的时间过了后1 c& t, t: V0 x4 a- a. j" ~
C.除非手动删除,否则永不过期
$ N1 o+ r7 W& D& s% L4 J) {D.除非浏览器重启,否则永不过期. k# k2 b- i+ ?" _6 b! B3 ^1 R9 T
E.以上都不对( _# i1 L! B& v B* X) m& s
8 k0 R+ }! P# t6 {% R8 X9 p6 K' c; P5 a5 y+ h1 Y% }% w
15.哪个函数能把换行转换成HTML标签<br />?7 l' t8 [6 ~! R, U. T" y5 r" l
$ x( t+ S) x. q `9 @答案:____________/ y. v0 m' ~- R7 n
0 |% N; _' T( b
2 s: e& D8 y. n. R; R5 }
7 L$ C* R ]7 D答案速查
% ]. G$ [- F+ E U) _/ N! n$ C" j1:E7 r# u/ F# ]; I8 ?# C
2:setcookie/setrawcookie G2 i' L! A' O1 v
3:B
2 V, ~, d1 s4 e4:BD
; P) k3 m( \! a7 }/ l, c: f5:BD1 t# J! F# |6 z" R. R* {
6:D
$ w) y( s p' h( w: ]7:A8 m- F' k$ K! A- s8 p' U5 |( [5 ^
8:B
2 `; _4 r/ b; S% Q$ |4 ?" n' q9:C2 v r" Q$ d) k! N; |6 ]1 D
10:B: m) D7 q" U( T: i" [6 c
11:E* Q ~8 {2 \ v1 ?
12:A$ A% G: e, B b
13:BD. \/ T7 Q' @" a; H: |
14:B9 M& e" D2 E% Q2 p. ?6 ^
15:nl2br" ^1 G7 }, @+ E; n: ^2 g E( i
+ j1 P2 |( J' s/ l
5 N" X `0 _% [# \& D, K& t6 L# i0 M" a1 `7 U
答案详解) u; {4 m7 q& P1 E+ D
& `* k; j, U, [/ a1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。* Q! O# i: d; A4 A. M
9 P) E+ h t* `9 @( F6 y0 C
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
+ r; C) O3 l! Z) J0 L& ^- @) h( e. c. z# c9 O. c+ B+ {
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。2 U! n1 i# a7 V% j" [0 K/ k/ h
+ W' y# d( Y) N2 _/ A% z4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
n' A5 M1 H1 ~. O& ~0 P$ k0 M; r( F* n, P9 V3 V
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
# k3 T E$ C/ L. N/ I" r: [" {- a
( d7 ~$ u) B- _+ k1 O A+ G+ X7 B1 I6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
' [! E7 Q. k; D8 t
0 r. }( k% y$ y/ y7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
2 ]5 R3 }% e( i( K( B2 Y2 x" j( [' v6 K/ X
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。5 g) ^% b% _* x7 ?' k# @
' J/ c+ |' v0 ?6 G$ }
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
( ^+ D. D3 j& n5 c( Q& u
& B8 I) E3 q5 D4 s- v10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
1 e4 | {4 [+ y5 u
" n4 t% U' k- n5 \11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
, s u) b3 c. p( C2 }
% t9 R5 M* z: {+ x12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。/ T) F R2 W G+ N+ z* u: K
6 B& D9 T+ W( E0 n) d6 ?8 h
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
; R4 B- b. ^0 b1 S7 @8 Z$ z4 I' n+ o% ]: l; ~8 `- L
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
% {& d2 H* a4 C2 C$ Q8 }. H
* i1 s3 [ K- ?15.函数nl2br能实现这个功能。 |
|