|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
7 i w$ e1 O5 p. s' j6 z与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
( O$ u* n0 c/ [# W) f7 i一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。! X( e$ x: i7 e
6 L8 D3 \) G! g2 ~3 j- F$ O# ]$ W- E3 q" T' g; S0 P1 O
问题
( @0 @/ u+ y" R) t" j% K) k$ c; y5 f
1.如何访问会话变量(session)?
8 e* D8 t) u: o% W8 y7 J, |: h# r- `2 v
A.通过$_GET
% g; P, K, ~% o1 \7 S HB.通过$_POST$ v/ L7 ]+ a. p6 h7 M- K
C.通过$_REQUEST
4 P5 O" C$ A0 N2 i: Z3 f* }D.通过全局变量& \" `9 M. s. ]) O7 P, n1 t; j! d
E.以上都不对1 s: t% ]. M$ h2 c Y# K6 @
3 u( Z& v( v# _( M
% g0 k( S; N8 k2 {+ D2.哪个函数能让服务器输出如下header?' x0 t1 i* p1 g# N+ Y/ e5 ?
) y3 y( U# y7 g, e: \
set-Cookie: foo=bar;' D6 W0 N8 }7 k; c$ I
' P- s+ s$ d& e1 b9 {# i4 {答案:_______________0 E% l8 w* q/ v
! f7 W0 x( y1 s: |5 d
* `* T, h8 D* t Z3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
6 f- B5 `, z" l1 l3 Y; _
6 T$ `$ _& y: o! i/ V, NA.通过HTTP_REMOTE_COOKIE访问
: j9 ^4 o' x( _+ p) _& t* xB.不可能
" u8 d4 U% s1 ~ hC.在调用setcookie()时设置一个不同的域名
u9 L% m6 i, }7 _D.向浏览器发送额外的请求
4 ^. d& S b- A+ W; KE.使用Javascript,把cookie包含在URL中发送* g/ [' C y0 ]* N* X' H3 z3 G
' x- g6 v; r3 M
: M' X$ {4 ?' I/ d4.index.php脚本如何访问表单元素email的值?(双选)5 p' F4 y2 ], q F% G& s
) c+ X6 G A5 R2 G0 b
<form action="index.php" method="post">
0 }3 g& {& Z, o& [9 ~/ p<input type="text" name="email"/>& I% b# d, C! c
</form>
! Y L9 o6 Y" ]4 z; t! B4 O+ M) `: J1 X
A.$_GET[‘email’]5 a* ?, ~0 u1 l3 m' S5 F
B.$_POST[‘email’]
- z" @; T% D4 D/ z, B @$ S! BC.$_SESSION[‘text’]
! P2 N8 O/ { v; _0 ZD.$_REQUEST[‘email’]
3 b% y) s6 q0 IE.$_POST[‘text’]4 ]: o8 d5 G0 |2 v7 S# B/ @
: V. n; e: Q, A/ p9 N7 W4 X3 Y( q( h3 n& B0 y- q8 y
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
+ C- J7 M/ [3 c$ ~0 [B.没有变化3 @3 f+ c. H6 s$ }; ~ ?+ r
C.在浏览器上打印该字符串时,尖括号是可见的 R. Z, D' Q4 s8 f: B. X3 O
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
6 x6 [, X X- {3 e& V, W9 P! F3 z9 GE.由于调用了htmlentities(),字符串会被销毁
% g; F2 x% _2 ?% F* d" v9 d1 J. `# k! Q/ Q) x! }* [" f& O9 Y
: ~# e. }' i1 }% b, y
6.如果不给cookie设置过期时间会怎么样?
% l) M. } P0 P
8 ~$ b. j4 z, H; ~4 H: K, XA.立刻过期3 ]: s p+ b. m* j
B.永不过期" B9 E$ ~+ ]0 z% ?5 [2 r
C.cookie无法设置
9 y2 ]" l; x9 ~5 mD.在浏览器会话结束时过期
# O8 }$ @& \! i$ HE.只在脚本没有产生服务器端session的情况下过期+ o3 l8 s p0 u% F
: {: Z6 ^+ j6 q# x, ?' ^. ]4 r8 s( s2 s7 t0 x- H( h
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.什么都没有
! r9 W. N0 b( J$ M& o$ J! I) kB.Array+ c" o& x3 E# k5 i
C.一个提示! f5 B' u% I) b' P" G
D.phpgreat0 M4 I" ]- \! r% g, D% a- H
E.greatphp# b8 j$ L" m+ N- S* \" p
1 T- F5 t+ b. b6 S4 c& b5 S
C: r/ ~# c/ S( ^8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的? f' w' A: s+ }1 B
1 v0 M. g' ^5 f3 BA.这两个是明文传输,之后的信息加密传输
. ^3 ~: ]6 J8 P3 K$ G3 bB.加密传输
- [8 ~0 |2 m. \" O6 F6 QC.URL明文传输,查询字串加密传输
7 C4 R! f( N% L- x2 j% s% G5 iD.URL加密传输,查询字串明文传输' C5 A9 S7 u) [6 p* Y7 |
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
# u/ v& P( g S e+ l+ g/ B; @- F+ p% R% L
/ [5 \% p0 ?5 Q1 m3 c% p3 K
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
' u( ?: F* ]5 b; k5 x1 }: h! d1 v+ U( t& ~- c7 q2 c5 Y3 T0 [
A.它们组成一个数组,存储在超级全局变量数组中& x$ l3 o% X$ y1 [/ E4 ]
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
l% A4 V' @; x; z1 U& \C.第二个元素将覆盖第一个元素
0 a( n1 N/ M0 d$ j0 hD.第二个元素将自动被重命名) a* o9 H9 F/ c
E.PHP输出一个警告
) R" t/ A6 @9 [* o3 B/ b7 b' R4 K
6 J5 d; d& y" y! d' e; p9 J2 T
, f' l8 f/ Q) a10.如何把数组存储在cookie里?
8 p+ h' f5 B+ p; Q- k w' r1 k5 H' d- J4 j+ @. O% ], i/ y
A.给cookie名添加一对方括号[]
$ }0 F5 c4 M* ]4 YB.使用implode函数( u) ^4 x& `+ W: j- o' S) S
C.不可能,因为有容量限制4 N4 f) U6 B1 }
D.使用serialize函数
3 o+ k+ v+ A5 fE.给cookie名添加ARRAY关键词2 C. {' ]+ r2 H' ?
`$ m D: |! m& q, J7 U: m1 }2 |% K+ Z$ R; B
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910: {% C# B1 P/ h) D6 T. d+ m# a
B.1234567890
! n) q! v. M/ I) c8 SC.0123456789! M9 |" x3 ?: j2 D7 q, K2 y
D.什么都没有0 ~' z' @0 }( o4 G, G9 r4 l& F
E.一个提示3 r9 `2 ^( \& z! \, R
o, D7 ^$ t7 v) s+ o8 I6 A/ W$ g5 g1 c
5 p7 e5 \/ T( U9 v: J+ K, B12.默认情况下,PHP把会话(session)数据存储在______里。
4 E8 `* x5 C$ X. T5 s9 s) q+ V9 |' d: ~- s, e+ P7 y
A.文件系统& n0 }* R$ S! e
B.数据库
! y8 U+ H1 i2 uC.虚拟内容0 i6 a& I* w9 e( T* C
D.共享内存+ {2 Z) Z% N: V1 _' ~
E.以上都不是, s. c4 x3 A+ }+ `% `* |
0 q3 K' v9 L( s% E8 v3 B
" O& Q* a9 C8 V; y, O13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)4 b! W% }7 M& J, P3 G, G+ K* o- J0 N
, {3 D. \5 y9 e u4 V$ ~
A.浏览器的程序出问题了, f8 j- u* l4 h; h/ r1 s
B.客户端的时区设置不正确
5 U! U& {& t! [1 S& @) {' RC.用户的杀毒软件阻止了所有安全的cookie ~" G: @0 q! v7 @! h8 s2 E
D.浏览器被设置为阻止任何cookie
. z" Y% L9 J, E* {E.cookie里使用了非法的字符
" u" g! P7 x; E, j! `) C+ g, I+ m* s e- m
9 r, U2 R. N5 p$ w& b, e
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
$ W7 C) G) \3 B; E
6 t" o9 }0 r. X# yA.1440秒后6 `/ a5 ?$ C$ L! _6 T
B.在session.gc_maxlifetime设置的时间过了后
$ a" a7 _% F) s) u0 ]$ O8 \C.除非手动删除,否则永不过期8 G. q* g' R& k l) f5 y3 R
D.除非浏览器重启,否则永不过期
A4 X J0 r& f- B4 I" ^+ A. dE.以上都不对! u$ y- V/ b1 U$ Z, R) i
/ m* s# S+ V0 T6 c" a5 Q& s0 g$ b1 ]; {' O7 o
15.哪个函数能把换行转换成HTML标签<br />?
% |: {, D) K3 l1 f) u
: }; k0 E6 L% Y; s Q3 j答案:____________+ q7 \6 o% E6 c" h0 B+ u4 X7 o
% ?9 X8 {" p- x
% ]3 e" I# i! Y2 R7 R. Z& ?1 I" c9 r1 e @
答案速查
8 U0 ^+ J) ?; w2 S1 H3 ?9 `1:E
' G7 w2 R& a" k9 s2:setcookie/setrawcookie
# ?; v5 u6 p6 z3:B9 d R$ N2 c, e
4:BD+ M/ z. a L7 r, N- ?4 d
5:BD. C, ?5 K4 f# R2 q
6:D g# J* {8 f5 S# Q
7:A
1 D2 w7 A$ _) t h' v8:B" P; Z# x8 Z- Q" ~' i( x0 Y
9:C
5 l# c4 G$ a1 M8 u6 S4 f10:B7 f4 O- a% d8 R. N) ~! y$ e: J
11:E, b: B+ Y" D7 \: G
12:A" V- c! N$ Y9 \" C4 a M$ p
13:BD$ K- X1 t% V& u% I3 m5 H# E
14:B
7 h- S4 _$ s; a& R7 ^- [5 L15:nl2br* `+ i4 X4 k, o: Q
6 E2 U1 \1 @6 O2 g- r) o
6 j) S* W0 X( w0 T
' P. z! ]: }) C1 Y+ j/ G/ i答案详解
7 @) x5 u* ^5 m0 t8 s0 v/ a: K0 F0 w, f3 E8 e
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。8 C4 ]4 P. ^2 i4 _$ I+ q$ n. P
3 ^$ ~$ D! N1 w( w" d% H! C" j2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。" p) j+ `: A1 e# H& z( S
% e! D1 x+ r) K, [) f3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。% ^$ a7 S( u9 K
& C( e: n) \$ Y0 K3 K
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
% M# G6 u# N1 u- t6 t! r2 l5 u* d, C5 d5 j' t& c0 i7 U+ h
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。( Q7 e3 g* j- j) ^* z0 ^% h
7 C4 c) ^( c8 g9 I: V
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
6 @6 e7 A5 ~6 y+ @8 v7 x+ Q) {& w7 ?; }
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。8 e6 k2 ` k, u; Y& |7 p" X
$ u& w" F2 n. Q8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。6 [; V& t S* k* w/ X3 j9 ]
8 f) b* p7 E) z8 z. K2 r' c( X. }
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
6 y) G }7 P4 K- |- P6 ?' j$ D8 c; j% G, G
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。' f; B3 Z% z& d: `4 b+ F; j
$ b& Y+ {8 Z' L6 k, r& @11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
4 I( O7 K9 z: X
: d1 A1 x4 B. o' W* N& s12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
8 b1 B7 k& p) a. h% P7 O0 T% Y% Q9 d9 E# S
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。( p% m( H" Y3 g$ n' j
0 y% b2 U* T1 ]6 e- J- w7 H14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。% }* p# }6 [( ~
/ A/ x) f8 M1 n9 H' @- a
15.函数nl2br能实现这个功能。 |
|