  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14249
- 金币
- 2415
- 威望
- 1647
- 贡献
- 1363
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
: X2 O. O/ |9 I0 \: `与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
: Y5 B8 f( Y1 K. Q% |一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。" @! C( {& m* T# ?: ^6 K% F
' T; `* S* ~9 J2 H
1 n7 b8 C) x# a) t4 P2 M8 u问题
) w! Q' o6 z5 c1 {7 z! d' P) z; ^ k0 K2 p
1.如何访问会话变量(session)?: v6 V3 e0 R/ F
+ [* g" J% ?: A! rA.通过$_GET& c. v+ J8 e" p6 S' D
B.通过$_POST
+ b! S& S5 b6 i( N, TC.通过$_REQUEST* I5 Q8 ?& f* N
D.通过全局变量% m( t2 Q$ \! b) R
E.以上都不对& b; M, ?" ~, W+ r0 z( t
3 [! u! I5 g& i/ S" l9 b/ I0 G- l* b' F' b9 d0 `* [
2.哪个函数能让服务器输出如下header?4 O w+ Q0 w& i F3 r
7 h) p$ Q$ ]& I: d( ~* Zset-Cookie: foo=bar;
$ B0 d7 b$ r2 ~7 ~8 c) |# P# w1 n! Y' r( l' @" b
答案:_______________- Z8 @( e- ^) p& ~
& s0 ~+ U: u4 W/ [" D" Y
" O1 p" z4 [' K' J7 U2 s: a3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?/ p# Y7 V w4 g$ I9 E) e4 k: n
1 K, N9 j1 W v% C& ]& |
A.通过HTTP_REMOTE_COOKIE访问
" N* a4 |& h4 ?9 C& xB.不可能
# M6 Y: B& `& h! M0 G* mC.在调用setcookie()时设置一个不同的域名
6 b E" K" M" i8 [' {8 UD.向浏览器发送额外的请求7 _+ T! @: j% s* e
E.使用Javascript,把cookie包含在URL中发送
+ x2 d$ q; w8 E+ W$ x2 C# K, m0 R, S
0 w' Z, {" H& G
! Y) m: n8 Q! E5 d5 Y4.index.php脚本如何访问表单元素email的值?(双选)
! x8 r# b8 X7 o
$ V8 P* d7 n3 c<form action="index.php" method="post">
& h" @' _, J) ^2 U<input type="text" name="email"/>. _, _. x% V! }) a
</form>
3 d( L* V2 @# |- ^: L% H6 s- T2 T6 X3 F" B8 @
A.$_GET[‘email’]
8 _8 G9 }, O" y) t. mB.$_POST[‘email’]
6 v4 _$ @ |9 P$ b% r% AC.$_SESSION[‘text’]# q- p V2 N* z" i
D.$_REQUEST[‘email’]9 _! h8 C6 W9 v) Z) e# `
E.$_POST[‘text’]. |8 Q+ `2 g4 G, T6 S g" \
6 v9 e3 k! S2 S1 O2 \
/ V" t, d; J0 v" l8 b5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
( A. U. m G8 K, j2 M2 K6 Z3 v4 @B.没有变化# P1 H" J% m* P5 E& x$ N2 S6 K
C.在浏览器上打印该字符串时,尖括号是可见的
: V1 n P6 Z0 k! OD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
3 Q. D1 I, ]# Z" Y! \$ N; {E.由于调用了htmlentities(),字符串会被销毁
* R4 q- k5 o) |
+ Z, \4 A( c* `0 }: I0 U8 B9 d3 h* J" Q5 r; G! x. b% k3 P4 I
6.如果不给cookie设置过期时间会怎么样?) _) ^8 H. {4 e9 N6 ~* q
+ g! g; x+ z0 T7 y7 d* s' E; n( N
A.立刻过期6 h; l7 ~6 w S2 _8 X6 O
B.永不过期
0 K3 }4 z' d) I( t8 x+ r0 _, s- B( MC.cookie无法设置
# R/ ?2 o7 |# BD.在浏览器会话结束时过期
1 O2 E+ G. \# h- _- JE.只在脚本没有产生服务器端session的情况下过期* L/ Z, c" F6 [* C# L% b+ M4 j
8 P( X8 H0 d6 l6 c4 K
, A3 E8 H# l& {' I' S* w
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.什么都没有1 s: z9 K+ j) ^; _: V
B.Array6 [4 Z! M+ L) f8 V1 n8 E
C.一个提示
+ i9 B* c! `, ^7 C" [' _D.phpgreat B3 i1 ? Y1 Z# v; i: R3 o+ k
E.greatphp! U4 S7 Y! H+ B9 |8 s" _& S% Z
+ c; w: K) K S. g8 \
3 k& J: b% w7 z y. k8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
+ {6 }6 S4 f7 v& d# v% G& A9 `5 i H( f5 K0 p5 s
A.这两个是明文传输,之后的信息加密传输: B; S- p9 }: y4 t) g$ f
B.加密传输
* p X$ Z% d: C2 `6 X$ q& SC.URL明文传输,查询字串加密传输
! p8 K! t5 Q! N) ^: D" Z! WD.URL加密传输,查询字串明文传输. L: R6 V h" P* J& K0 B* M
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
8 d6 Z0 j3 n& I! F
/ u+ u5 V2 {. }! x" _4 z8 h: p3 T. E
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?; K) q$ X) T) V. D& y8 z) w8 b' a
9 O2 h* F# h# i2 P# l5 sA.它们组成一个数组,存储在超级全局变量数组中
$ H+ @: o& C; p2 o( P. o6 pB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
l/ u: i/ Y+ _! J6 lC.第二个元素将覆盖第一个元素& B6 t2 [$ j" ?9 a9 | a5 i3 _* H& @. ]
D.第二个元素将自动被重命名
% W/ X5 I/ Q4 u, w+ L9 sE.PHP输出一个警告: v" a3 k4 u3 T5 Z1 X
n0 l8 c/ z) d9 R' p( f# G
4 s8 p& a: J* A% t" p2 b; x10.如何把数组存储在cookie里?
8 i/ p. W1 C6 ~4 N
$ Q ^1 S, g! K# o& J$ @. fA.给cookie名添加一对方括号[]; A# @* u G. A$ ~
B.使用implode函数
$ H Q9 y7 K# H$ A* k, G; cC.不可能,因为有容量限制4 Y2 _4 S2 O& ?4 y& t8 g7 O
D.使用serialize函数' s' s; X6 [& f" s9 Q0 C, X
E.给cookie名添加ARRAY关键词9 k7 V. g) L) {- [5 K
. F5 Q! c! h$ p. L/ m Y& A9 W/ j/ K' [& `8 M4 j+ I" n
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
9 A r' O# b% a! C3 I. \, GB.1234567890$ M9 H, d$ S5 h" \. q* t8 n
C.0123456789
; ?+ R' v2 i& q9 p2 k, P; FD.什么都没有- C7 \5 o7 N3 ^8 l7 b- k' P
E.一个提示0 F2 g( } N& D
# H: q4 Y6 h$ H/ Q( S2 M
8 S5 ]- F5 {& z/ H$ P- z12.默认情况下,PHP把会话(session)数据存储在______里。
- e; C) p) P8 s7 ~2 p3 o9 C( I! s! U* b
A.文件系统
4 c3 n' W5 X. J( I& ]$ E/ r; MB.数据库
7 D% z6 M$ G. ^- h3 eC.虚拟内容; |6 a! p, h9 x! g; o
D.共享内存' N: _( {8 {/ v9 R: w
E.以上都不是" j& L4 ~2 k9 { c% k
# Y+ X8 r6 { I1 T; `/ O: W
" t9 n6 \8 w6 |8 a2 a; O# l7 e
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
) N3 A. Q3 |6 j: E: ?! w% G8 d
+ r+ }/ W9 y: e5 OA.浏览器的程序出问题了& c) u# N8 H/ z$ d- A% [( q4 _0 T
B.客户端的时区设置不正确
/ L) Z0 [; s4 l+ [4 i% oC.用户的杀毒软件阻止了所有安全的cookie
3 J D. D6 z, k! d; ^D.浏览器被设置为阻止任何cookie' q* ?# c! e3 n1 `8 _6 B
E.cookie里使用了非法的字符" q, F0 v' \+ p' b5 ?
% h1 V9 N$ V9 X+ v' u# z
# L+ }, {. ?5 q: i* v% w
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?0 M- _) z$ @. m* L0 C
; }7 b% y! ]+ QA.1440秒后
) U/ M5 a, a8 P1 A% b5 zB.在session.gc_maxlifetime设置的时间过了后- [! u' }* N6 |" {8 C
C.除非手动删除,否则永不过期
1 q3 A/ E( h! }3 b! dD.除非浏览器重启,否则永不过期
% l* @7 S# c8 FE.以上都不对
: y. { b2 X% V& o v2 i% R# q p' H3 }" s0 {
4 C9 P& j! N: }& c' S/ }& h7 w15.哪个函数能把换行转换成HTML标签<br />?
, |7 }! v; g# G/ I2 q) ]4 ~4 H' e+ E" ~1 |+ Y, m
答案:____________
4 o/ c' i) z) d! b1 S' F. @
7 h* \0 x4 m( m7 b' z9 [# S: s! i6 G! }
2 a# D; |! i E# I( S- z
答案速查
: H% ]# r; |+ N6 n8 Y: w; z: ?; d5 k1:E
. U- Q% {$ _8 ~2 ?) n" v' C2:setcookie/setrawcookie
6 z% y. N. W' D6 }0 H3:B5 l# K8 U( }$ O$ P/ a% c" D7 v
4:BD& a5 w$ u1 P- w% l' Q; X
5:BD* I9 s0 q: }: f, j( j% s
6:D
4 `6 f, C0 X" l* q# n: ]7:A6 }7 W j3 ^ f
8:B
" h! v& l- C* U, i' @9:C
3 C6 T) B" y+ c5 _/ d1 [* I10:B7 ^- c2 Q/ F9 \# ?+ Y) o
11:E, \9 \+ I# s1 I, ]( ^$ D& m
12:A' u" [9 a/ b" ` n2 @! Y! K
13:BD! M2 D. A2 o" c7 m) k( l
14:B
0 k6 k1 D8 \" f) P* O15:nl2br
$ u/ G$ m; ~) b+ A+ W6 [1 i: E M3 H4 t* |4 [: u
0 y$ t- N6 q. t% p
0 K: M* N1 M) ^; D+ N. m答案详解
$ O9 W. [8 f% ^# I# Z
# ^; u& w3 Y0 C5 p5 I) z1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。+ I! |6 D4 F( M$ D
6 `& G7 b, j! f
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
" ?% L+ c1 m! y! c' V! E; h8 Z% v/ @7 v$ _: @" n# X; c, Y9 ^' O
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
+ u4 F4 u6 X. E, F8 C2 y. D# D9 w% u' O! H, P+ b8 t/ O+ m
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
7 z9 h( I( W+ x3 s. ~# O, C8 {. T* V, C! m
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。) v0 J, V" v) `) O9 C
! S. j" ]% u1 N n
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。3 K' k" R; `# I+ O
% \( T+ H5 ]0 a' p& Q7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
) a# k9 Q0 S. R6 V2 Q! A8 w5 o. s$ K5 @6 u4 B
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。* B2 j1 V. e! H7 i( x' C
. W' w$ I7 C. a- B' I
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
/ ?2 _5 J& ~" S- T% Q
( @) K8 H, B' Q4 d0 z10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。# g/ p5 |/ r5 |6 a" t, w
5 F; V+ Y7 z" W# a
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
# x f' h. z3 j: k6 f9 N& o7 w* u1 K
0 }/ A# c$ i' x12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。+ Z1 y' M3 i5 ^4 T, x
% @. G2 I* i3 D0 u1 \13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。) G$ }$ u* J4 z, i
- c. i5 K6 u6 {3 Q14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。# r+ G% {& U% U7 S, X. s
$ e( b0 f# @1 B! ^( f9 y! H
15.函数nl2br能实现这个功能。 |
|