  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14159
- 金币
- 2370
- 威望
- 1647
- 贡献
- 1318
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
' b! d1 }7 s; M4 N/ _& S与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
' ]8 z1 \' E ~! m# p4 e一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。 u* O( I! }- a* I
8 C0 _9 }: U+ F' _7 K
5 d1 F7 e$ M6 i' r5 i# b# Z7 S5 [问题
3 N" ]+ Q1 n4 ]; u6 y8 Q3 }( |" @7 y! [) O7 W& P( s$ Z
1.如何访问会话变量(session)?
$ k2 E3 V. j" q/ \
3 K" \' i) T4 ]; z* tA.通过$_GET
0 r' q' S/ B1 e# z! _ r$ @: C. }# W/ ]B.通过$_POST! S9 Y9 e5 f1 L. [. x! M) i$ N: s6 b
C.通过$_REQUEST1 h7 ^3 D D1 q4 }6 [
D.通过全局变量1 Y) m# o) F9 S( f& ?2 {
E.以上都不对$ d' C8 T0 c' \5 P7 ^2 a
. u6 k0 i' Z. `! l# M O$ S; C
2 D5 j- ~) X3 Y2.哪个函数能让服务器输出如下header?) o2 q) t* h" z
, f3 U# g y+ j$ W9 I& Eset-Cookie: foo=bar;
) k0 v1 \+ t3 Y2 F7 J3 l& ?/ p9 c3 o9 X, a9 J _
答案:_______________, U! W$ u, h1 F% P, K- y
1 X2 @. w$ e) w' x7 T% H: t
' \+ |( m( a" @
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
0 h. @& ^ ~: S' j5 \2 W7 z
) ?' z* H! z# l3 v. x6 G$ o6 ZA.通过HTTP_REMOTE_COOKIE访问- l) e2 v4 u% K2 H8 M Q ^/ X" i/ W
B.不可能
; o- V% r' l+ @. [6 TC.在调用setcookie()时设置一个不同的域名( U5 s. m- l& V3 v1 U: h8 _8 K
D.向浏览器发送额外的请求3 Z! d% ~/ H& [ R) |1 M# P$ ?
E.使用Javascript,把cookie包含在URL中发送
% M# J" O+ w$ I7 _5 ^7 A4 Y: E$ T. P0 z% [4 \# O/ q
# P- s1 q/ @ ~: ~2 A5 v4.index.php脚本如何访问表单元素email的值?(双选)
3 M9 O& B7 Z+ U9 M6 U/ ^; t3 t) ]5 J. S1 I* ~; Q( N; {
<form action="index.php" method="post">
* M. B' X" P( Q R" J<input type="text" name="email"/>
4 `1 t1 w3 D0 |3 J7 A8 }& ^3 Z</form>: H- n4 w. o6 ^3 ~; s2 ^6 [
0 E {4 _/ m) O+ d X( `4 |A.$_GET[‘email’]
/ F0 ?: }) ]' S# h; b. \B.$_POST[‘email’]
# ^3 [6 z R$ T$ n( {7 m) gC.$_SESSION[‘text’]& C6 M/ a, P- u8 L
D.$_REQUEST[‘email’]& g+ k% \: t; i' S5 l
E.$_POST[‘text’]
" @8 g* e, Y% g% y: l4 N" O/ n$ |. E/ \; k3 ]$ E
7 ^ }) F4 d0 [& P, k& ]5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长7 U2 H" o' _ ?9 a# P
B.没有变化
, ]8 L# r) E/ A& C/ Q: s, l( r* e1 FC.在浏览器上打印该字符串时,尖括号是可见的' k, s- V3 c3 L* r. @3 D
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见! Z* g3 v1 e" l) Z0 `/ C
E.由于调用了htmlentities(),字符串会被销毁
2 K& A& x' [& W3 K" t
% ~+ \$ U4 X4 }4 U, G. g0 D
5 `* `/ c6 a. D- Z" o% j6.如果不给cookie设置过期时间会怎么样?
) K2 c! m/ K7 o: l y+ Z8 \7 I8 ^: s4 c# E" a
A.立刻过期 y6 V& b, e3 q1 I) O
B.永不过期
8 _0 Y! T) q; k* S6 ^( Q2 ~C.cookie无法设置# ^( q8 x7 I# @' z$ `$ q. a# s! P
D.在浏览器会话结束时过期
3 S2 W- B3 u2 p" o- B3 cE.只在脚本没有产生服务器端session的情况下过期' a( R c) u$ x/ E+ C
0 O& G1 T1 J) W
% ~3 G, L8 U- D" ?! 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.什么都没有
! k0 k2 R- H% fB.Array
: x, o9 q& A* rC.一个提示3 P' W: D& w# P% F4 X
D.phpgreat& E1 _3 @9 C" F {4 N
E.greatphp
5 X7 I% z# s* p* A
4 A) k0 D; j {. }( ]$ Z F- a8 R5 l/ R! A n: u0 B+ ^5 z& j! S+ R
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?9 N8 y! R' x& Y3 r
8 x. Q0 \; T4 F" q5 |9 F
A.这两个是明文传输,之后的信息加密传输
+ J" M. B! N6 s7 {; r/ ?1 d$ tB.加密传输
b. p& p% \' Y, h+ gC.URL明文传输,查询字串加密传输
+ f) _, M+ y5 sD.URL加密传输,查询字串明文传输
3 t% j \6 P1 Q# l% S4 F' {E.为确保加密,查询字串将转换为header,夹在POST信息中传输
! C9 ?$ {5 o" w$ q2 C1 l
S( ^5 N6 _% s5 v7 x0 j" V! P3 \: U% v6 o. E F3 w" K0 w8 W7 ^0 ^
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?: o6 M7 R: t( @) i# y3 m B
! j- ^% s1 B( `4 Z7 @6 |8 E: I' iA.它们组成一个数组,存储在超级全局变量数组中
3 `0 _7 p* v& }- p6 J8 E3 oB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
+ j% D) h; F* l+ }: j" ^C.第二个元素将覆盖第一个元素" C/ K# g+ A e3 O5 g1 E
D.第二个元素将自动被重命名' z8 \; [& ~3 s' f' h, B7 l1 k% B. _0 P
E.PHP输出一个警告
. O" y+ c- o* `5 e$ t8 L
9 B/ x$ Q# B" _
* _, F; P4 a' u4 y! R4 O" b10.如何把数组存储在cookie里?
2 ?" S. E# c$ O: f! J
- b' m' F; M; ^$ S7 dA.给cookie名添加一对方括号[]
# `, M0 ]5 P- `8 ]9 u# S" V; D. oB.使用implode函数
: R( E# }( C" q: \* `/ K/ g% g1 aC.不可能,因为有容量限制
1 T7 D- t( a- T" ? wD.使用serialize函数- V7 v* \5 ^9 w4 K3 B* ?* u2 a$ L
E.给cookie名添加ARRAY关键词7 H' k6 K2 B9 g) t/ P* p! q
& y* d5 S# t2 W: W d9 o
$ U2 e8 l6 K0 M/ g11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910. x2 O) E- `6 t
B.1234567890
* V* f9 i0 T2 LC.0123456789
* h! E/ f( F+ T# iD.什么都没有
% f" @# ^+ n4 ^! OE.一个提示
; e0 `2 K2 C# r: m* X; ^ C1 O: C& ^/ d4 R+ A& k
4 q# g# y2 n5 f/ c' t. G
12.默认情况下,PHP把会话(session)数据存储在______里。
! a8 N+ d6 x4 Z/ Q. p* R/ @, \' l7 |0 ?; ~" o" y
A.文件系统+ T: u; _) [5 v4 w
B.数据库+ l0 K I0 r' ~! g! q6 p" B. R9 j
C.虚拟内容7 d. w2 w0 c9 @8 j2 x$ }
D.共享内存: h+ Z: Y* a& a8 c5 n
E.以上都不是6 M U3 P; t& Z, X
! o- T* p8 p5 Z, L/ O/ D& b
7 h3 Z! m5 v, s13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
/ {/ O, b" M/ ]$ F: d' E
" N% F' J" V6 ?- |& U: u( oA.浏览器的程序出问题了, B7 H1 C1 V2 B7 Y8 a9 v
B.客户端的时区设置不正确8 c2 e( [8 z% J( A
C.用户的杀毒软件阻止了所有安全的cookie- T; k T* b+ p8 m; c$ `9 k% L- z: p+ K
D.浏览器被设置为阻止任何cookie. V! C6 b3 ]+ }0 A9 k- V
E.cookie里使用了非法的字符2 c0 L: b; B, H7 I
- O# D/ L K* B' U" t* i; F' t# f% A9 ]# j! a
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?' `* Z. S5 T& }( a0 H& H1 j
0 c. a: E0 j# n4 RA.1440秒后
% b" [2 @9 K, Q/ T% ^" p( m9 VB.在session.gc_maxlifetime设置的时间过了后, L6 E, U& q, Q
C.除非手动删除,否则永不过期
" g" c: Y* @+ S' U' N pD.除非浏览器重启,否则永不过期
$ }/ d8 ~- d8 V! C- O% m5 YE.以上都不对 H) h7 {) n0 @$ s4 M$ }
5 E, {4 `2 U9 @+ ?6 F/ i3 @/ E8 B& x ?
15.哪个函数能把换行转换成HTML标签<br />?
0 q8 {1 E6 \; R9 O9 F2 U
# R. ?& P' W+ } c( \: S% b+ O s( @答案:____________
0 b$ P0 J' F* P$ y& I3 K3 B
8 W8 ]/ D* A/ F7 g
1 @9 d6 l' V* G) P/ \! A
* Y3 V/ N" G* P5 S8 g! P7 D. i8 |答案速查
0 _3 V, m3 |1 |1:E7 v, l( i& |% P: `0 S
2:setcookie/setrawcookie
1 d/ f% k! Z {- q* z' C3:B& U5 k5 [3 Q E& \4 v6 o
4:BD
3 w- e; O2 }. B" _- p5:BD0 \$ m- T) r' Z. K& e" [" e3 m
6:D% y! v$ i, Z- G9 J8 n4 m( d# o
7:A
$ ~5 {$ t' T. w1 r1 W% o0 t- T/ h$ @8:B% Y1 M- t5 U( M3 j, l& D1 k; G
9:C
i: A# d, ?1 `; v1 s# y- @10:B, {, s: E. @# E/ ?
11:E2 b9 q4 C3 o# E: o
12:A
' q* M* n% |) l13:BD
a6 I, z4 U1 r! L14:B
; j9 k. ~. J' V$ P1 H2 V5 c. z- U" y15:nl2br" P) d2 @- ?" t" K6 }
i( s2 x0 L1 O
" y- u3 q; [8 a; ]( c+ l- B" I* N4 S8 X
答案详解+ X' N4 M' l6 ?& E( w7 k
* x( w7 a l/ J: Z4 \ x
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。2 d0 _5 z! U3 Z. T5 a6 T7 u$ Q
6 O7 F: Q+ @8 r6 |; l
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。5 i4 e1 P0 w- K6 c9 t( L' C
+ s* }; }/ i6 t4 n) N4 v! B
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。8 x( s1 A6 `5 x
3 n! @( z# q1 e. M: @+ D4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。' j% g& y1 _* D& L/ s. m
; {% v* C2 F. W' `) h2 E
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。1 u4 H, Z) a- L, A
0 n/ \: ?/ G0 j( f$ p
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
# ~! ]0 B8 B7 g3 S. ?" R( n; K3 g+ X( O; q" h
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。$ y, T4 X4 E& ~
% X0 m- P' T( V1 |
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
# y# H# T+ ?& x: \
. D+ L8 D8 J6 R9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。& {) S6 |+ d% `2 l6 {
4 Q+ ^ I, q: j0 T1 ^0 w5 ^+ T0 O10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。/ r z! e# _& H
! I' y2 Z4 m' y: E5 J4 N. e) m11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。8 D5 @) W/ ?! X) Q. M1 N
, w+ K' Z: f# t8 ~12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。' F, \* j7 W6 B. o/ O9 a
6 q* P0 }3 ]! p y1 T/ m13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
/ @3 w+ v$ E& S2 {! Q; n# D1 a0 ]0 _2 H& b% x( }
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
. Y3 R, |- v) H D4 W5 A0 I
# n9 z- \; K- S5 l I15.函数nl2br能实现这个功能。 |
|