|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14433
- 金币
- 2502
- 威望
- 1647
- 贡献
- 1450
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。" |; z8 O7 I& v' M" v4 [
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。* P& m+ Y/ j# X1 Y( K( Q8 B( z; Y; T
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
6 [8 k" I* c# @1 c; x% k$ o; Y p2 g2 J3 C/ j8 a
& C& t# }& T: b问题
' g% A5 i3 a7 I! t- b; J" @. h& ^6 H; r
1.如何访问会话变量(session)?
# V9 Z; q: }4 z# O- p! J( X5 C& A d3 n- V' u/ t# l) ^
A.通过$_GET& C: f/ E: r1 x4 g/ S5 V' N
B.通过$_POST
+ P4 ^) |& r0 Z* S- w' FC.通过$_REQUEST
1 H) e: G2 @; j) o" B+ ~6 o( @D.通过全局变量
: T% e5 w6 Z* H7 }. PE.以上都不对: L9 ]6 @; e3 @' a! |
$ M* U+ T9 a: y# Q7 O9 h* u: C& x' j- l$ f: M- @& z
2.哪个函数能让服务器输出如下header?2 u3 a, p0 D$ u1 P4 y/ E" H
* x8 z. c/ b ?* ^& f: r' Mset-Cookie: foo=bar;
n2 C1 |4 O; F( B1 [
( [; O; C# \ `' V0 P% D4 F! y2 n答案:_______________
/ d9 z6 Y1 z* d% z" z
' H0 T0 z, ?: k6 S" ?; c
* K+ z9 w5 _% O# B r! r% b3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
+ P6 L4 L/ H- o1 ]5 U* `5 G! G; X2 D
A.通过HTTP_REMOTE_COOKIE访问
; M. q. z$ n# G& m1 r. RB.不可能8 {' b5 C, H; v& {
C.在调用setcookie()时设置一个不同的域名
' W6 l* Y3 G2 y9 ^7 j# YD.向浏览器发送额外的请求* V* _. ~" i+ f4 B' C9 r+ o" ^
E.使用Javascript,把cookie包含在URL中发送 Y/ C" b) \) E
/ G) s& I+ s* }: v" l0 n
% s* ?$ w5 N% z2 T
4.index.php脚本如何访问表单元素email的值?(双选)
" o; L$ u) B, l5 P, ^/ x6 K4 k
' Q; h" ?9 ?4 D) m<form action="index.php" method="post">& K) m6 Y, u" _, s, ~: Q
<input type="text" name="email"/>
/ o2 @% G6 k& f( c G# H0 g</form>
: y9 }2 ~4 N4 F A! z
& A' w# B; ~# |A.$_GET[‘email’]" d! X7 c6 l% r
B.$_POST[‘email’]
: c6 u! o1 v. eC.$_SESSION[‘text’]
. }0 G, K3 L# a l* R0 ^D.$_REQUEST[‘email’]
$ @. b$ N0 v; D1 m% RE.$_POST[‘text’]3 S( j2 W9 P' _) O' Q) B
9 d1 L7 N( [/ I( K7 w3 m
& g/ C% Y. I, Q2 a5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
8 W5 X% q# D! F: H: d8 vB.没有变化4 `; `& {' T, B4 S) z
C.在浏览器上打印该字符串时,尖括号是可见的
: c* b; v0 y" a, c' j3 w/ G f/ ~1 MD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
& S* \7 @8 e% `+ @! EE.由于调用了htmlentities(),字符串会被销毁/ Q2 y$ g, P7 A
% O8 n+ I& s. v# \$ q
3 n" s: n& Y0 F6.如果不给cookie设置过期时间会怎么样?1 ~6 f" I' L6 K% q% y
1 Y2 ]( }2 L1 c9 K% v# KA.立刻过期" @* `7 G5 H; y6 U2 }9 r
B.永不过期
" }- G1 ~: S/ Z3 z4 n% _4 `+ t% D# BC.cookie无法设置+ c: x$ \8 [ U& M0 F/ z' N0 e
D.在浏览器会话结束时过期
5 G7 p; C7 i+ k- lE.只在脚本没有产生服务器端session的情况下过期% U' `; {/ X3 C6 U% F" e5 ~$ r
' a+ G4 r* Y7 p5 a3 ~
2 w* \' a. K2 |7 O. N: e7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有% X! n5 I: P8 ~: I+ |! z; R
B.Array
w2 f. o5 A- R2 P, g b9 AC.一个提示3 v, m2 v7 Z# |3 @8 @. S
D.phpgreat
8 r. N7 q& [; [& S* I% VE.greatphp
6 V: q* @% Z- T: D. n6 Q
- o, f6 [0 W3 F/ m1 \
7 D% R' x- a4 K/ H, C8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?& w: a- L) | @
/ F# j* \6 s: a1 x/ ]9 _" K+ t* sA.这两个是明文传输,之后的信息加密传输) f& V" l* H" ]7 m' q+ A
B.加密传输; ?* E* p' A. G) b& M; H
C.URL明文传输,查询字串加密传输* f" k3 h. F [% m
D.URL加密传输,查询字串明文传输
3 o h8 }" z2 w6 ^E.为确保加密,查询字串将转换为header,夹在POST信息中传输
- k+ ~8 Z& V, W; @+ f
( v# k2 L4 k( W I
+ f' ^7 E6 B& x. _5 u/ u5 \9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
$ j# ]5 y* h1 U* p0 ^7 E2 x! a* A) d1 `% c1 Q6 S, q2 d( y9 n
A.它们组成一个数组,存储在超级全局变量数组中4 J0 a3 [ n) E c% f' K
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中3 e& d9 B; ?% ~% o3 f( e
C.第二个元素将覆盖第一个元素- I5 W2 x5 W w2 @7 a
D.第二个元素将自动被重命名 ?, ]7 R2 R6 A& o7 c
E.PHP输出一个警告$ X' F5 ^& a Z
2 i( `$ z3 @9 F( t4 H
& p0 B5 B6 V! O, D, l9 o
10.如何把数组存储在cookie里?
8 [& I4 H% y, u3 u Y; Y X
( ]* u1 e5 ]* @* o0 |A.给cookie名添加一对方括号[]
- e( U! i. B0 { u( _& ?; ^5 q5 f) uB.使用implode函数3 R6 u2 S# S/ z
C.不可能,因为有容量限制
# n' j& A) W: C2 J1 ]) w6 ^D.使用serialize函数
9 K' t" ], v( N) ?8 r+ K+ u/ H. fE.给cookie名添加ARRAY关键词. ?4 @' @% f9 K: I
! e( u, X: q4 _8 U5 k# }
7 l2 Z& J1 Z- a; l11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
* D% Y- C# f1 E8 s- iB.1234567890
6 Q# y! j4 E3 J+ l* h; cC.01234567895 U- u; ^) S* |4 X2 }
D.什么都没有/ }% e8 W3 e# `* `% y3 g
E.一个提示2 m- T' V! l7 l# j
+ W: H% P+ u: e8 Z" }, s- b2 f ]$ H; G
12.默认情况下,PHP把会话(session)数据存储在______里。
( z. W5 p, W) t( j( M9 s9 j
1 Y L. w2 b; m/ @+ b/ NA.文件系统
7 z m6 w. d" {3 D1 M3 O+ n3 bB.数据库
) ]- h# y, P% y0 m3 `. |9 Z F, xC.虚拟内容
0 d! Q' y* c" A! U( ]0 KD.共享内存$ M: q% E! {# x$ q1 e4 H" _, y
E.以上都不是
8 u" p. I! ], b8 [5 f0 {+ O' _- n' f+ ^- s
* o5 Q" B: b( k+ I* d
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)' V4 R8 }4 u% R" u: f
" ]# ^1 s% j/ x Y" Z4 QA.浏览器的程序出问题了4 E/ Y; G E. A1 i* H4 ?8 q/ A6 R! [
B.客户端的时区设置不正确8 V$ ^6 s) D/ a) y
C.用户的杀毒软件阻止了所有安全的cookie( b' Z" s1 Q/ h8 J4 H' l% J4 L4 o' v
D.浏览器被设置为阻止任何cookie0 N& _+ }, ~1 z
E.cookie里使用了非法的字符
1 t0 p) n5 T& L1 D7 c) L
7 X* Q+ R( E7 {# q* m8 n+ z, r2 ^2 Z% X( }
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
) J# T/ u% b. {3 J9 h( W# m2 ?# E3 C9 J! G8 u7 D+ s
A.1440秒后) V" P# @" p1 M1 l' M* _
B.在session.gc_maxlifetime设置的时间过了后
" n- L# v2 Q: f& _C.除非手动删除,否则永不过期
8 Y T8 G, V R! W* QD.除非浏览器重启,否则永不过期
! D( c/ u% m8 n+ l! YE.以上都不对
) Y+ `0 \7 r- I7 K- V: t1 b2 q/ X/ ]8 y
# X6 \$ k# B% l: [0 M B! k
15.哪个函数能把换行转换成HTML标签<br />?
4 y' w* I1 a+ T6 d, [- }2 A$ P- X) X& }& h; {6 V
答案:____________
& c/ i0 l0 u& G4 s7 f$ i, v
2 m2 q& \6 y" }2 m
8 U: o0 l* h, H, {2 z: ^+ O' ^2 _' S
答案速查
! Z% U3 ? I( W# t5 ^' `9 l0 Y1 l1:E% S3 t. F9 |$ f* j7 B
2:setcookie/setrawcookie
4 n+ p j- N$ S& Z, @# B2 e. @3:B
* P ~ j0 ]3 w6 g1 Q) i4 w4 ^& m4:BD+ i" K: E" j6 l% |, l% a l
5:BD/ F1 X( ]% A- v0 j8 E* O; e' T: {
6:D& F) _ ~7 G5 o2 T8 D# `! H
7:A: R2 f4 G8 c, A3 k
8:B
2 [& q) e8 h Y- g$ \9:C" u9 S9 M& }8 Z
10:B
. L7 i% k P) L4 N5 Z11:E2 v! k) ^5 S: G: M2 t
12:A
+ z0 v2 \# h: k1 r13:BD8 B# i8 v7 x' s) A
14:B% n1 H. x: ^* B( n6 Z( i9 t
15:nl2br
5 l. n1 J" r9 e
/ ~6 s+ m4 K* K8 f5 n
( P9 W0 H. i* h
! S( z/ C' f1 N答案详解
: L5 s6 d! o4 H% H t) m2 ?& x5 C0 e9 o; L" D) T- r8 ]) ~1 y
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
+ K: P7 U3 K0 q8 D5 e+ M: r. |! j; S4 g0 q% J
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。7 I% L3 F6 N! ^# q( ?# s
- Q9 r9 P) y9 J, D3 b& O" w
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
# E% @+ r) R4 }2 T
5 ? h" M7 [7 m& k. e' }% Z n {4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。% Q/ S4 f- v. c
, W1 c1 S/ j9 ]
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
0 s, g* N# E0 [! Z2 E
, @/ ^/ c% ~7 K6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
1 m8 W* U( N3 N6 V7 e
; K( p: |. @) v5 a7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。" K& ^+ r$ _1 S2 u" ^3 t
8 o& ]0 w. W: t6 t& f- g8 B
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。1 `# ~ I. S4 m9 G. i; f
- L. n4 W% t3 u2 ]
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。1 C# o% `* J4 Y4 y8 [
+ Q: E) u# L4 \! k& _
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。+ Y+ W) e0 ?; l3 j7 z
# B# `6 i, e- d( I G! G11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。: i) I# W E7 x) m
- Z+ n# z8 H; c3 p# r( G12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。( Y% p- i% ?* v5 P
9 B, R4 c& I) g4 P6 m13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
' X g! ^7 R" z7 O3 Z' E' [
3 c6 ?5 M& V$ [6 l- Y14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。. r5 T& P7 v8 o. ?* c) q
9 C% ], I. v- g" {15.函数nl2br能实现这个功能。 |
|