|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14349
- 金币
- 2460
- 威望
- 1647
- 贡献
- 1408
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
8 |9 \, C) X- W$ j7 [. S9 ?2 z, A1 i与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。( W+ \ j0 l! u2 u' [+ }6 i. y
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
; \7 n' B9 Y- n: ]( T. F: Y* W+ |4 k3 f9 `2 O
" g7 F- n9 I0 `4 l4 N& V/ O
问题( s! L# L3 ^' Y
# ^6 n( \0 _- K$ E t b& `
1.如何访问会话变量(session)?
" ^+ I- Z, f8 V7 \* X; T8 H! `& y* @8 @# R; z/ O
A.通过$_GET2 o0 i; `$ x8 Y# y$ \
B.通过$_POST* P' R& T, t1 S E' O+ e
C.通过$_REQUEST9 n% U( o9 Q& l" V8 J4 M S( o$ W* Z
D.通过全局变量
# c( e, K" q: U) I' CE.以上都不对2 O- {* H0 e! d
+ n, x3 P. w8 [& h7 U
: p4 n, n9 I+ d4 _" e$ a
2.哪个函数能让服务器输出如下header?
* F* a5 b$ }! M% ~4 Q6 ~$ a
$ j3 v T4 ?8 P8 Mset-Cookie: foo=bar;
* _$ d: k% ^6 c ~$ A2 I1 ?" _- O4 W) y- _8 ~- N
答案:_______________
3 I x6 b# T! e/ f' } Z" m( s; M# a! B8 u! G
; R& t+ e# { }0 X1 A
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
( @/ Q2 V' B- D& u' _ a7 x+ Q0 S8 _& s; S2 J$ p6 g
A.通过HTTP_REMOTE_COOKIE访问* o b- N* q6 h1 G# k$ i
B.不可能
! \9 C1 K& o8 s% U7 X3 q4 ?C.在调用setcookie()时设置一个不同的域名1 `' j4 c3 k* x! r r, C: \6 _
D.向浏览器发送额外的请求
7 s' B: P8 r" lE.使用Javascript,把cookie包含在URL中发送
: u. g( P& @# b; s# n) e$ @8 `8 M& U/ P! f7 t% n0 f
3 l, A* D4 H1 v# U# m+ T4.index.php脚本如何访问表单元素email的值?(双选)0 J. ^, Z( c g; A4 A6 I2 d
/ _8 p9 c& R0 p: n8 E- G: i
<form action="index.php" method="post">- M9 {/ H! ]! b7 Y8 R
<input type="text" name="email"/>) D3 Q7 }) L/ J- O. B! w
</form>5 e( @8 k2 m6 U, E4 l
+ I6 V* N! M4 G' Q/ j- Q# [* L. i8 yA.$_GET[‘email’]
& L. n q# E. D0 k+ ^! C' ~B.$_POST[‘email’]
# a6 O4 ^0 O# n; SC.$_SESSION[‘text’]
, n6 H7 i1 f. zD.$_REQUEST[‘email’]0 E7 |0 o' c) \
E.$_POST[‘text’]' N! f* [ i% P T7 y) H: D
+ X) }- T! D& B2 Q6 F2 {: L9 o3 p# u7 O- x/ ]
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长6 u! J( z5 r% b# y0 B9 a
B.没有变化# d4 O( y, ~. I' u$ z
C.在浏览器上打印该字符串时,尖括号是可见的
3 l% ]$ n4 H* |3 \9 gD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
) K" \( o" _" a* b% bE.由于调用了htmlentities(),字符串会被销毁
8 M! n6 t7 N* K
: b5 F% @$ E7 P: S
! e. T( u4 N/ O. s6.如果不给cookie设置过期时间会怎么样?
) T* c6 T4 R3 s. ^, Y
5 o" `9 w' {2 C' MA.立刻过期
2 V% @ M$ f% c" g8 A" x6 cB.永不过期
4 }, v$ n7 t) ~C.cookie无法设置
- f2 `. {1 `4 Z/ h. \( t. tD.在浏览器会话结束时过期
$ c8 J$ Y' I$ l! o7 S6 V# n$ nE.只在脚本没有产生服务器端session的情况下过期
6 N& l" ]- R; |4 D) ^4 H7 G
0 J8 L6 R) z# [! y- G* R& |/ Y) [3 i" }0 L6 q
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.什么都没有% R) A4 n) d# N. Z; _% \
B.Array( x5 A" D3 d5 c1 L, ^
C.一个提示1 ?( u3 m4 @9 W
D.phpgreat
. Y# E/ `9 m3 Q- nE.greatphp: @1 @/ a5 F, l5 w+ C9 }) }$ N4 k
. Z( ~7 }8 f0 o- d3 C. m: f3 H/ ?3 E: P
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?3 k5 E, Z1 h4 P4 c. J
, `; f* r; R6 U. S. z! S7 S' y' yA.这两个是明文传输,之后的信息加密传输6 y, n$ {1 u+ U; i: j" s X+ ~6 Y
B.加密传输% R7 @# L' t3 v; p! o
C.URL明文传输,查询字串加密传输1 y' J( w2 L; v; a6 Y6 O
D.URL加密传输,查询字串明文传输
9 P R% x# Y q2 qE.为确保加密,查询字串将转换为header,夹在POST信息中传输
" W' S% I9 n6 r. R" B" d
7 H! f- o$ T' n3 j- r( w( o; O
, Z4 {: T" w1 d( u7 |: W: y4 O. z9 y9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
8 Y9 k8 `) p5 r( g; f; W: X) f/ x2 F9 z/ d1 B" K# T+ R0 }) p
A.它们组成一个数组,存储在超级全局变量数组中9 J+ z! n+ z P
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中! e* A$ r2 Y. v
C.第二个元素将覆盖第一个元素: j4 n X6 U" R% M& f7 R
D.第二个元素将自动被重命名 m( N d. {4 h3 | q7 I, U
E.PHP输出一个警告" `4 u" @9 F' Z Z
$ X: J2 V9 \ ]2 F+ U+ k3 \/ Q0 _" p) m. X6 L- e! O6 L
10.如何把数组存储在cookie里?
3 i8 r8 Y8 f' F4 T; o/ {
3 }: \) ]4 O5 R6 N8 aA.给cookie名添加一对方括号[]+ S2 j0 R1 U6 J/ V. j4 P# V
B.使用implode函数
; C; o3 f5 [/ O3 uC.不可能,因为有容量限制
1 ?1 L# {& H* P0 JD.使用serialize函数% d) e7 ]/ ^% y( X/ V$ A
E.给cookie名添加ARRAY关键词& `; C4 f! c% C3 T9 G8 G( L
7 K( @) r8 ^) B0 f# O' v! V2 E8 n" U3 [ p# |. c
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
1 }, {: f$ X& Y" ~6 X8 KB.1234567890& ~: e* \! q" E1 n
C.0123456789 [( c0 `9 U3 T A( O$ i# `
D.什么都没有7 p! s* A" h! C
E.一个提示
1 O* G; C2 B% e& }3 [9 D
' P8 T K% `1 @' H5 d( W
4 s+ b2 v# Q$ w12.默认情况下,PHP把会话(session)数据存储在______里。 v8 f b' f% s8 H; |/ l
+ c% I/ l: h( {4 S8 E3 dA.文件系统
4 f% V6 D) ]4 k' KB.数据库0 o5 ?7 X2 s, Q7 b
C.虚拟内容. [7 Y. v2 @( `. L
D.共享内存0 Q* L6 a. \, C
E.以上都不是9 u7 A5 Z/ [- t& L B8 l
9 a; C* X j% W8 U( ^) ?% D
& q; D A9 c3 T9 C- w; m
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选) p# i3 N+ H$ y6 a$ ]9 L9 ~
+ E- ^) c4 l. lA.浏览器的程序出问题了$ p- T1 b; f4 W W0 f: p9 u
B.客户端的时区设置不正确8 G' K. _# Q5 K: r
C.用户的杀毒软件阻止了所有安全的cookie
6 ~! C. g* S3 X, n; oD.浏览器被设置为阻止任何cookie1 x- \. n* X7 T2 w! q( e
E.cookie里使用了非法的字符
/ f% N# n/ ^' h. t7 G; U3 ?
0 s; k* V4 }7 \7 K, ?3 Z; m' _/ \4 _) Y
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
4 M6 {7 `( H% B: h
y5 G; H5 |0 P! L' KA.1440秒后0 j6 }; S1 p$ r, q U) {! z1 M
B.在session.gc_maxlifetime设置的时间过了后% p1 N) d; K K! |
C.除非手动删除,否则永不过期
2 [3 Y0 A( r& D1 `D.除非浏览器重启,否则永不过期
! F0 H* A% b" s# w* ~) ]+ bE.以上都不对3 l2 C; w2 ]( r- F, t5 P4 y/ Z
/ H; U5 C) V- k, q
% p9 n N, i9 q$ H' y9 ]0 _' W5 z1 E
15.哪个函数能把换行转换成HTML标签<br />?; G+ n* `$ l/ N
7 e- L7 |. c8 S
答案:____________
5 U7 X4 M; \* \3 y+ ?4 x' P! | G
# z0 @% K: M4 g* u/ `
5 O+ ]( h# N( O& F0 s9 e8 z& w
1 Z& `3 \. Q! l答案速查
6 ]4 W6 S q& m9 k! E4 z! E7 \9 |1:E. n8 X9 ?. y; M. E
2:setcookie/setrawcookie9 w7 e; m8 H7 n! l8 j: }
3:B6 @# f; [$ |5 Q1 }0 l+ d+ M6 N# `$ c
4:BD) p4 C E5 g4 a: a: |
5:BD
# ]( H+ W( X: G6:D$ ]5 r. J% f( O u p0 L, [
7:A. `/ w: b$ a* ]; a) T
8:B- o: _0 n! f* E) m7 O
9:C
6 v8 F1 i$ m3 m( T+ \5 w2 ]10:B
# P5 F/ `- C, X, P) C, t11:E/ V% |; }# I3 \' W+ e
12:A
* e l }7 ~4 l0 _13:BD0 r2 }% A# a* v. Z* O
14:B+ M: r. \. P; s3 u2 ]1 w$ L
15:nl2br
0 P0 U- O7 z& U/ x5 T
8 L7 a0 E# P" a
% f0 R- } W2 H+ m1 `2 Q" p8 E& O7 W
. i) b3 K; [& K2 X, {答案详解
, \9 B$ [* E6 |* a; g" r0 r/ h
0 i( k* ?9 W- r2 L# T1 w+ y' L# U1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
$ {3 i( J) h# }: @6 v: ?5 f% A
3 v6 A& h, W( @/ ^2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。( ^ b7 \2 F. h4 T
; ^" T' r) E7 Q; W3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。" I1 C. X8 r. v/ v
' }# y, c, h9 l7 J# [! o# x7 G$ n4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
4 F4 d$ P6 }/ K2 L& ^. q1 }* w
% ]2 b' K0 l) F) ?3 u5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
2 H. F1 S9 v5 D) p1 }
7 g q( J# J) {# X9 i6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
+ m) ~7 R+ v' m/ m# x$ }
2 F+ g* ]+ `1 @. j% U, R7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。! F) Z( a4 p: ?2 u [/ q
+ X% M0 s# _! P* w: x) D8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。- w( }7 i* m5 a3 Z
, h* @( w* x$ w+ }2 n! A
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
a/ M! ]0 c6 b& V
# a% q0 A8 p, P0 }10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
3 C- y7 r, T+ C8 C5 ~- O4 C4 T
8 [ u9 Y" \" V" X8 a11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。2 g( E/ _; Z& A5 H# N
! A6 l7 P8 } O/ ?- `* A7 A0 z4 l1 ^12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
0 s9 @3 { ?5 t& K: Q' |1 c. n3 _* _8 Y- L* j9 |' K- L' `2 E
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。$ m# L4 H2 w6 y) ]3 a, G
6 D8 H' F: |" [, W$ z$ U3 g
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
8 b: ?+ _ ]& D0 ]' r+ N R
2 i& X3 e% f4 C5 ]& D; w15.函数nl2br能实现这个功能。 |
|