  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14197
- 金币
- 2389
- 威望
- 1647
- 贡献
- 1337
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。) N1 C5 f1 E8 s- x* |! T) N6 u
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
4 j _1 _3 v$ ?! c! C1 q一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。6 f. @9 L. O3 _, i; M& D
, |1 H" T# A) q- w. l& R
& K \, J2 J2 v1 Z6 T6 s问题
+ K [: E# a2 _( i4 K
9 ~3 A" ~" T# M, C$ w( y+ c: s- ]- L1.如何访问会话变量(session)?
: { b! Q9 M9 \% }; r. o; ~& L3 G' a2 ^. Q% W6 \: x
A.通过$_GET* w6 K4 s6 h) H1 l
B.通过$_POST
+ m- n D U( d; p% pC.通过$_REQUEST
- ^1 ? g: O6 cD.通过全局变量! D* M6 X, W3 z
E.以上都不对
( o0 f3 m1 t$ k3 M
% V7 G5 H* k u9 Y; d% c
9 l& _" C. y$ [! k* K( I2.哪个函数能让服务器输出如下header?
6 j8 {- K& E1 N# e2 N% [
+ e' L" ^* a" ]% | Oset-Cookie: foo=bar;+ J, T9 F, P* \/ {
, G* J) K( ? d! ? l9 o$ \- ^; v
答案:_______________$ R3 U9 A1 A, n4 D& j2 k; U) q
3 A+ A! ~# l$ c& Q" M! A; V8 E. F
2 J0 E" Q+ m. S5 q3 z3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?0 }) X2 v$ ~$ J. G* J& }% L
% P7 g! z! j) ~8 E
A.通过HTTP_REMOTE_COOKIE访问
. m0 w7 D$ ~; N+ S0 c" u% bB.不可能
& x' G( n- u2 rC.在调用setcookie()时设置一个不同的域名
% V z1 R- a3 N8 r) gD.向浏览器发送额外的请求4 N* c8 `: q" I. e% ` L# \
E.使用Javascript,把cookie包含在URL中发送
! \2 q2 C3 I K0 R* ~9 F9 m
7 H$ l Q' w0 N0 y) E" d" ^
* t9 `& t0 Z6 Q& |3 H! D3 z4.index.php脚本如何访问表单元素email的值?(双选)
: ]. W$ @6 ?- o4 k; Y2 `
3 g0 j# @% _; \<form action="index.php" method="post">
0 P+ `% X" K& R<input type="text" name="email"/>
; O5 v4 Z8 X" O8 s4 B</form>
1 y$ A% I1 n9 `: z" T. r. _+ K7 [4 [7 E
A.$_GET[‘email’]% }- z! M7 u9 n2 s) ~& i$ R k# |; G9 h
B.$_POST[‘email’]+ w# W# p6 s8 I5 g; M
C.$_SESSION[‘text’]
/ b/ Z; W0 M7 z7 q4 dD.$_REQUEST[‘email’]
) {0 Q1 Y0 G" h" e9 N0 \E.$_POST[‘text’]
$ D/ { U4 ~ n" I
5 g- _# E9 K8 s6 V( l
9 |6 ~1 Q) c5 L0 L- I* _0 D5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长6 T- E" o+ N% A! E/ }. T
B.没有变化
, X2 H3 ?/ ^. b3 ~: DC.在浏览器上打印该字符串时,尖括号是可见的
9 D3 g" l( M- [+ X: f& K& X4 wD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见+ O s: |4 {( }; @
E.由于调用了htmlentities(),字符串会被销毁
t: D3 U4 {1 }) X
9 |9 J# T' E4 g- D+ H* s$ ~
- R7 E @2 x3 [! _; \( z& X6.如果不给cookie设置过期时间会怎么样?
' y7 {$ x1 f, Z2 {% j5 W- @0 e8 ]& G- g4 b, o
A.立刻过期
$ w: \ m( ^1 _B.永不过期$ I& ~% U( o: X9 E+ ^9 c9 N* O% h
C.cookie无法设置
, g' o6 q C; [9 cD.在浏览器会话结束时过期2 i0 N d |0 w( t
E.只在脚本没有产生服务器端session的情况下过期
+ m7 n3 d0 K* P. v- u7 z1 ^7 l6 T. a( g3 f7 ~. s* n8 {) B* b* E
% A0 ~0 `& q5 Q K$ T# ^& g
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.什么都没有- J) m( b9 V& E5 @# X
B.Array( w' Y6 B* q4 o+ A- f( ?
C.一个提示 Z7 d) d3 Z$ e5 X' c( n/ g
D.phpgreat
' d! f# ?3 s& { q% ~8 uE.greatphp4 Q3 H, K. T. ?# u- L
2 ?6 M& f5 R O9 Q1 t% C7 G) |& S {4 w: {9 e( o
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?! G0 N# R2 d) z; b3 ~ U8 S
7 Y5 l6 t9 I/ n/ t6 M; [
A.这两个是明文传输,之后的信息加密传输
3 g; m% n Y5 D2 ?B.加密传输
( W; D) c5 P! h% j. J9 c9 D# ~C.URL明文传输,查询字串加密传输2 b' i' w7 Y6 G7 R+ e( o% S
D.URL加密传输,查询字串明文传输
7 J( K# n! C% \% v3 W8 q% m$ t0 ?E.为确保加密,查询字串将转换为header,夹在POST信息中传输
2 W! W0 N3 _% x+ W7 t6 _9 J
1 n1 S9 P! |* m/ Y2 b* T g$ `' A, _: d: E
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
& o$ l. m4 k/ {, x; t! t" w9 g! E* o, W' `, E, W. z- D
A.它们组成一个数组,存储在超级全局变量数组中
& P: y# Z& \7 A" ?2 E2 j6 C1 DB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
+ t- G8 n' {7 m0 ]% M, gC.第二个元素将覆盖第一个元素
: c' N G( w. d. X+ u7 |0 kD.第二个元素将自动被重命名: w5 z' J* p: X
E.PHP输出一个警告
1 F v7 @7 N1 t. z! }% _0 u$ \9 Z# g6 y8 T( s4 L5 b
3 C d. s+ {8 U10.如何把数组存储在cookie里?
, c3 e# C% C i' r
5 u" C: h# U& xA.给cookie名添加一对方括号[]
+ R/ V& b8 X; Q8 v+ GB.使用implode函数
* o5 \: M, S9 M7 z9 t* lC.不可能,因为有容量限制* R7 `. d# q$ T8 Z8 M; E
D.使用serialize函数0 K/ n! C" `" f/ d, V- J
E.给cookie名添加ARRAY关键词4 `* x5 `: Z8 e% s5 N
' I9 D5 M$ C6 D- h( \' d- }7 y! m( O: }6 ~+ p
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
- Y8 h6 S/ d/ `" b/ C$ j( JB.1234567890
. F9 x# z- l, x7 \! m) @C.0123456789
f a Z4 E0 i/ ~& d( M6 \D.什么都没有) Q1 n% _! r1 T
E.一个提示
z/ \! p0 C {& i# U% Q$ W) ]' B4 F+ l4 M8 C3 h: R( x. [
9 ~6 c+ y- n! f& W1 q12.默认情况下,PHP把会话(session)数据存储在______里。
! b* Q2 S& E; z, z4 ^" t
1 S C9 K E/ f( R2 eA.文件系统
4 W N% c. v& \, c8 FB.数据库& z5 d" Q* v" g$ v
C.虚拟内容9 h9 O5 k1 ]) A0 z
D.共享内存) y. M+ \6 Z6 s
E.以上都不是! z' A3 |9 }5 W% ?. b" M/ d
5 J& [. q: r: f6 ?, {9 U2 a- K2 {5 G n5 K+ [8 Q4 ?' Y$ g( ~
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)* x" t7 a& k8 Z" o. e; @& Q
0 ], S4 s) e; Z8 N2 C8 T( S
A.浏览器的程序出问题了" d' K7 k2 N" Y G. S% z
B.客户端的时区设置不正确: j" }8 E9 ~/ e
C.用户的杀毒软件阻止了所有安全的cookie
1 V+ R* `6 k5 I7 z. s2 X7 K7 sD.浏览器被设置为阻止任何cookie5 ^# s, N( [5 N4 d2 J `: ~: t' q' A) K
E.cookie里使用了非法的字符
' r: `! [+ A. Z) s3 p/ i* y0 i# r8 T- o5 I' [: o9 D, T; [* v y: z
3 ]6 Y" g. i8 M
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
+ p7 N9 I1 z5 `: q3 E* X- R. k) p* D) O A) x4 C
A.1440秒后8 T, R' ^- r9 c
B.在session.gc_maxlifetime设置的时间过了后
/ T' z# ]. y8 R# p' o& ^. pC.除非手动删除,否则永不过期
# r' B5 Z3 Q8 h& \$ \D.除非浏览器重启,否则永不过期
$ [, P6 [$ G1 q7 d0 ?6 ]9 L) ]E.以上都不对
" s# [! R. Y( W" V( t9 c- t6 l
4 Y3 a' F6 P; l9 l
15.哪个函数能把换行转换成HTML标签<br />?
$ i# z% \: \4 Z) y: _1 V/ G
/ G! y9 B+ o+ v答案:____________$ V9 [' J$ {/ r* f% \# m% y, _
$ I' s4 Z+ l$ L4 K7 }& Q6 U/ o
4 @5 q* r9 D) ?* V% B- ?
4 Z9 Y. f+ M" X3 u$ u: r% H
答案速查 }4 @! K) x# V
1:E
2 v* `5 u4 H5 x, H- _" v2:setcookie/setrawcookie
# q' O3 J7 J( D" k3:B8 n+ b; g2 \, z' G9 }1 t
4:BD$ [2 @$ i* h2 r$ V/ D# U
5:BD
$ t' W4 X4 F% n6:D
# x0 w/ H% u+ y i) s. q; |7:A
) X I% S% q+ U7 d- s8:B& i* t- n3 s4 f/ c5 ]' T" D$ o
9:C5 g2 H9 L6 u2 E$ ~2 P# c- U
10:B) w9 y5 v d! s$ D3 c
11:E
8 R' C$ I# q+ c% ~+ [12:A, j$ B2 o# ^% j) O, a6 H) E2 p
13:BD( J9 k3 Q/ E! {$ m2 {
14:B
( G8 T4 ]. b. j, o6 q |" s& A" z* q9 S15:nl2br
( {) G8 V7 Z+ H @- ^2 i% O+ T/ h5 L3 t7 s/ T$ R1 o
+ ]6 h* L$ o% ?1 R7 u9 L* }9 u
9 F7 D, D) ?2 A/ X
答案详解3 F$ }, Q3 \) m o# q5 y0 W
8 l0 m. D( p7 K1 U; l9 F, N% D' @1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。6 A3 X2 |0 s, E2 ]
5 t6 m& N+ I* h1 s0 W
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。7 ?* d, T% J( x" v8 v+ r) Y
6 {' O: Y8 `+ _* t. y8 b7 \3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。" `1 d6 M% D$ }
+ g7 h( c( L9 F% n- Q1 \4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。# T; K, d$ j0 s. K" M3 q8 G% k
{+ w9 c b' W2 D; h* m; {6 f5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
l8 } X( I- K3 A6 B3 {5 Q8 ]0 c2 _; j) v0 Y( f; ~ u
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
5 @ I: ]2 I+ _6 h
8 f5 O- N& r) \1 @3 x7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。; h) f% F: L" f& ?- ]5 K' m+ W/ ]
& V( X, T5 f& _% X, l9 _
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。1 a9 @* p. k$ E# M9 }
3 K/ Z: f5 _# Q9 P3 F" w0 ^9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。$ g' r! ]: f2 u; }9 [: L
: E- ^# s U Z# T10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
8 T4 b$ l' I: {4 j0 }
' E) x7 f I1 ~7 q5 {11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。& J! b. h$ s+ y6 _5 j- O% D
7 l0 [2 Z u: y5 C5 v) t6 k$ w12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。7 z) g2 k# L9 J% W% T/ a
6 t& |- u, {# ~; P* |2 b
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
5 B& D# O7 I: E! J G6 v
& E7 B5 e/ }& y6 I6 [1 s14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。7 f" k( G% A% D' S- f+ B
: `# E2 `% \' _( t& N
15.函数nl2br能实现这个功能。 |
|