  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14163
- 金币
- 2372
- 威望
- 1647
- 贡献
- 1320
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
8 J. w7 H( L6 l( |与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
9 a5 \9 d4 b' r' M一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
3 j1 W ]( e- }' I
. ?) ]* o3 I+ f+ R, `0 y( _6 O: J' F9 i+ J+ |- M) e; S
问题
7 I2 _5 I9 s+ x+ B- n/ z0 y# @ ] l+ R+ _3 y+ h
1.如何访问会话变量(session)?
+ a% m% B. b& g( ?' W: m2 ], p% E# Y" Z! d+ ?3 c# m
A.通过$_GET- T; m+ j. b z
B.通过$_POST
+ _7 m }1 b4 X% x" ?C.通过$_REQUEST' I6 ?) i: {, Z) @, V/ ]
D.通过全局变量+ t) J8 g$ [/ o/ C5 B1 M2 F
E.以上都不对
- i. Q$ F6 r, \4 F; u! M U- A, [2 T+ d- g* T& _4 D/ w4 V
' y4 L) `5 e7 y3 P- c2.哪个函数能让服务器输出如下header?
6 v9 I) e6 S, a0 m( |
# x% W+ A% V; x! }" gset-Cookie: foo=bar;1 K2 M1 }" h3 l" F( D$ a3 ?/ k
* v6 L. y1 L' T. K9 \" ^+ c% S; s7 e
答案:_______________/ h% x0 C4 x0 [# G3 C
5 A! |; K' a. c8 e3 X1 I1 I8 D
/ t% N4 d! x e0 _( I9 F4 o/ X3 {2 u
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?# n$ `% s# {7 P @0 X% h
3 Z. b3 ^. r0 l1 h. h! ]' G2 d
A.通过HTTP_REMOTE_COOKIE访问
; o# [, ^+ ?1 w& D6 c9 j* nB.不可能
7 j/ |5 r3 A7 ^& e3 BC.在调用setcookie()时设置一个不同的域名 O: u9 T% P- @, I
D.向浏览器发送额外的请求
' c9 |; M( s# T2 v2 q' ~+ D3 i q3 NE.使用Javascript,把cookie包含在URL中发送
- M6 g# q& {. B6 {9 S& l) z9 h/ K' c
% k0 ~' O7 N9 Z4.index.php脚本如何访问表单元素email的值?(双选)* ?. T7 d3 ~7 \: F" T1 y
7 K8 e) b! l2 [) l6 [+ b' v<form action="index.php" method="post">
O7 n! l5 m' @; f2 G+ E<input type="text" name="email"/> e; u$ m$ v" o+ [& X' T8 o
</form>
2 ^ z# \% O6 R# d0 u1 h% a' |; r5 f6 l
2 {0 C. `7 k+ n0 C: I: ]( ZA.$_GET[‘email’]* t: ~. c' U5 z* q1 g
B.$_POST[‘email’]$ @) d( }) F2 U. `; G8 {+ W3 f* x
C.$_SESSION[‘text’]. A% d7 f$ t* r9 v
D.$_REQUEST[‘email’]
2 Z, d) f/ ?3 h( R% B7 C7 sE.$_POST[‘text’]/ {! A/ \' Y& e( ?) O: ]; z
3 E2 ]2 Y# |" t. F* i
2 {$ x# ?3 E9 D |
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长" F6 C) w; J4 i' r2 j8 ~
B.没有变化
1 P4 k# i% O$ F2 ?$ lC.在浏览器上打印该字符串时,尖括号是可见的0 C) v2 c. h% p" h' q& i5 `
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
7 k* G$ f1 c% V# A/ ~E.由于调用了htmlentities(),字符串会被销毁
+ _6 X% ?1 r B' n" d' L
4 R+ G8 q1 q: j% ~- V
) v1 K8 {) w2 Z6.如果不给cookie设置过期时间会怎么样?
# z# L3 ?- h1 n+ c) \4 E/ ?
* |2 L1 K6 G, JA.立刻过期( R l1 f& t( [; \8 y1 o
B.永不过期
1 O2 \* G) z% r2 F g" u7 K! v3 UC.cookie无法设置# @' C( i7 c' l
D.在浏览器会话结束时过期& o& v0 a7 ~- Z1 ?
E.只在脚本没有产生服务器端session的情况下过期' P/ q" J/ l% p+ a' ?0 c
3 x& n9 B4 r* X$ o! r, i
2 Y+ G. \, y! A7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
4 [5 H8 ~6 X$ f$ s. ^B.Array& E3 f" J+ d7 ?7 ^/ j
C.一个提示
1 G" M' e% `, O/ oD.phpgreat
5 |$ E* R+ x5 u! ^$ I- d- |* OE.greatphp
: r6 _" ~, ?' d0 q1 M8 C9 Y, A3 v( }% i2 ^/ b' `6 H
( o0 Z) Q$ U3 x, u$ G3 H
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?& N1 } G. i7 O5 }5 |( ]
- z) i# _) y; a5 m9 `8 ?9 S% R' P2 WA.这两个是明文传输,之后的信息加密传输
0 ?2 b# |( o" n! T! x$ D9 T' cB.加密传输8 @ O+ P- ~$ ?9 i; D: f5 N6 j( e0 N
C.URL明文传输,查询字串加密传输1 l& G( Z! J3 ^2 j D" `- } @
D.URL加密传输,查询字串明文传输
2 C3 m' R8 }5 A1 V9 W6 [2 y& }E.为确保加密,查询字串将转换为header,夹在POST信息中传输 q) Y' M7 j8 n. d) W; `$ L' ?7 H
! o* `4 l+ D6 z! [, C+ ~% i- X
& ^' h6 G \1 w! o
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?" I2 l' _* Z, k6 u: G
' Y2 n2 O/ [# |( D! R. x
A.它们组成一个数组,存储在超级全局变量数组中2 h! g/ W' |; _2 f5 l7 j
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
2 Y6 c1 F& F: V3 mC.第二个元素将覆盖第一个元素8 B" h; f( m! J( {3 y
D.第二个元素将自动被重命名& t" b8 K; X! d3 G+ }4 O
E.PHP输出一个警告0 D, S& r( n9 T) n o0 ^6 C9 g
; |' D6 @; d$ z1 _
3 H1 r4 x$ Y5 I" g* V10.如何把数组存储在cookie里?8 M& X( |/ L; c" I5 p
7 l! Q4 {, b( } R1 i. l* b! r' W8 v; }
A.给cookie名添加一对方括号[], |2 u! T& |! A8 i- T
B.使用implode函数
, ]8 C/ ?1 C. h8 k8 d# Y6 c9 k( \3 OC.不可能,因为有容量限制8 C5 ]! [) W0 P# M/ }; v' C
D.使用serialize函数
' N9 C8 Z: u& ~# S$ NE.给cookie名添加ARRAY关键词/ P: @ h' M( o+ u; f! K
% C7 Q. z: E7 u" K$ g' m
& W8 G6 q; B' ~* z11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910% }1 [* @9 v& I, t/ X" p5 m
B.1234567890
}% ~+ {! S4 c* C" Q7 T/ QC.0123456789
5 O# @1 ]3 h) p0 zD.什么都没有
* @1 x4 h6 W4 r! v$ a3 pE.一个提示0 w; j; t& _' D! x2 W" q/ A
* [# E0 \0 ~; X6 r0 A) b7 C0 L5 a$ e4 n/ ]0 f5 j9 U9 l7 b
12.默认情况下,PHP把会话(session)数据存储在______里。9 z s9 Z2 n% U+ C
1 j! z% t2 P: M% P3 [A.文件系统! Y+ y( o' R1 @' P: v; b D
B.数据库
y3 O9 W9 b+ wC.虚拟内容
( Y; m. x7 w& T! G+ MD.共享内存- s- `- Y, {4 x3 |0 x+ }4 [
E.以上都不是
' _+ {" D) _2 b+ ^$ R) s4 ` N. |$ Z
# U' `1 e6 ^- u2 Q
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
. @5 L) L# ~' V, d! B- r' `2 o1 A# n+ _/ S& D
A.浏览器的程序出问题了, S7 U3 `5 M' E' t9 O: b
B.客户端的时区设置不正确$ r' ?$ o+ _) q0 P+ j
C.用户的杀毒软件阻止了所有安全的cookie
% @5 v6 P; @8 ~, g1 pD.浏览器被设置为阻止任何cookie1 S% @# X. h3 Z8 `5 W
E.cookie里使用了非法的字符
! p, i4 a. G$ g" ~: A: _+ p; `0 ~
8 _5 K. [( X: }9 T
4 ^6 }* b x' j8 o4 _9 F14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
) U4 S* [0 T: [, }. _+ D8 u& m8 p9 o7 A
A.1440秒后
9 N; w; s* B4 u6 a- v- E: n+ W# N; LB.在session.gc_maxlifetime设置的时间过了后
/ j& f+ l% s9 `+ _C.除非手动删除,否则永不过期
6 D8 g) N$ i, A# g1 m, z# U$ f7 PD.除非浏览器重启,否则永不过期
7 q* u7 N( h, |( WE.以上都不对
( B* v4 I) O8 ^7 |1 h: z4 f! ]; E' \' l! k
; k) M9 ]6 z' {+ r15.哪个函数能把换行转换成HTML标签<br />?
. F8 X' w# B5 l$ l) E) Q3 K# m* n! M% {' j2 ^
答案:____________
& W8 W1 ?! R+ ^8 T; M$ s6 E7 T2 }" Q- i6 U3 o
- |; ?: ?3 ]# o" f
3 r; l( Y/ G! f0 @, |7 v# v; }
答案速查
* x, G+ O. x6 J; G, ?1:E! @2 S' f& B5 ]+ p$ R
2:setcookie/setrawcookie& Q% h9 y. F3 ~; r: X( b
3:B
5 K% P3 H( w3 _+ T8 c4:BD
) t5 P; E/ }" W& o$ m- |" S5:BD% B/ F. Z8 `) o: P' Q: y
6:D' ~+ P+ [' l- ~+ {2 [% f9 u" P
7:A
6 o8 Q. V. U* J F- N6 y8:B
" O0 f+ A8 I$ @1 I) P* A# y; e9:C2 Z( q, ]* z' Y M
10:B, Y+ J4 t: L% r. d
11:E) k2 C: Y: U* X( H/ V- i
12:A
; A5 Y8 ~! ?0 R r13:BD* f5 J+ z+ S1 H$ w8 o
14:B
; Q- R. j9 l1 P) O. ?) F" U15:nl2br7 E _6 S4 O" h; p0 q) \
3 h$ _6 L* r. g. e/ B% {, U( E
- \! M5 \# k0 \* W9 c# o- _/ y3 \" _
1 y) G- E4 \: G/ @答案详解/ l- c# Z& R5 [, ?2 q3 _# A+ D9 O
0 b- z: ~ Q# r% n8 ]$ J- D4 E
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
4 ]9 D# O; V& N, k' f1 G0 |3 z' ~7 ~# C0 f7 [& f4 D5 W
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
& x8 M. {. ?. w* R& h# ]5 t t( b! n- b" q% a
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。; S. P/ J% j3 f& j/ A, O. J% H
& R8 D6 W- f1 V6 Y/ c) e
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。2 y& L" d) T1 w
- \ W* j% |. ^. m- k
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
* j2 b7 W+ [# x6 U1 Z; T
2 z3 I( Q( l5 |9 R6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
2 _+ K. P* I9 f+ r) W" u
' v E% j; d5 h7 [7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
/ _# r$ G$ j+ M( b4 C4 A; @
- r" \0 g1 j2 f2 f9 B8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
: C3 |, |: p1 M5 z7 k: e4 b8 Y8 E9 V* X& O" @9 T
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。2 i7 H! F/ a* p& d, Z( F0 c
% d$ F- R8 |# @" j# q7 Y. w5 H' J/ n3 {10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。 \0 A! r2 i! Y+ f8 r6 Y7 u
; |6 z; \! }" D7 t: a7 E- e1 ]11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
4 F; m4 {6 B. V: ?/ O0 U, s0 c
/ h! s! ] P* B12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。' N K6 t5 t7 s+ E, B) [
6 E2 c: M, p) ^2 e( Y/ e13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
) z6 }/ ]% j, y O2 F. v7 k3 h( `4 Y' V3 c. a5 O' j
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。3 E8 D! M4 s3 @+ E# e
) d5 H4 W1 K2 B
15.函数nl2br能实现这个功能。 |
|