  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14197
- 金币
- 2389
- 威望
- 1647
- 贡献
- 1337
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。2 F( j+ Y0 n- G/ z8 H
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。0 N; b- U2 Y( H0 u) u( X: x5 C, A
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
; ^! O, X) H* a+ E) l! d0 K4 p7 k5 V2 }7 d; Q
4 A# R7 D8 m( ]4 j+ o
问题7 R: c4 G* t0 j; D% g' l
y2 Y5 S7 o' m
1.如何访问会话变量(session)?
5 O% F/ S1 b# O1 @
! c# L) c* P2 {A.通过$_GET& J- g4 v9 ~$ v9 `0 s. b
B.通过$_POST
( p+ s" M3 Y$ a# @3 r5 w9 wC.通过$_REQUEST
, l Q+ V0 H) tD.通过全局变量
4 g! \2 x8 [; w, S( R# d* o0 B2 mE.以上都不对
% r5 H* c1 @# c+ c- m# H; d! I( ?( b9 t" Z7 ]+ J
' e2 ~5 V e0 N$ W
2.哪个函数能让服务器输出如下header?# [* [7 Q' M. h1 j: O( s/ i
2 D! y- u, ~6 Z# e9 a
set-Cookie: foo=bar;& x( k/ b5 }) K' n8 ^, q9 ?4 I5 u
$ I% I3 x% \. S2 K6 y- ]& b答案:_______________5 p2 A7 ?) x) Q3 D- L2 l2 i
7 E5 o5 l1 Z* c4 R5 |" c' c5 N, S2 S7 f0 Q" @( o- U
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?* g$ w8 A% S" m: _
3 ^1 h# `. ^" E( C: ?9 V3 G" AA.通过HTTP_REMOTE_COOKIE访问
" Z/ F1 |0 r! A6 G8 M" Q' oB.不可能
3 y. P' C5 M* m' {9 TC.在调用setcookie()时设置一个不同的域名0 ~3 T# q) r5 X& M- }6 S
D.向浏览器发送额外的请求
9 h. Z7 z1 }! A! X( q2 W6 QE.使用Javascript,把cookie包含在URL中发送
3 Z* k* U% c4 c1 K% W1 l
( R9 A) i- h, I- Y- G% |' v1 m A% b6 z) b1 g i p3 L: ~
4.index.php脚本如何访问表单元素email的值?(双选)
, N' H% g O2 I ?
/ [* {, f$ w" |<form action="index.php" method="post">
. l, m+ i# [8 E2 P) b7 E9 S<input type="text" name="email"/>( G0 G8 Y3 `/ M1 a# o
</form>
6 g, [5 O2 m' C+ y& `
( Y! w y( Y6 m- n, mA.$_GET[‘email’]2 X- @- U) z- r. x5 s
B.$_POST[‘email’]
) s& q" r7 [" W' `' L7 d! KC.$_SESSION[‘text’]
2 F+ ]9 ^: b% w2 q) h& qD.$_REQUEST[‘email’]
+ e1 E: A7 Q. N. U/ ^& ?E.$_POST[‘text’]
$ x5 y+ I/ J- q$ o4 c, J
; t5 m$ N2 _9 W6 |' i M4 Q1 t- F8 t+ A" Y
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长& @3 j# G, S1 W) n
B.没有变化( j$ t9 K9 {2 }
C.在浏览器上打印该字符串时,尖括号是可见的* {; I0 Z# v% I- E3 |- m
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
. Q, o4 {. l+ K8 ]& c1 d0 ME.由于调用了htmlentities(),字符串会被销毁& s( Y- p Q& {
: S# o' N4 g; h
% M0 F) R$ a' e, r+ q) q6.如果不给cookie设置过期时间会怎么样?' r5 b; B3 k$ H- c& x( O& |/ \
$ T* W. f9 R+ u# j, @ l
A.立刻过期6 v k1 T+ m1 G$ Q. G
B.永不过期
& l' L3 \7 W5 c5 o) PC.cookie无法设置: M# p1 O& K7 X9 ~+ }9 ]% b
D.在浏览器会话结束时过期8 v: s0 w; t' S5 J
E.只在脚本没有产生服务器端session的情况下过期
' D, Z: o t9 _, ~2 J9 C
8 l' X6 e, s L# S
( t" ]+ c5 y8 U; h- o# h- h& w, Y7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
2 _6 M! [1 P' a# d: ?B.Array2 q" Y4 j5 D; L- }) f( n
C.一个提示
7 ~" ^9 y/ n% RD.phpgreat1 z0 K; F9 P* H$ b8 }
E.greatphp3 m$ e6 d3 b4 z" F
; E. s2 u; p% {$ \- }' E8 w) I3 q
2 ?) Q& l4 I8 X) B' S1 N3 C
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?- k5 V! k: q+ \3 x- f
]$ R. p6 Z0 q6 h& \- a8 ^. v
A.这两个是明文传输,之后的信息加密传输
3 p" H1 M+ P9 d3 xB.加密传输
6 z2 a6 \5 W [4 hC.URL明文传输,查询字串加密传输2 i! X8 E: }% M# j
D.URL加密传输,查询字串明文传输, X: e4 l b6 \) B; `; x% E3 n
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
7 W9 e9 p. d% v& J& \! K
$ t% a0 b- t9 k4 w! K
, Z% n7 N& A: g+ P6 N9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?+ g5 {7 m7 G }% u
8 ?% Q- u9 `7 tA.它们组成一个数组,存储在超级全局变量数组中- d2 }$ i ^0 [' f8 E2 C
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
) f' G' [( z* O; I; P: `C.第二个元素将覆盖第一个元素8 v& u) F& m2 O2 W% h# t* j' c
D.第二个元素将自动被重命名
- ~ G( k" U* E0 A( s) NE.PHP输出一个警告
/ A4 K8 n, j- B4 y; { _
3 o1 ~4 B) `0 t3 N$ g
4 r- j) o% W* X, h+ V/ |4 G10.如何把数组存储在cookie里?
' v# y5 Z& L: ?9 k$ ~- m6 P* |/ e( s* Y c- q
A.给cookie名添加一对方括号[] l7 v& K' Z" W4 h% c
B.使用implode函数# Y! p" c% M8 [ N
C.不可能,因为有容量限制
( b. i. i! D+ S0 A1 H fD.使用serialize函数+ F) C! O5 `% p; v. H& B7 C
E.给cookie名添加ARRAY关键词* D, L4 h5 L4 P, ]4 v8 g3 C3 I
6 C9 P5 U- z+ a A. b
' o+ p4 b- o r; |11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
/ } ?, @ T5 c ^3 b+ t; p: RB.1234567890
2 }7 Y6 Q W4 K# q1 f7 k; MC.0123456789
1 R6 @8 h: f4 K2 t# u xD.什么都没有5 a' ^' g( [; [! G- J# p5 O$ v& }
E.一个提示
/ {* V8 v' t) Q. @* A, B5 \& d# T) k' d2 f/ a( D( ]# I1 `
( ?" _! b# U; a12.默认情况下,PHP把会话(session)数据存储在______里。( {- x) v" V! [% ^# N5 u% y
) @& G6 ]1 b2 ~8 v; k ^# `7 v% ~
A.文件系统
, K) B6 ~" }- Y& e3 m! kB.数据库
( i* `8 E, D4 w9 }( JC.虚拟内容, U% ] k B! K3 S. \- J! ?4 ^& N7 F4 d
D.共享内存
) Y. v" x6 x. \6 [+ jE.以上都不是
2 ?6 P" u" b4 F6 J$ t# ^
- Y/ J8 {7 C- J1 w3 Z) z: Q0 w6 s. K/ P7 A% E# H
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选) [: a6 z' R- b# x
0 J. S- W: h* C% i+ WA.浏览器的程序出问题了
% X! l$ h! A: D% X+ p. U3 x6 sB.客户端的时区设置不正确' @( p& p- {, q; O
C.用户的杀毒软件阻止了所有安全的cookie6 A! c' n7 g6 W9 T' i! [( Z, @! f8 y
D.浏览器被设置为阻止任何cookie% Z" y1 z& D" A5 A% y7 P
E.cookie里使用了非法的字符
! C* r3 a6 K6 o4 y) R6 j
# d$ E* ^" Q; i2 C" \: D5 d7 |5 T
7 |, O; i! v$ N, v3 _1 j14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
$ |# g% Z6 y3 K0 j
8 ~2 X; \5 p& c7 N6 tA.1440秒后
& m s4 e' q! M1 h5 ~! ]" aB.在session.gc_maxlifetime设置的时间过了后
1 T2 O# p) A- {8 PC.除非手动删除,否则永不过期. b6 \/ S* Q5 k; y( z
D.除非浏览器重启,否则永不过期0 Q; B# a( i: H1 i( M, G, B7 h: j
E.以上都不对, J1 ]# }1 X( X
1 |& M' ~) B- r: |' Q5 _$ }- R& c2 i, H0 \1 c& _9 Y4 \. n
15.哪个函数能把换行转换成HTML标签<br />?4 j$ ^5 c) K8 ^: }, i: x- i
U# c- X- l) \5 n答案:____________9 S; A" f. m9 N
8 z1 B3 c* a8 u$ i) Z/ @
+ A2 G: ]" B% X9 U9 G' r2 b: {' I$ |/ G, P" m( W2 B
答案速查/ [) N! u [8 f2 b5 ?9 `
1:E
3 k/ \* v. a! b" {( }8 N+ t2:setcookie/setrawcookie0 u" @& N8 ?8 v0 ~; }1 J) G4 Y# y/ R7 c
3:B
7 G T( ?. T# R$ ]. ?; X4:BD
/ }* J6 S& c Z5:BD+ _! c8 U" M: Y. \
6:D
4 [: M- Z, v6 ?- _5 R- j' X7:A
" }; ^' p: L e% }. l* J C' ^% L8:B7 H4 F1 O3 L `( _
9:C1 S/ q/ g F! x6 _1 ] w' l& F
10:B
$ K, X9 P, {8 d4 j4 f! v11:E
" C8 s, F' h/ ^/ ]12:A& z0 H' n" T L2 P6 K* u/ t G/ }
13:BD
% H* {; L4 L1 d5 A. j14:B3 w7 q- I. S0 p4 D) w3 H
15:nl2br
' |4 B6 V! z; C) H1 A- ~: ]' R2 p
/ d2 X6 p5 I4 u# V" J9 j
3 S0 O+ y( ]9 G/ ~, P答案详解
, c9 w5 h: V, F! q* |
# ]; ` d3 L& c$ L+ t7 ^1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
?4 \- g7 }2 Q6 T& U
2 |( Z& S5 F3 ~2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
$ k% V5 S1 ^1 n7 X0 g- B! A0 {7 G3 k; G. ^. I/ ]+ R% Q6 G
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
! q" T, [) m {: A6 J4 j% ]5 r r8 U0 u; k: ]' r) t. L: e# M
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
a+ A# h/ g. [7 ?
# q+ Y4 K1 s1 t; X9 W0 ?5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
( G4 w( r5 Z1 r6 d' G1 w6 _- ^$ n3 P. @7 }1 ^
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。" Z& S5 R# M9 W% b8 R
$ I s6 m$ w4 m( U$ ?* K3 h( O4 }: f
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。% f& C' Z/ Q* Q4 z) w+ Y
! ~2 h5 W5 y# ?* `' F+ E
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。2 p- M. a2 I. b# v
b# Q0 f) {! K, P4 ^( O6 s, I4 t9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
/ ?4 d" o( s S7 e5 Q3 N2 n/ n# Z! k6 t; ~8 `
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
6 F* ?! |. [0 M5 @( B# } h7 z$ G' s! l7 Z
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。! P! U `5 _3 I
* K, A- k. B7 A0 q6 K8 v% Q8 w0 ?/ T+ R12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。1 j3 l( h$ v2 M4 E O
8 y& d5 O; I& E( {: B4 W
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
8 o- j. B& w" W' Z2 e' g8 h" {2 e
2 e, Z! ]/ f7 q/ ^14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。3 ?/ P5 ]) ^+ H/ M0 V$ D9 t
5 f1 Z8 u: E5 o' k" v2 l: _( v
15.函数nl2br能实现这个功能。 |
|