  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
; s% L1 Y' `7 k, K% C, K) x与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。0 R: h% l/ O0 [5 ~5 M7 B
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。+ C: b, p9 k) _3 j* p
3 Z: y$ s" C" r5 x" B/ m" U, \. y% K% j7 n, z
问题 X8 \5 C8 r: U0 i
8 I# y7 i& s% e4 o1.如何访问会话变量(session)?
, I2 |' _; B4 V: T, l' i1 m% x$ f4 a) e( t0 W( n" ?
A.通过$_GET A. l: g% P: P
B.通过$_POST1 K2 r- o, E6 ?, G, T8 `8 b9 ^
C.通过$_REQUEST* q# d9 |( X2 p6 O( ?4 q/ t
D.通过全局变量' @. J6 \( b) E9 z ?/ G; L {5 J
E.以上都不对
( X, }% {- P4 \ T% ` V0 M$ J6 i. z( j
' D+ U( S: @5 W# k" I2.哪个函数能让服务器输出如下header?7 z. q- @/ m1 x) v
( [: @( c% u3 N' m* eset-Cookie: foo=bar;, N; Y/ `* K: r! S2 Q! Z% C1 L5 T
% a' g# |8 I- {1 p2 f5 ~
答案:_______________
) H! U+ O& N( d& Q* {+ @
2 r0 n% W! ~0 j% d
h9 |* }3 H( u1 v( z1 J3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?1 p, J) m7 P2 e7 R: S/ u
) u2 k, K# F$ pA.通过HTTP_REMOTE_COOKIE访问7 J: _9 |, X) x' z. t
B.不可能
0 @! C, V4 N& {% ZC.在调用setcookie()时设置一个不同的域名
( ?9 ]2 I4 {! B G( ]6 B" ^D.向浏览器发送额外的请求* x6 {" S5 [$ p0 V5 l& X% K
E.使用Javascript,把cookie包含在URL中发送0 Y# A' \" k, V5 _# S
& m; G$ w/ e) N2 h8 N5 q, G4 O0 O
4.index.php脚本如何访问表单元素email的值?(双选)9 \" n4 N1 V1 _ O* h* m
3 N, ~0 I. N' b+ e2 `
<form action="index.php" method="post">5 B: x* t. `1 F5 l4 U
<input type="text" name="email"/>
% B- c6 q# y7 K4 j</form>
~7 { o4 J4 g( G: b$ ]
6 z% k4 Z+ S3 |. vA.$_GET[‘email’]
* M* X7 O$ p) e- mB.$_POST[‘email’]! E; t( k2 j! R) s! A# l, A
C.$_SESSION[‘text’]
0 V. t( Y2 G- t8 v8 P( gD.$_REQUEST[‘email’]
Y5 e4 V! n$ w8 JE.$_POST[‘text’]) z* \3 Y" `9 \* O
$ q" Z! J8 A& D6 }4 z
; e# \$ p& J2 z7 | R$ @( l
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
3 o& `! S) X3 v( w1 lB.没有变化: I2 r/ I4 H( r; k4 C1 L- ]
C.在浏览器上打印该字符串时,尖括号是可见的
( C! J6 Y( j0 vD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见7 M+ d; M$ c7 x# E+ k6 s2 \; z8 U
E.由于调用了htmlentities(),字符串会被销毁1 j3 F2 A: K7 h
+ S# s9 f1 O t1 d3 @0 z u! O3 [8 c! u8 C7 |2 f8 Q4 a; A# ^$ L: y9 n
6.如果不给cookie设置过期时间会怎么样?
: R. d- y) p e6 }( Q5 k+ ~+ N) q. }/ Q: G) k- N* u, m- r8 A$ m$ ^
A.立刻过期. Z, z7 R, Q; v$ J: y
B.永不过期. S. J( \8 U1 q) u, {0 s
C.cookie无法设置
5 |1 [$ v7 a Y* h! F* l; tD.在浏览器会话结束时过期7 b& ]- a+ {" v& P' j/ [
E.只在脚本没有产生服务器端session的情况下过期: F0 T8 @5 n; k" H, |
0 b$ F) a+ X6 ^6 _/ _3 _8 ^- o
; a- B8 i9 [: b' e. _& s& q9 h7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
; C! f( T1 d3 c( G5 {# wB.Array9 S% \ X- w6 D
C.一个提示/ C: |8 Q" I u. q/ K0 ~. U/ S; n
D.phpgreat
% I1 C3 g* A* Y1 qE.greatphp
! R9 t+ n9 R( E8 c& |1 a, m: L- ^# ~! `% h& |' v9 J$ I) _4 a
8 `) z8 P' F# H' d8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?8 {1 F; D7 b+ _& ^/ h
; r& W; a( w* M1 k# R' B1 N
A.这两个是明文传输,之后的信息加密传输
& X# Z9 R r4 A( J @B.加密传输
* ~6 k) F$ c A0 M" mC.URL明文传输,查询字串加密传输
; W3 A9 e1 D3 R) W& zD.URL加密传输,查询字串明文传输
H( E$ P# A* O' C+ z- lE.为确保加密,查询字串将转换为header,夹在POST信息中传输
1 w0 H& s. F/ Q$ H3 I0 @0 V/ c
3 y9 k1 H6 I. G8 l! k. G" [/ v3 O% E# {5 x
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?! t# D4 [% O/ U& e4 H. A
! E1 g) R$ `% v- Z3 ]A.它们组成一个数组,存储在超级全局变量数组中
1 c% M% M3 {+ R# w5 R* N" V! u1 M4 w8 c0 WB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
- f Q, s' ?* x- r4 m: f4 }9 R. tC.第二个元素将覆盖第一个元素- c; f7 P6 k) ^& K5 x6 N+ ?6 A
D.第二个元素将自动被重命名
( C, @& }7 G0 \2 i" aE.PHP输出一个警告) q8 F$ U8 Z/ X/ E$ r2 A
, |9 I) A$ B9 k) i/ g9 X @( T9 ?1 V1 v; v& W
10.如何把数组存储在cookie里?
/ _4 h: l; W0 D0 ?! E6 e* P
8 [; ^" X1 R! Y, @7 I% MA.给cookie名添加一对方括号[]
3 r, r- f1 Z, r4 MB.使用implode函数% Q. Q. W8 o3 U
C.不可能,因为有容量限制; ^* D ^6 _: p2 |5 `
D.使用serialize函数
8 J. b, k( ~; |; u/ Y+ s& |0 IE.给cookie名添加ARRAY关键词
7 M+ z2 `9 J7 p* k; w; z2 ]5 z# \# H% s8 ^2 \* r
# G @+ ~( P4 Z! K
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789104 D$ ]. m W; Z3 d; r
B.1234567890
4 P4 p( f0 d7 B1 v. c. LC.01234567894 S; ?# W# w/ S% P
D.什么都没有1 e% a2 P6 S, ^9 O; V' J
E.一个提示
+ o9 @+ Q# g* l' y' W; Q" |# B' R# J8 D/ z/ h+ y7 O
0 w9 `$ f+ P3 ]; h, l# h
12.默认情况下,PHP把会话(session)数据存储在______里。
# k8 d, N+ I: Y4 B* ~1 l5 O2 g1 q4 ^) B: `5 o* _0 R9 Z) ?
A.文件系统" U& u8 R7 ?( ~5 p
B.数据库
8 C! ], x5 c- F* w3 jC.虚拟内容; C3 l$ ^6 Q/ h* Y4 K6 V+ e
D.共享内存
6 T& t$ }" A. L1 z- C; }: x8 @E.以上都不是% b0 T) t! M t. R5 K9 h' r: |
$ G4 n: z. }) ]5 E3 T+ k% E" x" G
1 S3 S( B( r1 L2 i# A! ?9 g7 O13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)3 h! ^( F) X0 w. q# l
" k% H1 o" D- S P% |) h
A.浏览器的程序出问题了
1 w+ R' D( l- ~5 u- `$ t" tB.客户端的时区设置不正确+ V y {$ I) t6 f9 A
C.用户的杀毒软件阻止了所有安全的cookie( s/ O* }/ C7 U: B
D.浏览器被设置为阻止任何cookie
; ?% N! Z7 A) n) [, V: CE.cookie里使用了非法的字符
2 }% {! W, E4 x5 j& o8 i! ^" l- E( w1 o3 V% r" t
. |8 Q. n" b, t7 r& r( R0 Z
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
1 o. _) ~: K a8 ]
0 B+ Z3 D; ?' E) ?! D2 s$ oA.1440秒后+ N3 q2 @# L# e3 U2 f
B.在session.gc_maxlifetime设置的时间过了后5 R2 p9 O- ~# R& ^9 T/ v% z: a
C.除非手动删除,否则永不过期( e7 R! K: J' n! H7 U, G) L+ A
D.除非浏览器重启,否则永不过期, C' f8 d/ h% X5 z6 N
E.以上都不对
7 t0 _6 l! c; E! q. ~ } R7 q. u' y$ @5 S' v$ C$ H
0 V- g! U2 h7 A/ f) o
15.哪个函数能把换行转换成HTML标签<br />?
* z( S& ?. N7 o" r7 z
$ k. G- d2 P. P9 v0 ?6 H5 N答案:____________% @' x y% V5 I' E* F1 G
. _. C5 | ?# p( ^3 l7 e5 m9 \& n7 w# f7 F
) G! A) Q) P. k$ m+ U+ U答案速查
4 b3 K8 [$ s9 Q$ d' s% J5 M8 n1:E, t) t& D( D1 G& P% `4 s e
2:setcookie/setrawcookie' O/ B) B9 U5 Q$ C8 T! Y$ A
3:B/ d+ d: f5 d9 P f
4:BD
% w8 S# }1 d+ X1 r" v3 S( j5:BD
- G+ }$ g8 ^4 o/ z) e$ k6:D8 {. f' f) Q+ q& \% s" \2 [$ \3 j
7:A
/ @1 d8 P" J( G8 D1 j. t6 X8:B
! ?. d9 b* i. X# }9:C
3 V" c) L: E- j3 E10:B
6 I+ J/ N/ m* P0 `3 [# V2 W1 P11:E
* c- U- I7 k$ V1 C% Z12:A
: N: j4 I2 b1 q* @5 b13:BD
) U9 K4 x6 M4 s/ k0 x14:B8 _9 | F" _" J
15:nl2br
( f _* r1 W0 X6 O: U, @- |+ A
8 x4 j# [' D! `& s( l6 a/ C2 ]+ q9 [
0 t# E5 F a9 E$ s* B6 F) ?8 i0 z1 D
答案详解
7 S5 }4 k1 o+ |& J- k+ S6 ~( v ]5 N+ q
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
( f: \$ H% A! f6 I9 @, Q1 E
( E% z. _# r8 Z% G I, B2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
6 Z* o- \) q4 m% K3 i0 p3 p Y2 K; ^
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
- W# p" k3 H5 K8 z6 R) i/ V7 f% y2 p! k: Z
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
: q* L- M# t. F! z- ^: C+ }1 k* F" S1 v3 z: j% ~
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
1 N, O4 b8 K$ i% Y, l4 [. y% k9 w- x, Y, k6 u$ d
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
- P1 Q- t" `; _. F4 p1 R; j! _3 Z8 b) O' W
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。/ U0 B( _) J: @/ o" K1 [
5 a! O4 i0 W# _, R
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
4 v: S4 F- r% m4 C, s4 ~/ q$ X$ o0 P
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。8 q9 N& X0 j3 q$ p- l' I% o& m
% w" ^% r* I( l! R2 Y10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。3 S6 x U1 P8 L9 {: I
' S: ], V ]% k/ v% Y) Z' x8 K11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。 Y# g9 _: x4 w
( Q' y7 G4 T6 Y& F* \' f
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
3 N) C9 t: r) q$ y' N
4 X: g( C2 \1 J" E" U/ U# ?( ]13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。; V8 O5 y7 q' z: N4 y' }
6 @7 n b. l. y1 [) y
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。# ~$ i9 a3 ^# b) V3 Q" i/ w/ Q
0 g/ O: j- k6 n4 X( T& {% P8 a
15.函数nl2br能实现这个功能。 |
|