|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
. {6 `+ V$ ?2 ~, S' W" t2 }' i与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。9 y( R6 a) g+ u/ k& f' x
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
( a! K# S& i. \- v* \7 n. \8 O# B- b' U& q
: W2 z# y4 u" T; G0 D问题
/ m/ l/ S: T9 I/ y7 {3 P L: z3 N0 G1 m8 Z' k9 s8 K( x+ w& q6 e. y0 v
1.如何访问会话变量(session)?
7 c* M8 m5 w( i0 H A" J" X( A0 b2 I V& O1 `5 N% u
A.通过$_GET
# j9 K2 u2 A' r2 @8 J' k) N( sB.通过$_POST
% \" M9 X$ I Z' C3 {C.通过$_REQUEST
2 T6 I% B6 t' e$ TD.通过全局变量
, R; Y- S+ b. h0 ~7 i3 C( _( YE.以上都不对
/ W. i) j8 _8 u1 p4 v
. |' e( X0 Y$ ?$ S! Z c% C) L" m
2.哪个函数能让服务器输出如下header?: T. P8 Q5 e H |7 H
4 u/ @- O, F7 W; z/ G, G
set-Cookie: foo=bar;0 Y- d# Y8 L) j, Z0 v
' u0 ^& n9 k. c1 X" e答案:_______________- }' [( b: k7 W4 Z/ c2 l! p: D. `
+ v1 p" S8 C. d0 L
( F ]) K+ ~8 k5 E! M
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?8 l& U1 N6 p, W# O8 I
) n) S4 R1 X$ o3 W
A.通过HTTP_REMOTE_COOKIE访问. K n* e, y- k* A/ ]( o
B.不可能
; D7 O- G6 p) B" KC.在调用setcookie()时设置一个不同的域名8 }7 ]' V- m2 Z9 U5 s
D.向浏览器发送额外的请求* o: z5 B( M( H# X6 U: J# @
E.使用Javascript,把cookie包含在URL中发送6 k, c) V. a, w- P& F& d
% ~3 u3 _# R$ k8 ~, Q p8 \" O, O+ k- ]7 ~ D9 l$ J% a$ H
4.index.php脚本如何访问表单元素email的值?(双选)
+ U: L0 P5 `: u! |& a0 j3 e5 z6 z) i: f: ?( @
<form action="index.php" method="post">! Q! G2 F7 r, n) ~4 l1 A
<input type="text" name="email"/>$ h! d- B/ n* X4 x* r; i
</form>- h9 N8 v& G- H2 M$ o5 C( k. a* E
4 g+ w6 W$ A; ~
A.$_GET[‘email’]
7 T1 {: ?% U9 f7 y: W- VB.$_POST[‘email’]$ q4 C( y# m# d5 {2 O( G1 i3 W
C.$_SESSION[‘text’]4 O& Y" W- T6 p) L
D.$_REQUEST[‘email’]5 V+ t1 |7 o8 g a: Y4 J2 V
E.$_POST[‘text’]3 N0 N- Q9 T7 |1 k
3 W/ [& C. {# ~* T
5 f7 M6 R* l! X: x$ V7 a5 x7 k5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
- X! z" v5 a0 x& o1 c! Q' LB.没有变化; f! O( A5 ]4 \4 V6 @& b% ]4 Q
C.在浏览器上打印该字符串时,尖括号是可见的
; i' t/ v9 X T$ SD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
% I% K8 E, I$ a% H# bE.由于调用了htmlentities(),字符串会被销毁' [' o- o: Z8 E, O) z
( C/ n* n1 ^, N/ ~( ^5 h
0 w* x; w) } U! N6 h
6.如果不给cookie设置过期时间会怎么样?
$ [) i) i2 \# p2 r7 a8 v% P) m, S2 K! I9 x3 ^: w
A.立刻过期
( ~- b5 R& S, q9 m! w9 i# H6 N3 gB.永不过期
. u8 R2 L2 H2 \, FC.cookie无法设置
' d. E& C& Q2 [D.在浏览器会话结束时过期
% L/ D5 T6 v/ qE.只在脚本没有产生服务器端session的情况下过期' g* F% A- F L$ v; h3 T/ h! O
; g5 }& {% m9 T! g: B* P1 t
( K. C7 x% U% {' ?- O2 y7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
% N7 R, \$ W- b* L* n" h- ~B.Array R+ Q' p! V4 r$ F
C.一个提示: O+ K$ }$ _( p0 P/ M
D.phpgreat
" Z3 p) T5 O! W) B% pE.greatphp; s& {) l( H4 O9 Q7 d9 ^( b* w) }7 I+ ^
4 a* G0 G$ f) v, v; F, x6 n
& R5 f( m" ]# E! D: F8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
& | Z" t9 g/ [7 k9 k" f
+ f4 w$ l C+ x) j( s/ DA.这两个是明文传输,之后的信息加密传输0 h) |* \: s1 J/ U5 f- k! k
B.加密传输1 I# }' J0 V r" q+ S
C.URL明文传输,查询字串加密传输' W0 W- c) U$ e, W. F- d) n
D.URL加密传输,查询字串明文传输- j+ e) Y/ s$ w
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
! h- V- U, w$ a6 L. D$ V) P$ ^( I* B! ?, D$ i% F
3 P1 k& X0 h" d4 y
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
$ \; G7 Q$ M" H d; G1 | A3 u7 O* r1 X. G; i
A.它们组成一个数组,存储在超级全局变量数组中( l& u- b) ]9 p' [6 w7 E% l
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中 h: @1 f' ~1 _3 p {( P+ x
C.第二个元素将覆盖第一个元素
( ~! F( r6 \4 ?. OD.第二个元素将自动被重命名
8 N' B a# [7 O4 QE.PHP输出一个警告
# a( {/ l. }0 J: G, i* O- Y
q* D0 l3 M& H3 j3 m+ I4 ^0 J; F" W1 b& U3 ]1 e8 X# C5 f8 r
10.如何把数组存储在cookie里?
+ n7 @+ s3 S4 d c( ~4 w0 _* ^! K5 P* x
A.给cookie名添加一对方括号[]0 o8 z K+ i6 C% u1 n1 W4 F# H
B.使用implode函数* f3 D2 m4 f" i8 {5 v4 C- A
C.不可能,因为有容量限制
% A. Z; j4 Q" @3 qD.使用serialize函数
1 x/ e5 ]- |% G) o: C% WE.给cookie名添加ARRAY关键词
+ r+ }: R' ^$ z6 A# E
1 d+ `, k0 W% Q4 ]: M* x
1 K# P2 ?- t2 V ^2 K! u" L11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
0 F& s& m) d& W# Z" B- D+ {' tB.1234567890) y0 c9 ?7 Q) r- d7 m1 J- D
C.01234567897 Z& W2 m3 K* ~' H
D.什么都没有
: t M- \6 \+ l+ L" H3 uE.一个提示" _5 P* k$ N; z3 s, _
0 {" e+ s1 x. i+ m' z5 J) B
# q" {5 L8 t- f- |/ k5 M' N
12.默认情况下,PHP把会话(session)数据存储在______里。& N1 z7 B2 y. d- ^
( C8 U$ x" e0 h) ~A.文件系统
" ]; z/ j9 F0 s" SB.数据库! B7 l( n) f# X4 z; H9 J- N
C.虚拟内容: J) ?3 g5 ^4 a& E. s. l
D.共享内存
( V' Y- ?$ Q e1 RE.以上都不是
( g. v5 C, v2 j4 {% F" K5 }" e# [" A0 i5 r' H
1 G" e1 Y& h2 b h
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
. Y0 l) V& W6 R p' `! A7 h! L
( u* l0 E% G6 g1 c+ x6 Z8 v, iA.浏览器的程序出问题了, T$ y8 z; @+ _ z5 i0 n
B.客户端的时区设置不正确 v |" D5 @' p( l+ S7 K
C.用户的杀毒软件阻止了所有安全的cookie5 M! I2 c: V$ v. a+ p+ W
D.浏览器被设置为阻止任何cookie- v l' C. X+ _6 J$ q
E.cookie里使用了非法的字符/ D( \: ?: Y! K. a& q& p6 P( u
; x- h& ~, A3 l2 b$ i4 w3 E& ^, f
& m! \6 ?, ^; v0 h& i! y: L6 j% b14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
% I! s c1 A3 A5 @2 Q- u5 p; ^* O% w3 N# A# g. Q' ^
A.1440秒后# v1 j5 ^$ s/ o: g
B.在session.gc_maxlifetime设置的时间过了后
2 `- ]: n$ x6 B, H+ R. n# u( zC.除非手动删除,否则永不过期
7 w4 p% Y! C. e- g5 t$ L' ~. rD.除非浏览器重启,否则永不过期
0 Y: F) m5 l6 S/ s1 }, {E.以上都不对( G- Y5 u5 C1 y0 N. {+ o l" q2 b
: n5 b. m* y. d4 u2 ?7 T2 j- D! ?
15.哪个函数能把换行转换成HTML标签<br />?, k1 M K! }! [! i# `/ k! P
3 x3 Z, Z: p2 `1 Y9 A5 x) T答案:____________3 l* F \9 O) j! B5 f4 J/ G/ k9 k
& _$ \$ p+ W; W+ _- C
+ g0 \: V, P: J! V" C/ j1 D# }& A
8 F- U+ u7 S6 h4 j4 k% L答案速查
/ f$ v9 w( ]! C/ X1:E
8 A4 ^& j- |$ T" \0 g: x2:setcookie/setrawcookie" q4 o! L4 w" B) U( H1 @7 D7 M0 ^
3:B) q* k9 y/ j+ I" O" C8 _
4:BD
: x6 X$ P4 B% {; i5 g# ]0 b5:BD6 S* P0 }- l; P/ C/ ]3 n
6:D: F5 G, i, d# ~4 K* o* V, }
7:A& ]& R1 g2 J% ]8 V* Q; `$ U. t( n
8:B5 h. a4 {3 l' `- ^0 {5 S
9:C+ u" H1 I4 _2 x$ @' o
10:B2 n, a" N* G& M3 d" c1 R' u
11:E
0 _, A$ Q% s4 f; a: D12:A
6 f2 v T/ |/ D4 K13:BD
; |4 F2 B) B4 N/ D8 S14:B, L9 k( @; z1 V) [& E
15:nl2br
4 s( t1 J; m( y( v3 \: x* z; V6 N9 G h8 l) N+ h2 m3 _. N
+ B1 c t2 }% i4 u+ ~. T* ?, I3 j$ [
) `, w) ~5 r+ ~9 f2 e+ d答案详解
+ c% L7 A( S$ ~
4 o4 o5 P7 d4 w1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
% M. V% W4 Y4 G6 D- d+ |; }3 Y7 s% H L0 S
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
# ?6 u# v; |. _- y7 |( S4 q. V8 e% X5 ~5 w* N4 \$ g1 I0 r
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。. h& `. j6 e' z5 L- @% o8 h4 ?
# P- h) T# W, X2 A# B8 x. {4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
0 s" _, w) R6 e, v _, Q6 w; [, z& [, L# j
% g7 {, K8 \4 h# Q0 d, G+ c; b5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。 L0 U) J7 R9 ?6 Q" s
) H @; ~3 x7 Y7 Y+ r/ p
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
, w( G0 D' V2 b3 W1 e1 M
' Y9 x- B' q) {9 F7 `' W7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
8 I- g" Z1 A/ A$ E- P% r
4 s* I( H. }' K! ~. O I7 b4 T' r8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
+ _! U7 {8 {7 w4 W) X0 z
4 C1 [" @9 O3 A" a9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。" B$ q& f H! ^" {' C
. l, \% ]! c6 G' {10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。8 n4 R- A6 ^# a6 A
* Z* b4 G: v( Z11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。 U$ S' U7 W; ]( g" }
/ A) d- W9 m5 F' x* n' u+ [; {
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。- b# @! z d) i* D Y. Y
5 v' Z: w+ Y2 x8 w/ u
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
0 j4 q" Z; P! L
( H( b" y+ H$ S14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
4 Z$ ^; s1 v+ Z# L, X, ^* @( t' R
15.函数nl2br能实现这个功能。 |
|