|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
& f" w+ ~/ ^) N' V' [# j* D与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。0 A/ q. c- X5 d& [& d7 I# I
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
/ i# N# Y2 r- }& n6 Q- z7 H# {) B5 y5 ~: H7 |! ~1 T
4 W) e) X. m7 h& r# e
问题7 H, ]! ]! q1 k1 U: k
. N* y: b7 m. ]! o" ]1.如何访问会话变量(session)?
7 D6 t5 d5 Q" S+ B ?7 T/ ]2 p1 u& U" P$ ]* V) ?: c$ h2 h& c) L
A.通过$_GET
6 M B5 o4 z/ u5 \& G4 [% N9 CB.通过$_POST
+ V. ]3 `5 a" a" D& c9 qC.通过$_REQUEST
) i. V3 `! H, i2 i6 OD.通过全局变量3 s* c4 s! A Z
E.以上都不对
2 L0 I, }# h2 V; S9 W& H6 C# `9 K: @3 h8 D! ^9 Z9 ^& `+ p
% O0 m l( C" e+ R; m- U6 s4 E
2.哪个函数能让服务器输出如下header?
) ~" |4 }" U- w
$ {4 k; I5 x1 T2 R) O9 [set-Cookie: foo=bar;* U: G7 a( O6 o$ ?; G5 t6 K
0 {! X9 a0 q3 H$ U2 u( ?7 F, }
答案:_______________
1 X3 c6 t4 f$ P3 s+ |3 n5 M) G9 F
5 _5 s4 y* j+ x8 Y$ D5 c* t9 D) U3 R/ Y9 h
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?. {3 n+ Q' }( E- c/ ]" U' Y, F5 y
. F) w) U7 l4 t
A.通过HTTP_REMOTE_COOKIE访问. R9 _% p6 M4 ?# _. G
B.不可能) V" n# ], F% M" f% t I
C.在调用setcookie()时设置一个不同的域名
: X( I6 \7 z* P7 ^2 A6 dD.向浏览器发送额外的请求
, s2 w3 Q& U- [9 f3 n. z8 Z9 ]( B% sE.使用Javascript,把cookie包含在URL中发送, R+ d5 y& _8 J8 n" V9 R" o: r
. X& s/ B' V' ], ?- M
2 N: ]: O( o( a2 F* A( c( `4.index.php脚本如何访问表单元素email的值?(双选)
/ Y, Z$ j# d# [
6 p5 B$ `2 [9 T<form action="index.php" method="post">
+ Q. L- K% N, Y. I' N% x* X; r<input type="text" name="email"/>
& e. D4 f$ P. X& H& i8 I</form>
- x4 ^& g9 A! A5 @1 l. s7 N/ V. H. s" L
A.$_GET[‘email’]3 c$ K6 {: `' m F9 v1 O3 J# F
B.$_POST[‘email’]; c" F( v5 _1 r1 b
C.$_SESSION[‘text’]$ w9 @ [* A* u; m
D.$_REQUEST[‘email’]1 l+ s2 h" O; E. b6 j+ A
E.$_POST[‘text’]
% }. W1 e, B( d
7 B/ C. A* `2 P2 |% \$ W
* N6 c: i# v$ W, X) @3 b5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长3 A/ l, X( O! a% [: ?- |, k& G
B.没有变化
) K7 x2 V: g- V1 C+ |C.在浏览器上打印该字符串时,尖括号是可见的
. m/ r$ G1 X4 KD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
% ?* b9 e3 X& v \E.由于调用了htmlentities(),字符串会被销毁
4 w) _& T1 k+ T/ a) _' p
3 t7 P2 }; w% g4 w8 g1 X. p2 `0 P1 |* ~* T$ P' h
6.如果不给cookie设置过期时间会怎么样?5 L0 @) F3 Q6 y& G; \
5 Q- {" N) Y& H6 X' D/ \
A.立刻过期5 W. X4 v, d1 F5 e1 n3 J4 P; P7 {- \( y
B.永不过期
( _8 d% D3 Z; a& U8 Q' L B; v$ ZC.cookie无法设置 |% U l: n$ L7 f: n
D.在浏览器会话结束时过期 k( N; \4 p: T
E.只在脚本没有产生服务器端session的情况下过期
( V' p! {( d" N' | N2 x& @6 s7 }- m0 [
W5 o' |' J/ V$ H" ~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.什么都没有
5 A* h) I/ \. s U$ v1 ]B.Array. n' W" g" g' |. i
C.一个提示# S5 c8 l1 f4 `7 c. n: g, t
D.phpgreat
& ^ k' S! S1 F8 pE.greatphp% o1 W6 z2 ~' D2 ] O7 D& b! ?& `
& K" c* i7 U% L3 }/ l2 e
+ G# T! F- V2 X7 a' J+ D8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
/ ] I- n* v- Y, n
- X$ d- n. B: o. y' ZA.这两个是明文传输,之后的信息加密传输
' i' F7 K5 C# s) k& ]( u( U4 m: VB.加密传输
$ \+ @! |: w6 t, D' aC.URL明文传输,查询字串加密传输
) z- f8 R. [, [, [8 C1 g! _D.URL加密传输,查询字串明文传输
# Q8 l2 z9 j6 q; A5 f* U& n% ME.为确保加密,查询字串将转换为header,夹在POST信息中传输
$ z5 L$ E. C' p, c$ ^
6 C3 O M8 n& [4 u" G" C# i4 r5 E0 _) h- h( z& X# P
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
8 K9 X9 ~8 X9 q) h& w- n2 z; h- T, L; y2 e7 q1 a7 P' i
A.它们组成一个数组,存储在超级全局变量数组中
3 M0 }6 i" T, H! q( @4 xB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
2 t# w) x+ m0 uC.第二个元素将覆盖第一个元素
! J) m0 w* J0 a) O) _8 ]D.第二个元素将自动被重命名
0 f9 x1 K* _# P% l$ T7 yE.PHP输出一个警告
c; M8 i, g: w' I8 G8 [7 Y$ x4 J$ Q6 u; e! B l! z
5 }$ r) Q' t: r% z5 R' T4 j& B4 n; T
10.如何把数组存储在cookie里?
2 j8 R: f( g: h1 {3 J E' v. G2 R! ]6 p: I- d; v, p9 Y" M1 F9 a
A.给cookie名添加一对方括号[]
' y* S! g9 p2 |6 \B.使用implode函数
3 D, _2 p% O9 B2 G5 X/ m8 IC.不可能,因为有容量限制
) t( C" S$ c4 P# g) z- t% X- k* \D.使用serialize函数8 I3 z6 C' b" r$ n+ X) Y" I
E.给cookie名添加ARRAY关键词 o0 }5 w3 O/ y- V- z, i+ f: U
) e* r8 v* |- i C7 Y, w3 x
. \2 D* M2 o! f: b11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
! F" r* C8 F. z( j' f1 \" fB.1234567890
5 c7 v* k6 u- Z4 a7 b. C) ]# wC.0123456789
* c X" n5 t+ j2 x C+ R" zD.什么都没有
# g4 m. h9 F% }$ k. kE.一个提示/ x& M o C: C& r
) L8 _$ S, B1 N' L4 U0 P1 d3 I5 E
7 P7 w+ n; p# V& B$ w+ Y+ ~' g12.默认情况下,PHP把会话(session)数据存储在______里。
1 h1 o7 E& ?+ w+ D( b" n2 c, f5 u, r
, _* A& ?3 X/ l- \7 o4 t0 Z5 VA.文件系统, d/ @) ^, t0 I( U
B.数据库
- x) Y, F4 B7 Z1 [& O- bC.虚拟内容: g( ]3 s9 p% @
D.共享内存
8 n9 d& E. J8 }9 }% H$ t1 k% @E.以上都不是
6 c( n2 G8 z( T+ B& t# [% L! w$ o9 G+ E/ y- O0 H* G3 T+ d; a
4 q) {! w! A0 I8 `
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)0 G! {% C2 p! M6 ^ K1 ^$ r O
# H m4 {# }+ @0 m7 i8 F4 W! sA.浏览器的程序出问题了
: I4 _9 p, _$ E c6 z1 hB.客户端的时区设置不正确
, K: P1 a7 k' N, {' ]* }. U, bC.用户的杀毒软件阻止了所有安全的cookie
! b1 ^, L% [! _D.浏览器被设置为阻止任何cookie
% I. q7 f# H% ^( K3 Y N1 |% g3 \" RE.cookie里使用了非法的字符
% e2 l1 O8 F2 p8 G6 K" P
* H/ z r' a6 a* `* O* H8 [5 M% W
/ n/ p' b9 w" Z8 a* s' d14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
/ m8 n: t' ]- x1 N/ H: n) ^$ P7 X) p; ~8 a
A.1440秒后
" }) P& V; M; ^B.在session.gc_maxlifetime设置的时间过了后0 v$ q0 E/ ~: f* p
C.除非手动删除,否则永不过期
' m' K8 y9 R$ c. w9 H+ ND.除非浏览器重启,否则永不过期
& U0 ^$ r. X& j H5 T G; _$ o8 ?E.以上都不对1 B u4 q2 ^# j- f, i4 Y0 u' k
: y3 e( F1 j( @4 n( o/ R/ s) c
1 b# I# N+ B/ e1 X15.哪个函数能把换行转换成HTML标签<br />?7 _/ A1 \9 \/ |( F
0 i7 d. M2 I7 E+ a答案:____________2 x$ ?7 E# p, Q, m w
- N9 l- a" m% s/ w5 D
/ c+ Z4 @) n, \, Y
* \, _2 J8 V: A% V答案速查' R4 f5 f) L+ g+ {
1:E6 B& ]% o- C$ E# E+ \
2:setcookie/setrawcookie- D5 f. R* Y9 J% Q, |# e4 G
3:B% {: _# { P. I' x
4:BD
4 S/ z5 z+ o! Y" S7 `1 f5:BD
9 p( z- y( @8 j$ t7 B6:D/ m* k4 z7 Z/ {% x5 s- t' S% K6 `6 Z
7:A: x# K3 Z+ y. {9 O( P3 x
8:B
* a) J0 f! Q/ Q* f' n, i" ]+ \. t9:C
* b" E% D+ a# T5 B0 k. c10:B
1 @; u$ i; B I% K" R3 H11:E
/ `! v* q0 K, y% `9 n7 h: O( d12:A
" y& _# v. z8 J4 R8 b9 I. k$ L9 i13:BD! f7 Q9 R1 y& y/ z# h U
14:B: d Z! m7 W/ q' r7 o% g2 L
15:nl2br
5 `6 r3 t: I' P- i a/ Q7 i$ `# R
( r/ T, m( G. A0 c" p! m9 P0 X/ H6 G# l% n6 B' h5 _
7 i r; O4 J- x, n
答案详解) J3 ]) {9 l7 {( @$ J
$ d4 y& b1 v0 ]3 c1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
6 x2 _5 r6 @! o7 g: F4 X( ~4 a0 E1 d; L& o, T% k: R
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
1 s& q* i% ?8 V/ G- D7 B$ \) r1 f9 C( F0 G3 M. O
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
$ W, Y' m+ z' G* V+ w
' D ~* L' Q' `& }7 w4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。5 l/ {( Q# v; @$ K7 q
9 d( j5 @0 Q2 Q# @! J, N* f+ U" S5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
& |) ] I7 {$ O3 J- C* I
" W: t( r4 s& x* r* f3 T- }0 i6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。, p- u. ^( B2 s8 G
+ n+ P8 S4 d0 A. F
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。" v% F0 P. w9 {& S! }2 e6 \7 q
5 d: \9 C# W. h$ o9 C
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。: W1 e) ^2 \) A
3 ^# o8 o/ S, I9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。9 C* R1 K4 X$ E) ^7 O& V- H
0 q8 O' A d0 a8 Z+ I10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
5 a N% f% N1 M; e/ P7 } u' ~. R! o5 R' P1 x. o
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。( A3 w# H7 H& A+ ~- z
+ y3 A; A2 F/ S: c' w5 W4 X
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。, x5 X1 I3 u {/ J. B
3 q4 q. ]: U5 e" V5 t13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
4 v; e& L5 @4 s1 r' N4 }% q. T& _8 H* V* q
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。* n. w/ E& r$ w
/ {( _# d8 h$ y" S
15.函数nl2br能实现这个功能。 |
|