|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14325
- 金币
- 2448
- 威望
- 1647
- 贡献
- 1396
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
% h' u4 {3 J, p. q2 E( G" x/ B. ? R与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
1 d% Y4 b. s2 z/ | x一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。% w4 N+ Y% t! i! b4 L
6 J: ^5 m) k7 n$ ?3 M+ |# N$ x8 L# x3 d* R
问题
6 ]: Q. ^( u# n1 H
% r, k1 b/ j7 r1 }& \1.如何访问会话变量(session)?
, I' D3 P }0 Y- D8 Z/ P% z4 ^' g( x7 U$ w4 C; q
A.通过$_GET
9 m) \* j5 W1 |B.通过$_POST
0 [5 X' z, r, M; AC.通过$_REQUEST
) b) C# ^+ i9 N/ M% QD.通过全局变量. m* y( H3 C3 v8 p# o5 P. v) O0 X" v
E.以上都不对
1 g. U2 m: f: q: w- p2 ~
# ]9 u) c) y! d1 |0 c3 y( h: _* s4 p% u( S, h% F
2.哪个函数能让服务器输出如下header?, t K9 N4 @4 ?$ `3 ]
% }( h d* a& Q5 P/ u, O4 `- ^. sset-Cookie: foo=bar;
7 }4 p. n. n; l1 W
% {( Z9 I# @9 t: _3 o3 [9 k; `4 j答案:_______________$ P" \ c% c. w) t3 }% j, h
G- \( r m/ ^0 k' [( s
- D' f- Z1 `* I a% X& u1 _3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
( @6 {) R* P/ ]; Z
; F, |, j' k- j7 Y3 j1 _4 M) ~A.通过HTTP_REMOTE_COOKIE访问5 z7 t' P0 L/ H: I" c/ d; m
B.不可能
$ K0 K( H/ _5 t8 S) }C.在调用setcookie()时设置一个不同的域名0 G$ Z) P- {4 d- z8 `
D.向浏览器发送额外的请求
* L& D; _3 T8 `* f0 C+ J. iE.使用Javascript,把cookie包含在URL中发送
( `" j$ F* F. U. U& _6 E) O6 T
9 L. x. F) s3 W. M3 W$ m
1 u* H3 D; c4 r2 u4.index.php脚本如何访问表单元素email的值?(双选)
/ v0 j& S1 B2 d( Y0 j$ p
: s: ^- s( d% {<form action="index.php" method="post">0 [0 N$ ~9 z# Q* ?
<input type="text" name="email"/>
) `+ X% ]8 `+ r9 _8 Y. U/ t1 B" h</form>
/ G* \" ?- s6 M5 f
5 ~1 c+ Y7 q/ x1 lA.$_GET[‘email’]
8 t* Z1 i- O; }) y: Z& c# BB.$_POST[‘email’]: R4 ~$ O3 |# x- H6 ?
C.$_SESSION[‘text’]* U; m% o4 ]8 S( s5 k
D.$_REQUEST[‘email’]& g: r! F% j; O1 l8 \; j
E.$_POST[‘text’]
2 m$ a. A5 W. j6 ]8 L, K" j
4 N2 l- T% k% z2 H
+ `) ]% X/ a6 Q6 m4 @4 w- r: M c+ F5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
' ?3 e% C1 _% ]$ Z2 U! ^B.没有变化! A! g7 y: z) E: b' v
C.在浏览器上打印该字符串时,尖括号是可见的
& E/ A! K1 N& q7 C2 `9 V( RD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
& {3 L! I$ `% W. EE.由于调用了htmlentities(),字符串会被销毁5 ?0 ^( }% _' U4 E/ e( C; _
1 H5 r: d$ ]1 L5 B# C5 N8 e, [! K% ^/ ~4 r8 W
6.如果不给cookie设置过期时间会怎么样?3 p2 u7 `/ a/ W8 u$ i) h( h
4 N1 j1 c4 [7 H" W* I# D# K* r EA.立刻过期
# h- I: u6 V1 n+ bB.永不过期 s6 m1 u" ^# y. ]+ K& A! l
C.cookie无法设置) p( r$ J' g q) I4 B- r) o% I7 R
D.在浏览器会话结束时过期
; I- |( w% L5 d/ D- {0 ^7 G9 I" |E.只在脚本没有产生服务器端session的情况下过期
- k/ P# V0 Z2 p& C; h+ ?1 ?$ C4 s+ ] k% @& D. J
0 C/ G3 _; q: X% }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.什么都没有( }; \/ c! u1 u
B.Array' f0 N, S' h8 M
C.一个提示
3 b9 A, r# C7 P+ kD.phpgreat7 v: d6 y4 `. b5 T* B/ {
E.greatphp) |: F% z7 M( F+ u- i
l, x1 h! A. S+ i2 L
7 }5 V! Z/ h9 S& {8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
4 q; i; i/ `( b' E5 {# `1 l/ p7 W0 _
0 _+ r- _0 |, `A.这两个是明文传输,之后的信息加密传输* y9 o9 M4 T, a. G# R
B.加密传输
# O" q) x9 ~' O4 r/ EC.URL明文传输,查询字串加密传输! E% X/ D$ s( o/ U
D.URL加密传输,查询字串明文传输 Y. e2 {3 {. I% c+ ~6 I
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
/ ?3 J p/ j4 f* y! y6 u
4 s7 L2 H' j, ~8 y5 w2 p4 d% x. V8 P/ y
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
6 Z" h; O1 K) R1 S7 `0 s d* n+ j3 @9 C/ b: N3 h3 `8 D
A.它们组成一个数组,存储在超级全局变量数组中9 Z1 N0 {- L! e9 l9 Z/ X6 h, o
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
" h. Q. s4 B" ?$ ZC.第二个元素将覆盖第一个元素
) |# D7 [$ r2 X, g0 [D.第二个元素将自动被重命名# P# Z; P( L) [8 s* w5 b3 m2 V
E.PHP输出一个警告6 a( V9 p/ B) [% G
- I$ @( X( ]3 d+ P8 E
& t/ C! u- X' ]7 n6 n& _) T10.如何把数组存储在cookie里?* `6 M5 ~' d- U# V5 M" l0 r- ]7 G
/ J7 E2 u1 ~' [% }A.给cookie名添加一对方括号[]
5 f6 }5 G1 o! Q( x3 }B.使用implode函数
7 ?! C) B$ L& r" z! G5 B" y! g7 F* t; U3 iC.不可能,因为有容量限制
5 j' c* Q+ n0 n7 t7 }D.使用serialize函数
/ x5 f. { v/ r- mE.给cookie名添加ARRAY关键词( M% M8 S, r/ A. _6 a+ V9 P% o! f
- P7 F8 }# o8 ?$ g8 \
! l# `1 T. h$ C0 M11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789104 b; i/ F/ K3 U- a& P
B.1234567890$ M4 I/ s9 V9 r2 G, H4 h/ ]$ y
C.0123456789
* S' X0 B9 ~# cD.什么都没有
" e9 n d. \. z# H" x. I8 M2 L8 C9 CE.一个提示( V. B$ O; l" \! q5 e) E
+ Q( G ]) f" O; K6 ^
: c! I$ B' D: n* ]7 m4 G) w8 Y# M12.默认情况下,PHP把会话(session)数据存储在______里。2 X; l% O/ F" x! d, \ T# p
5 V% D# p; W* h0 ^/ k* h
A.文件系统
$ Q; w: F; k0 ]7 d# y$ o) \; dB.数据库
6 @1 B! D' X; {- R$ Q" FC.虚拟内容9 Y4 K0 N5 }) \2 D' k9 U5 e
D.共享内存
# u# R) w0 s& M! bE.以上都不是
* @: e# [# o& ]+ W1 y0 I8 |/ ]* V7 L8 |- @* z* I
6 \( _2 x8 U, x: B
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
3 J# F' o7 `8 K& t/ Z* s
/ |( \: K; z0 R9 i uA.浏览器的程序出问题了2 P, f% ]) L0 P7 ]) T1 i5 l
B.客户端的时区设置不正确
A3 p9 ~2 a3 [* QC.用户的杀毒软件阻止了所有安全的cookie6 q+ @% q8 B, b* L# y
D.浏览器被设置为阻止任何cookie
+ }) u) W) O! T5 rE.cookie里使用了非法的字符' j k) F. N( g1 L V, w% d
# h+ w. y2 N9 S4 ^; \4 j2 m0 r6 A' k+ m
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
3 `- {; P# G8 F* y s8 O# s% u; x
( A4 I' Y+ d( e1 MA.1440秒后 H+ x' Z5 W. }+ _$ j
B.在session.gc_maxlifetime设置的时间过了后
5 Q' l0 r; G+ c Y+ ]- ?) o) }C.除非手动删除,否则永不过期' E7 s& {4 w9 ^. N9 `. t
D.除非浏览器重启,否则永不过期, ^* L* L9 c1 ?$ m9 O
E.以上都不对
# x: }6 h' L5 y9 g/ H+ B& e2 r: K, F% f0 ^) f! T& y
7 L9 H( w8 L) `2 R; A4 V$ C15.哪个函数能把换行转换成HTML标签<br />?
% l% h4 G* d! S1 b% }
- C# H( p( `! B+ S V答案:____________
& R* @& f& D. N; e4 Z
" o$ M" K3 c( ]! v% W$ } L8 D" K/ i
* a$ G* [- v7 e- M9 u. K4 i答案速查9 U$ n! E& v) N4 y4 ~) B
1:E
# A. V$ ]3 \& K7 {9 F! \2:setcookie/setrawcookie
) _( J$ Z! A5 \3:B
6 y% @; N6 z0 a1 m @4:BD
% x; |: R5 ~, c7 I; p5 u5:BD
8 |) i, }2 } ?8 y$ V: \( |1 Z6:D! @" `. B- t5 R& B3 A6 w
7:A
* s" ?/ J" T& U; M& A7 R7 ^7 c8:B
% Z8 V0 x- Y. ?3 @& V9:C
4 o2 }8 c1 E, W+ n10:B
, T5 e% ^1 u5 Q+ Y. S11:E" o5 U: x9 J) D9 A4 d2 ~% W
12:A
3 M- O1 O& N9 \- f1 r. l8 V13:BD
; e d$ W4 \; L7 i$ k14:B# F6 F9 [/ T3 T
15:nl2br7 S! }9 n. i1 J2 z3 [( z3 U! o! T) d/ ^
# ~, O: g8 l% R2 ]- }! V: d( P+ X
& c2 m9 j1 O( l% `' A" y
+ n: B5 ?5 I: v3 e- Z答案详解7 l# q! t, ?, ^1 y: g- S9 S0 c, q
' _ d# \4 M: p. D( z# T7 d
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
$ p4 l) g# K3 [( ^- ]% c/ R5 F) l1 W) K" Y3 B, k: i
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
9 G m) ~- u: P3 s- Y. A' ~2 }) }0 Q O
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。3 _$ a! h9 w+ x7 `7 `2 Y; N
1 e e$ `, c0 X4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。) z) M& D( ^( I, T8 O7 w9 D
8 ?: p* T: M% W$ L5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
" h1 [% G- F6 S# [4 l7 F4 D2 b8 o
3 f, |5 j: `' ^, ~$ ?6 `6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
! ^2 e# M! K2 D4 [7 q6 j! ^. m D/ r" Z: U! f" |
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。' h+ Z: n' L ~8 A0 Q
9 v7 @% o6 Y/ d2 H& f- ?, f( C/ m ^+ I8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
; U: H' V/ p; s- N* [2 H
7 X1 g* m2 m- d; K6 K9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
# P, A* `# Q. t1 ~! w" l0 `) m" D8 H4 u- T# }' m
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
/ j, Q, j5 V0 I4 I0 t; E
! H% Y( t3 X0 G7 i; n0 E11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。4 G5 N" N- f8 E7 h# `
6 ~: z0 N+ f! w: f' H) D% g/ P
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。" S& _2 l( k9 N, t2 Q
$ g5 q3 h! N! K3 b- r5 ^+ E
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。$ ~# S( G, N4 s+ l/ t0 x% k
: d! W9 r" h4 |7 b3 @) b* t14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。: @4 n: d8 T o+ d K
; O6 d7 W! f) l0 D% z6 {15.函数nl2br能实现这个功能。 |
|