|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
3 x1 o2 J1 H- \- U/ o9 i* S与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
! U- D2 N! _0 Z, {4 Y/ L一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
H" a" f- @+ c4 I$ D4 W* {& p& K$ E. ~' w$ X5 ]# F) D" U
8 P) k/ q/ h6 \% p( F" c0 z问题% S5 r" g- z/ \6 S
! J8 o0 \3 C$ b: x% L) ~1.如何访问会话变量(session)?
1 M* J% [" |, _! L! s; e, r% s8 q0 q; N& d% ~; {( h
A.通过$_GET
5 d* S- {) \; `! RB.通过$_POST
6 c) g% D' d2 R( ~C.通过$_REQUEST
5 U6 i1 k& I8 I1 v' J) RD.通过全局变量+ x3 h2 a, y3 n4 x+ q
E.以上都不对. \4 H _4 ? q- [. U) F2 {
; u; y" _3 s3 ]- _& ?. R$ k( x- l8 P9 `6 w0 ~) d
2.哪个函数能让服务器输出如下header?
1 \1 |/ m N# x% ?0 |: Q% a. p* E3 J& L3 B" N
set-Cookie: foo=bar;5 z# B. V: d5 @& C; u; u2 U
( V. W2 B. Z* a* Q答案:_______________
* v7 g8 [& S0 x3 D X8 C
0 E1 v- G* ^6 u- t
1 Y8 o4 C ?0 J/ h; s/ q: `3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?7 z: H5 A* l; C& C- @& @
2 C1 [3 i' R+ N1 v' v. t9 n
A.通过HTTP_REMOTE_COOKIE访问7 o$ J: m# A- h! L! X9 \
B.不可能- g/ A0 N, ~4 G) c5 n3 [/ C
C.在调用setcookie()时设置一个不同的域名6 Y% B# b. ?! g5 n. o) |! `+ f
D.向浏览器发送额外的请求* I6 e7 `! \' n2 z" \' i
E.使用Javascript,把cookie包含在URL中发送7 X A) V: B2 I8 d( I" [
+ ~8 `) z, [ u7 f
/ S# \- t# s" [0 h
4.index.php脚本如何访问表单元素email的值?(双选)
+ e8 G. O( w: M" S" j
, C0 D( z8 B5 q/ A- g0 A<form action="index.php" method="post">
& w5 t. ^/ g7 b0 o7 |& Q( G<input type="text" name="email"/>) C- L6 K. [6 C* D! P& L# p5 e+ B
</form>
/ y$ W% {! w: u. g& R, p4 U: Q
( q0 v W: |" i8 T5 mA.$_GET[‘email’]. Q0 d+ M4 h5 ^+ T' r
B.$_POST[‘email’]
U8 l5 s4 S. ^; o3 H( \! dC.$_SESSION[‘text’]
( y8 M6 u9 x* S( T, uD.$_REQUEST[‘email’]/ I0 l; l9 P: \' J% y0 ]
E.$_POST[‘text’] O" s, T# E. R! J0 S0 y& C; Z/ N) a
$ z% d8 a s c# h. g
! B, G" o' L+ y0 k$ P" c- e5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长/ _6 S! J0 |2 Y% x+ d" K
B.没有变化; p1 R7 n4 W. X& [6 _; y o
C.在浏览器上打印该字符串时,尖括号是可见的* E+ l5 K5 ^9 T3 O6 r" Z2 l7 s
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
5 t5 T6 q" z( t- U2 t. _0 R: W6 O, SE.由于调用了htmlentities(),字符串会被销毁; W) w# D6 b1 i" S, `" K) S2 s; I
0 ~2 i9 ]4 Q( X0 I* O& d) f
% d4 u2 Y( u* d1 B
6.如果不给cookie设置过期时间会怎么样?6 R7 t( J: T- X8 o' h( W
# E: e- d: d& J" Y3 P3 T eA.立刻过期
: a% K0 X! `5 T. |B.永不过期2 O6 @1 ~& Y3 f" F6 J
C.cookie无法设置
# N$ v& z' ?6 jD.在浏览器会话结束时过期. a0 \( N; P4 a- K+ M. K
E.只在脚本没有产生服务器端session的情况下过期
0 Q+ K. t+ O( j3 S1 O3 }+ M( k2 d' i' d% J$ w% a. p' S
% _) g/ L; f m7 ^ @8 S3 C7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
9 Q. B8 t0 `4 g8 s, B' C XB.Array
# B$ @: d. F" SC.一个提示
7 o5 d6 L- }4 F; V9 {D.phpgreat& r3 j9 H' n6 t$ C
E.greatphp3 w, z. M5 o g" D* i6 @1 q/ c
1 \, z) F9 e* W
/ A" z$ _6 G- m" a8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
4 X8 q7 Q3 F7 G3 C9 J2 s. n5 F! x; g4 l- j4 W e1 t( ?2 S& l
A.这两个是明文传输,之后的信息加密传输; Z* p' D( n; C4 ^& _
B.加密传输 A6 K$ g9 I2 ]- |) n
C.URL明文传输,查询字串加密传输
" {* e" e# m/ }; W/ F# C, Q6 kD.URL加密传输,查询字串明文传输
8 p3 t; B- C* u. j/ kE.为确保加密,查询字串将转换为header,夹在POST信息中传输; ]' d4 `* D: B6 O4 H! I/ c
( D3 R& K' Z J3 {
) S! a8 V' _7 x; H$ r9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
7 R3 B5 Z* S+ v1 [7 _/ U! I! s5 s" A; f
A.它们组成一个数组,存储在超级全局变量数组中+ ~$ t+ U6 S% n+ k. F. O3 m0 W
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中' t* F" R4 M. o6 _, i% [& n& M
C.第二个元素将覆盖第一个元素5 p( i& m5 r/ q; D# w" g
D.第二个元素将自动被重命名2 e# D. R0 j0 H& a: W
E.PHP输出一个警告
?$ B2 K' Q+ E) S; ^7 T5 s
( z( R3 P8 N: t Y4 @3 D# ~& ^# P* F' g5 J- p
10.如何把数组存储在cookie里?6 t+ E0 ^8 d) x0 s$ E8 d6 E
4 n" M; s" q6 e" `4 o5 q! EA.给cookie名添加一对方括号[]
0 h. j2 J: I7 N; _; }* X2 VB.使用implode函数3 {8 X$ b% `# u
C.不可能,因为有容量限制
$ {* k- @. O2 cD.使用serialize函数
7 I( u% R2 e9 _. l- D$ ]" `7 FE.给cookie名添加ARRAY关键词
( @ C- U( \: X: {. ^! @
7 i. c) w i6 [4 g( q& N( D8 A
- e _# x8 @$ l, P9 n3 H11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910% K* w4 k5 w( y+ N5 i; A/ a
B.1234567890' F& f9 j5 v0 b' v, E. y3 @7 R
C.0123456789
) v3 d A M* r0 @; n8 A& `D.什么都没有
# L: d- v8 _1 \& h+ QE.一个提示
6 }8 h. X: K$ n
4 l$ e7 e$ a ], {% X
. l+ y) S# o% T, c: y12.默认情况下,PHP把会话(session)数据存储在______里。
$ I2 g" b5 |: \/ B2 S
% @: ^" d" T4 d* g0 CA.文件系统
' v8 Z3 V" }: z) h/ v+ NB.数据库
! L) O3 |7 l6 UC.虚拟内容5 P+ h. M8 D; {+ v6 n4 S) E4 U' L
D.共享内存+ U7 }' g- \/ z0 M, R! P) ~7 M, u
E.以上都不是. Y! @6 _- o, T, @8 n2 h" Q
! k6 H# \: z& w: w3 I( U+ M3 K, L4 w6 F* p
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
% X8 q$ V% u* ?# Z; I& H& f( \) p" n% R: R3 B
A.浏览器的程序出问题了
! w3 [8 E4 x9 }B.客户端的时区设置不正确: v4 l7 E# d* a
C.用户的杀毒软件阻止了所有安全的cookie
- s& e. e7 F. I) }2 e9 H6 |D.浏览器被设置为阻止任何cookie' H# H, _0 p$ n# O) V/ V
E.cookie里使用了非法的字符
! U/ \! A# E! i6 V I- m
. j& A: Y9 X5 ?0 C6 d
1 G! e' C. ~2 M% j1 I14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?+ ]) a' D ~% A
$ B8 Z; k, u0 d5 C
A.1440秒后; n/ L9 F5 R4 w4 ^4 _9 k5 a
B.在session.gc_maxlifetime设置的时间过了后7 P1 o+ r5 y- {2 J; F7 ~9 r/ M
C.除非手动删除,否则永不过期& w* E2 M! k' T5 A5 n9 V( l, x
D.除非浏览器重启,否则永不过期
* ~ N L. O2 K3 {" {3 Z" i6 tE.以上都不对. ]. _% p0 y1 W* d6 Q8 S6 F6 W9 n
& e* m6 O9 H O8 A4 z. {- Q; v7 b
% B0 b, z% ~" U' O3 r15.哪个函数能把换行转换成HTML标签<br />?' H; l& T# Z! h. b2 i
( n7 n& k" a2 r6 \' J
答案:____________
' d9 K4 ]$ ^% R0 F1 d7 `3 G; O' T8 K: E! T( |+ p$ v4 v
: u- O, ~3 E+ }* _! ^
: x$ A* X2 t7 W5 n/ ]2 \9 C
答案速查
2 x4 m! y8 |' r8 s! {! e& ~8 U1:E. ^) {% _ k* x& u( C0 ^
2:setcookie/setrawcookie
4 k4 B! F+ a5 q0 M8 K3:B
- N6 C# c6 c& K' ]( \1 r4:BD- ?7 L; t- v7 a
5:BD
" [4 d4 u: t' Q8 r! b6:D" t. O3 U: ]8 Q: {2 H4 w2 X; N# B
7:A
% K) x; ~: |' c! B: L4 R. c1 h8:B& c& M0 R! C8 u9 K7 V6 ^
9:C5 D* x- Y2 e- S/ s* J$ f2 y
10:B
8 D5 q4 l8 _9 ^1 h11:E1 {; q, |8 H1 p/ m9 W
12:A
' V$ Z- t7 _7 x6 _7 H1 l- ]" C" M13:BD3 t( m* d7 j1 u* C9 l. i# U
14:B+ A) ~1 h) t! B2 [4 b6 u' V
15:nl2br
1 f7 x- E2 k0 v1 P
. Q! J% X p! O2 r$ P' e
) B! ~9 Y0 X! Q) K: l4 ]) u& b$ j6 }( O- ~$ u* v* p7 X0 K& _
答案详解
y- `! g" q6 N& v; O- W
0 v" f1 G, |4 V1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。3 F6 j5 e/ R& @+ u8 g1 a
( @- V/ V) |. m$ s4 S2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
: }' X' b& W8 W- r6 ?( W( T1 m. g
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
! r6 d- `0 V+ g* l* \
4 s( h; Z/ m6 H, Q# P- M E4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。: e. c9 O6 L, [
8 H' \& D' P! F3 e1 P/ M' I5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
1 S2 E& ^. ?7 z- s5 z. C( m
; p% L' [1 o' e0 t; G6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。 R1 c" x( U- Y! j2 W0 h* k, P2 `
& ^) j9 t; p& Z' }- G+ W
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
9 |3 w; r( W# @5 a& Y
, F N" B4 {5 A# n8 J6 |0 }8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。- I+ p$ }7 M) @1 [
) L2 ^4 B o1 I3 Y! }4 S/ e9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。! V' c) D1 j0 n& X5 N
5 _1 s" N9 b# P' m, L0 T1 q" d10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
% o9 q, K& M) O* @: f8 v; s/ @
6 X9 z; S) ]+ z0 ?$ W* ]6 m' J' d11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。 l9 Z! I. d2 @3 N# x# [
5 y# K- {8 N6 I4 b6 o& } F, O/ Y1 P12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。8 S% y' x4 w" @( g0 w$ q0 {
' @, h6 }: s8 t8 P+ j, K4 t13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。/ O# r6 l9 k! k% c% ^5 t: U- e( Z- P
$ z5 c, S' W1 g6 P. b; |" a8 q8 U
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
) i9 @8 \' C1 o; E! O& f
- T. c5 ?* a9 v( p' d2 c15.函数nl2br能实现这个功能。 |
|