  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14159
- 金币
- 2370
- 威望
- 1647
- 贡献
- 1318
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
6 |: z5 t, X! C. Z1 X% ?与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。/ Q; m+ ]9 O0 n; a
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
" |' Q4 H% h0 A% [8 F1 I0 s9 `9 ?/ a ?
+ F6 \5 O, J' ~* H9 C, A. \! [
问题
( h+ ~* Q. k1 v# R* E
/ D b1 w% D6 j9 ^# C: X: {4 I1.如何访问会话变量(session)?( A; k) E8 m0 G3 ]
9 m, l, @$ w1 y5 U: Z" I4 ?& a
A.通过$_GET
4 A7 b; R9 X- qB.通过$_POST+ b5 t& `; j' [5 ]7 r' S3 R# }
C.通过$_REQUEST @4 f" p* f! C$ [& ?
D.通过全局变量
( W# T( R* d+ Z, h( ME.以上都不对$ `3 l" t! L0 y! w; m- d" u
8 r1 L" O; c5 }" }0 C1 y
; p W- _$ e6 R: V+ u- s2.哪个函数能让服务器输出如下header?' v# x( P, E5 T" W% [$ l8 L0 i M
. ?5 |) D- ?8 K7 O( z- O+ mset-Cookie: foo=bar;6 Z' O* C7 e O+ W5 {
0 D# R& c' o% O
答案:_______________+ x9 o; E2 F o- I4 c9 r
3 X' p I- S4 s6 [( {
( P( e7 T/ | E% z4 n3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?& @' f* E2 o+ q
$ l5 y; c8 u) }- C( ~% M5 ^! {A.通过HTTP_REMOTE_COOKIE访问/ h4 V7 R$ L* S; `1 s2 c) k) Q
B.不可能2 J' W. X& i! U3 [" A1 x7 B# n
C.在调用setcookie()时设置一个不同的域名9 p$ H( y. }! a% g/ {0 D' ]
D.向浏览器发送额外的请求
5 I% Q) z, v' SE.使用Javascript,把cookie包含在URL中发送3 o! A& h6 g" u4 c' Y+ x: i
) ?* C0 }& J h7 T& A8 k
5 V8 d% @' t, o6 A$ \$ A+ T! u4.index.php脚本如何访问表单元素email的值?(双选)7 [8 q* U* m) `4 ~7 ]" {+ z
8 H7 E8 U2 z$ V1 Z; y4 ^. h<form action="index.php" method="post">
8 _/ h$ S' E1 l7 Q/ s0 g" M; ]9 E' r<input type="text" name="email"/>
; F: g L5 T: Y! V</form> ~6 d* H( |, V
$ C0 M0 k6 }2 }5 D
A.$_GET[‘email’]! s% a& G6 ]6 f5 @: F
B.$_POST[‘email’]
# X- P5 }0 _/ v ~1 SC.$_SESSION[‘text’]1 \. r2 o3 V- o a" r2 Q j0 b
D.$_REQUEST[‘email’]
2 Q: l8 \. H8 R8 `- f$ HE.$_POST[‘text’]
5 r+ U7 h- a6 V7 l. l* c3 i$ n7 n. r ~6 T2 N. M
2 g9 p4 Z, @" n: _6 n, _
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长( K# e, V3 m( y ?) |4 _$ D
B.没有变化: j1 v. \" x+ Q& M. Z2 B
C.在浏览器上打印该字符串时,尖括号是可见的) n7 z. ?' O4 C) P
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见" y3 d" P! X5 H. H0 b0 J
E.由于调用了htmlentities(),字符串会被销毁
5 O5 p! _! R& S- k1 [$ ^5 l7 J- D$ \
/ t( ] U5 V0 l$ d6.如果不给cookie设置过期时间会怎么样?$ H3 H+ B1 P; b
4 {$ J& t/ }& X: I9 y
A.立刻过期# H; x9 o7 v3 [7 Q, D! H+ h
B.永不过期
% u* v6 _2 U2 Z, Z5 [" u" PC.cookie无法设置
1 w+ [4 p2 {' U& G3 }3 y4 hD.在浏览器会话结束时过期, Y3 N0 m; y O- S- i
E.只在脚本没有产生服务器端session的情况下过期
; V4 H( I8 P% A" k! Y6 H- m+ F" [1 V4 }
7 W; u; ^& \# |% Z8 ?
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.什么都没有
: d4 j3 v3 t& m' t: N5 |4 pB.Array$ ?$ _7 ~! W7 [& a5 q. w
C.一个提示
) k( r' ]) f& H4 Z6 }* R2 ^D.phpgreat; V) ~! b( O9 u* ]8 c) ]4 v7 q# M
E.greatphp" H% X0 Y0 R5 S' l" x9 ]. Y4 P
) ] G4 K; V" ]* ~/ ]: |2 o/ g
! M d% @3 V4 Q3 [! ]8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
) V' F E/ N- j7 W8 f5 R, A$ q8 t8 W4 w) N! j |5 p, f
A.这两个是明文传输,之后的信息加密传输
+ X; y9 ]9 V# mB.加密传输" r$ y; L2 L% _* T d; V
C.URL明文传输,查询字串加密传输# w* c3 z: E' C# V" I) z! \2 G
D.URL加密传输,查询字串明文传输1 r$ `' U: h- v" ]- x. w
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
! \- D2 D0 g7 S* H9 B3 P( ?9 {+ E( V4 G1 _1 h8 O6 D4 }; ]& v
2 v+ A' q' G) O V+ l+ x
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?/ _$ v5 \4 E, o. w
9 }0 C2 ^* T/ H) l3 r/ GA.它们组成一个数组,存储在超级全局变量数组中9 h9 W4 r6 m* Q) A$ _
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中5 G& Y- j; @, _ I
C.第二个元素将覆盖第一个元素5 F# f N/ O+ U
D.第二个元素将自动被重命名- g( o2 f9 r) i/ j2 @
E.PHP输出一个警告, s$ i! u8 g1 o. C [* F Z; i( y v
5 M `$ P. R6 ~% a: S8 r% m$ A7 w6 ?' i
10.如何把数组存储在cookie里?0 O! R+ D6 j6 B. e0 ^
- q! A; T! I! r/ c
A.给cookie名添加一对方括号[]
$ Q% H8 V# }7 r2 m' aB.使用implode函数
2 A3 Z. b( l* g, kC.不可能,因为有容量限制2 Q5 _6 a7 v0 Q' r9 R' Z. S
D.使用serialize函数/ x9 D' R' L# c" g+ [. e
E.给cookie名添加ARRAY关键词& o$ w" _9 n0 { J4 C0 I2 k9 }
* M% _9 R. g, N+ g
: B# h: b2 r2 |# [/ I
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910. q' e; o I3 ] H; o5 I* r O
B.1234567890- i+ v' h6 I Q- Q' d! b
C.01234567890 {( r8 o8 V0 V
D.什么都没有
$ w% V* U# u# ]0 ]! `/ [( `# oE.一个提示: a# O) A' ~! n: g0 j& k3 n& ~3 P) S
% Y* f( A" y" c5 J+ o* C+ v% Z; e, O) F3 c2 _; p
12.默认情况下,PHP把会话(session)数据存储在______里。
+ H, ]4 P2 ^ B6 f$ E) q: _3 j' t5 J% T+ H
A.文件系统/ C. O$ c' Z4 _/ F% ?& @* V
B.数据库( C5 h5 Z# W v
C.虚拟内容
2 B/ l" O- e( W; Q. u+ [' FD.共享内存
8 w3 n5 k z2 D" \8 c! a$ XE.以上都不是# O3 F; Z. |* |! j2 \% g
+ }& ~5 p: s6 N3 \
1 G7 E2 Z5 \% ~, _: o3 M% A/ @13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)# _: S3 P1 a- [3 {1 m
8 h7 ?/ {8 [ t1 b+ _& D ~
A.浏览器的程序出问题了+ @' g) r, @5 h: E M
B.客户端的时区设置不正确
" M' X- D! B, y- ?* R# S& \7 ^4 ZC.用户的杀毒软件阻止了所有安全的cookie5 p2 y9 F/ _2 j: S
D.浏览器被设置为阻止任何cookie8 A z7 x2 C* F; q" F2 G6 a
E.cookie里使用了非法的字符
! B# Y( F3 R9 R$ e4 R- U N
# f) R5 G! i6 l9 t2 N/ V7 E* v8 C6 z0 ~% Z- S6 o" b; c; e# Y' w3 Z
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?) O4 S! R6 w% s! G- P3 w5 h' e
! K' D9 a' j+ }6 w, p/ v
A.1440秒后
& a _6 ~0 P8 \B.在session.gc_maxlifetime设置的时间过了后
0 F0 p, F# w# A! R. B! h5 mC.除非手动删除,否则永不过期
9 c2 F/ ~% O9 ZD.除非浏览器重启,否则永不过期8 y0 g0 p2 X% O8 K
E.以上都不对& N! B" R' h* {0 I! t3 X
. R! }9 g. ^3 Q5 l- W4 H) \
$ y% U- x0 ~0 q1 \
15.哪个函数能把换行转换成HTML标签<br />?
$ v$ i) K/ b1 D8 i+ I% w- N2 u6 Q1 A
答案:____________
; A* W* l' t; q) {' B" v1 [8 [5 a1 W* y9 H5 i6 \' K; D6 ]
4 O) F$ L" x, a5 p* I5 ]3 \' N
2 a- t1 U# u6 ^4 Y8 {+ A答案速查
m6 f4 O' e" s+ {1:E
% n8 A% T% K3 e( K0 d8 y2:setcookie/setrawcookie1 X! Y; w5 d2 R$ P0 T2 p
3:B
; b- a6 G- ?$ N$ @& E4:BD
( O: k, s& @- P, I; E, D2 G3 H* _5:BD" c; n5 d$ | F4 \! S+ R/ ^4 [
6:D2 e3 i% C1 m1 f( O; O* b6 m
7:A
! z) I4 R( s0 f2 [# d/ V5 G: B8:B1 s6 F) C) N+ h& J. ?6 \& [" T& N
9:C8 y T; f+ r) ?0 D- x, i. Y& c
10:B+ _& [" w# R& ^5 a* b8 v
11:E
& F* l$ L3 _0 k1 v" E12:A. \) p/ A! Q4 D0 B1 L8 ~7 [
13:BD
O! B: L! g) f" h* q14:B
5 O4 Y+ \" N* e# Q* b3 B* B) M15:nl2br
7 p1 _ D- b z: h0 a5 h+ [2 y% m+ H
- M1 a. N2 `( c+ X9 ?- t4 p6 {0 M( x3 C) _& N4 V% y) }
2 ]% ?# S1 f; s8 J7 R( r答案详解
' `7 M5 R% W: H- ? \' `* S- X$ k0 @& B
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。% }: J6 Q4 k+ J
9 d5 a2 m7 K6 K: p# x6 j) t& v/ {
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
. V' |( [! h3 E" @) x8 @* e# [- m* `! G% x! v6 Y; |; W/ _
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
/ G9 L1 h( D# i
) J3 i" ?* e7 f4 V3 v5 @4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。( W$ U/ q- G; C' m! I
& Z, s, I& a- Y. m' x) J" M5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。) \% n6 ? Y! Y8 c
" ~4 Z/ g3 n! x2 l
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。4 y6 E7 R. O) Q% c
4 `& }; m6 k" s' j( N. {& R z7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
0 @- \+ a6 I( {' W' ?4 p( s7 V1 G& i+ s0 m
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
8 y4 m1 m' z1 V+ a2 ?9 r0 \% o B+ r' n
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。0 N: |/ `% S' X* E: _: j
: N4 m E; x/ O$ W! {& g. W) U
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
0 O0 v9 P" t7 Z9 w8 w% {! {4 G8 v3 B/ }# O
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
6 ~8 v( m$ @+ W
7 T1 n% I) b6 _, H& Z: Q' F12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。7 |$ j" e7 x' W a+ M
% e, c) a9 R0 o0 }1 j5 F13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。3 a9 f( y7 N* |' t5 S
( x( P9 e$ N. x& q14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。0 @' v( ?( O, c% \! {1 _1 g
- a5 S- F a7 h" }. G' F; i; _15.函数nl2br能实现这个功能。 |
|