  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。9 h$ R, _% J2 B' x( ]) O
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。( @! x$ }3 E. n8 x# B5 I
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。) B) d, W5 O1 Q
. p x- @) `2 a+ g+ q j8 l1 D" H( k5 M+ }4 N, j, i# [. s7 M F
问题
& z% G3 R" t! ^6 A- Y; h* K
& E2 ]8 b8 K4 _7 \/ V. B1.如何访问会话变量(session)?" a4 Q, y( a0 F f$ W9 q% v
$ E& `# V( S5 B8 ~ xA.通过$_GET8 p4 H ]( d V% \3 W5 I& U
B.通过$_POST1 C, W A. K, o
C.通过$_REQUEST3 i6 w; C4 \! b5 k. P' c u
D.通过全局变量
$ L6 k) u% E3 c% A. [2 N& n! k, |( dE.以上都不对
1 j# B5 V, I( ?4 q9 }& G# o+ N J6 W1 Y! \# i
6 q: v: |) R* N7 Y. m( x2.哪个函数能让服务器输出如下header?
4 e+ z, n8 X! @$ m# _/ `& Z
' h8 g% [* D6 j4 ?8 o# M3 {7 M* ~- Pset-Cookie: foo=bar;
0 @9 T! D% ~- s: o/ g: L0 d# J. |" u+ g t7 d7 ]6 X" S
答案:_______________
/ O+ _% c. W" |& V( |3 d
1 o. s+ }3 _6 F# F* i+ S( M( r) T1 L2 E* l
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
) w C% R; o( s8 Z S& n: f) U
5 O# h8 n6 i9 U$ }3 R# ^; AA.通过HTTP_REMOTE_COOKIE访问
/ m8 w) Q9 h- kB.不可能
- W$ |. ~; m% Q8 p/ j# i- E p7 HC.在调用setcookie()时设置一个不同的域名
" D3 _7 {- a7 M* Z' }D.向浏览器发送额外的请求, i% F9 u0 G) @* O# Z& H- {$ G
E.使用Javascript,把cookie包含在URL中发送+ K* \6 K* ~% ?5 ^) l ?( Q; ?- L
" m* z" w1 l& w9 r R# P
6 U$ p+ y& v" y8 X( r/ G- z* f4.index.php脚本如何访问表单元素email的值?(双选)
9 o S5 [3 s- S% r/ @ p, C; l# \# X5 t: E4 J
<form action="index.php" method="post">
/ q( l+ K8 [7 z! C4 o, R<input type="text" name="email"/>
, ?7 @* i5 c- H" q* t& t# J</form>
2 X. h9 V5 C6 l v
; j8 O) s% S. _0 I" X/ IA.$_GET[‘email’]
0 W9 Y5 T- m: D* h9 C, OB.$_POST[‘email’]
% M- h# [8 I6 ]; KC.$_SESSION[‘text’]
2 b' r; q, j" v3 b9 j8 fD.$_REQUEST[‘email’]2 i {% [1 t2 o) x3 |+ Z7 [
E.$_POST[‘text’]9 |3 `0 I% |* D" P$ [
' Q! _/ }: c% t% t) C4 X7 b
# V2 p, a) A. [: l: x5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
- h/ }2 g+ W0 f0 IB.没有变化% S3 F4 l- k7 y# i9 j& ~& o# S
C.在浏览器上打印该字符串时,尖括号是可见的
B. Q9 a9 [" K- v1 vD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
! u5 `4 M+ G9 {* ?E.由于调用了htmlentities(),字符串会被销毁) u" ?# L+ P" S. ~# J/ V
7 X H$ P' H# q! U$ R& }% t* ?/ [$ e% m* ]1 T& I! n' [
6.如果不给cookie设置过期时间会怎么样?
7 F0 T8 \% ~6 B/ T# ^3 t1 N7 P1 U' C( A9 |
A.立刻过期) v" t. B- J" ~2 c9 X% ? Q) q
B.永不过期
1 O5 [6 s3 a' B4 l$ V% f, N% }6 BC.cookie无法设置
Z8 ~- a) M/ q1 R- O7 [D.在浏览器会话结束时过期/ N4 n- w d* V$ M; [
E.只在脚本没有产生服务器端session的情况下过期
Z' S T8 p. c! _) ~4 A! ^: T$ W! w' r. ~3 M' [
4 M; N2 u# k# C7 @4 [2 M
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.什么都没有; g' a+ w+ R8 A) e- x
B.Array
/ ^9 b; d2 K7 V+ x2 m$ iC.一个提示
# g! Q& F" G* Q$ B* H4 x& m: VD.phpgreat) {0 I& h) }4 B! p2 K
E.greatphp
# {8 r5 L+ R6 l5 F( Q1 Y, W5 c6 f6 J$ b7 p9 R
! E+ i# {; v. C" ?
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
8 S1 p& H$ b7 M5 Z& q5 @& p1 |9 J
A.这两个是明文传输,之后的信息加密传输
# e$ B( E. |7 L: a2 H/ X- bB.加密传输
& [6 U" a# k* X/ F& u) |2 dC.URL明文传输,查询字串加密传输
& x9 i" N- w& P8 d9 E" M; y+ `D.URL加密传输,查询字串明文传输' P S' j6 p. l+ `: H& O2 c9 z: p
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
$ t& h& h9 R+ U
5 [# Z" x$ M6 Q* z0 O7 y3 Z
' V3 Y9 `# f, T$ u6 s5 O2 [9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?. K% V0 ]6 j( L V4 Z
9 X: T8 t9 t9 |7 Z8 R3 cA.它们组成一个数组,存储在超级全局变量数组中
) P, `+ \6 R5 QB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
) e; Q' ]: E, }- } t) IC.第二个元素将覆盖第一个元素
7 K) g; A Q( K: r. G, I$ n9 jD.第二个元素将自动被重命名- v, z7 V" @1 | b
E.PHP输出一个警告
3 d* b! r! S1 Z8 o- m& I
0 r$ d& c& Q, i/ V$ C$ V/ _0 n
. ?' K2 S. q4 M1 c10.如何把数组存储在cookie里?
& T5 Q- @. Y! A/ K/ ^; `: `! p P6 v/ O& |: _
A.给cookie名添加一对方括号[]
# Y9 b1 p! V2 I7 e# E1 ^2 YB.使用implode函数4 S# Q' ?. N# b9 p: j' x0 a3 s
C.不可能,因为有容量限制
- C; l/ W! q, JD.使用serialize函数9 \+ ~ g# m% j
E.给cookie名添加ARRAY关键词
3 n& }# K: ]" J4 u/ D0 k9 Z
# `; b ]2 L' X) b3 E/ F9 h$ A0 t& J6 M+ O0 P# y! g
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910+ Q R3 d9 p- K
B.1234567890
9 C5 b9 _: X v2 o9 NC.0123456789" g; w" w4 ~+ k
D.什么都没有! k% ?( Q2 u- a2 b
E.一个提示. a) W, g3 |/ F) _8 S
) v( W* a. }3 B# h8 ^0 i5 R2 t+ Y6 o# T% J( O$ l! j
12.默认情况下,PHP把会话(session)数据存储在______里。
6 D( Q( @5 q) {! [6 C7 ^& n2 y
+ X1 J; Q2 d% }% F5 W: fA.文件系统
9 C0 B) y6 V' a* b3 T' g0 l4 ^B.数据库
! M% o9 G$ W+ Q) [C.虚拟内容
x+ J5 Q- m7 W# P CD.共享内存7 V" D$ a# R) P9 N( E7 t1 g
E.以上都不是( ?4 f* b* ~7 C2 F) v
. v7 s ~9 u5 K/ Q/ Z5 K8 {, ?# Y
8 b# M8 m4 T& f3 Y# x2 I0 o
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
1 [9 I- O9 K1 m9 P L9 ^& c% |& }! ~1 ]+ w C- |- n0 C$ O6 r
A.浏览器的程序出问题了
( Z9 V! R+ {5 ~, l" dB.客户端的时区设置不正确7 T7 U5 w" f; C! o c
C.用户的杀毒软件阻止了所有安全的cookie' k0 q: ^, S8 q2 ~
D.浏览器被设置为阻止任何cookie0 u# n4 \ `) F4 {4 Q$ b
E.cookie里使用了非法的字符2 P' x6 `3 \" W. w. G+ k4 K
2 D( J$ n7 L% Y7 v2 T4 X4 u4 w0 f. O- R4 x" V5 V
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?" j4 Y) ?7 X; P9 k
1 O1 e: I" q) v) {
A.1440秒后
5 a! w* |3 M6 f A. `4 BB.在session.gc_maxlifetime设置的时间过了后
4 ^# ~% F5 Q3 Q! t% V1 {4 l+ `C.除非手动删除,否则永不过期
0 f) ~- l: m, ^; f S( dD.除非浏览器重启,否则永不过期
+ X0 e2 I8 M# f/ GE.以上都不对
2 g# l5 ^$ Y. L( g
' i4 c7 j/ [$ [: ]' I* q/ P. \
+ a; W& a# U- ?+ {! C9 R( Y p15.哪个函数能把换行转换成HTML标签<br />?
4 N+ P! Z' q% g3 t
/ I+ @* M+ C( o7 ]% z3 |0 G答案:____________3 S/ ~5 B- Q; J9 x# T
& w. D& K5 M- ?7 c3 T5 D
8 [: H- ?5 f7 L
% M' _, q7 `9 X8 b
答案速查! G; q+ w6 x& ]7 [0 n
1:E
$ A$ o" C5 \, r- n; p3 R" h2:setcookie/setrawcookie% k- n' ?9 [8 b( `- i: z6 t
3:B- ^% c R9 u. H, e. R
4:BD0 {( y$ \2 G7 U$ z& z0 `
5:BD. w. g+ m. l ]7 B: T
6:D1 }3 w9 t5 N* T
7:A8 T! L, M8 `! z8 i% U1 H8 _/ {
8:B8 W2 Q7 o' q7 F% R
9:C3 _% ~8 R& e* D" h
10:B: F- }2 U8 O1 n- Q( x; Z; q: V) B; f
11:E- H) j% ^ }5 a1 s
12:A4 {0 B* Q2 h. W0 _$ V% |8 s
13:BD
) @) z. c4 d8 n14:B7 J6 H, I! ^# A$ a5 Q1 F3 \* W
15:nl2br6 D% N1 h' {& F6 ?8 w+ i( i+ [
+ @" X% o- V. d9 s& Y2 X: d, _$ y0 J3 T, l
) d, B5 P4 u8 }5 r
答案详解
: X) ^' F2 t& C" k) L* G/ W, R0 q
1 j' x4 M( a: q1 Q1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。0 \, G# C3 y! l I+ M# Y
/ ^! `. ?6 e; y h- V8 ~0 H: D- Z2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
, P' P& e% F- L Y1 ?* u l K9 e) m7 {
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。# Z: R% _' s5 e. E S. i
t" h0 R" o( a; K9 Y
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。+ r/ A4 I X& z5 ~ Y" F. D
) X* P. @9 F' D" T4 b# y
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
3 E# c7 r2 D" V' j! u
% c* {4 m n5 o- X6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。; [5 G) F1 u8 h$ B( j
# H N+ Y& L5 d7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
* q' O! S$ t. `, z' D
; X1 B6 M. W2 c# v+ r8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。% Y: r. T4 p$ o S) a& t
9 g- G: z% g6 m# A
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。- a1 ?2 f5 u* T3 R
8 M1 w& F/ g# b' d+ P* Z
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
$ B9 }4 {2 J8 B* l
0 g! f' \/ T8 d9 x+ ^! G6 M, D11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。* F7 J% \3 _) L+ b; W) K6 [( n! T
8 \! @. Z& B/ b) B' n; |7 A12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。, d7 y6 \8 E) |; G
4 M \" ]- |( V, n2 w
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
5 z- L5 k) Q+ S- C2 y
; t# b9 \: C: e# f' s+ ] F2 c14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。 J0 {, `0 I6 d2 g4 p) l, d
( V7 i) J/ {5 h0 g9 j; A
15.函数nl2br能实现这个功能。 |
|