  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14197
- 金币
- 2389
- 威望
- 1647
- 贡献
- 1337
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
! Q6 `1 m, N0 b& M与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
, c* Q0 L6 |) a& P- c' d" z/ g0 Q一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。! b% p8 s6 y& ?9 X
; b5 X& }9 n8 {) x0 T7 R
. ]0 s* G& l4 s8 }9 ~0 a8 u问题/ I& c j, X' q9 ^( ~4 y
) p! _; j1 j$ l/ a* e) ?1.如何访问会话变量(session)?4 o3 J, V! |( [0 a+ k" C
[2 ]0 }9 L1 @- q+ ~
A.通过$_GET
8 `2 B/ e9 _' J" c7 uB.通过$_POST3 H9 N/ Z' h1 W4 E* [0 s7 V( Z+ f
C.通过$_REQUEST
: [) f; b2 f: a; g- t, e% t# _D.通过全局变量; M' t3 L; o0 z! j% R o
E.以上都不对: z, j. D8 R5 `9 d' F* m; G Q7 d
/ A/ {- o1 y {; d7 L
6 Z9 S0 a! t! J& j) y- G
2.哪个函数能让服务器输出如下header?
2 \1 r" @% s( P! n# V V* x% F+ V$ ^0 I1 a
set-Cookie: foo=bar;* u0 C" t1 B# C
& u7 I H) n. P4 C& n
答案:_______________6 R4 g2 Q/ Q# a/ _" E9 L" W Y
\0 n+ J+ r# Y+ T$ z7 F' i; Q* T4 g+ r5 x
2 C! |. [( ~6 B8 p& n( I$ B7 Z% k3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?8 a& D8 A7 Q5 ]4 u( t" ^, W: k
% S" q: g8 @# \" K3 b- j
A.通过HTTP_REMOTE_COOKIE访问% k; w% r3 M" P# p/ t
B.不可能$ t' w+ t; i+ e6 s
C.在调用setcookie()时设置一个不同的域名+ Q0 n* Z# ~5 G% N
D.向浏览器发送额外的请求
; }! T2 R2 x" ]( A2 m) |$ C$ vE.使用Javascript,把cookie包含在URL中发送+ l# w: i4 Y0 y# o: K* k0 t
2 u T( S2 }) ^0 d5 E* R
' r& [+ b7 T& W9 J0 d4.index.php脚本如何访问表单元素email的值?(双选)2 U" l4 \6 M8 h% h- R4 x
4 j @/ D3 C) b. K5 |5 O! h1 u. L<form action="index.php" method="post">
* I5 M. v8 x0 K7 L9 V9 t9 m<input type="text" name="email"/>
5 k6 Y: Q# P; e3 F, \</form>6 V0 R n J2 b5 K7 A
9 b" E9 j z7 j0 }8 r* X
A.$_GET[‘email’]# }# g; u4 q h3 U5 \, c4 u
B.$_POST[‘email’]
! \+ z; I' ~% e$ u* n, gC.$_SESSION[‘text’]7 A+ D5 ]4 o/ [* l
D.$_REQUEST[‘email’]* X) l$ t7 b% x; V
E.$_POST[‘text’]
9 h- I5 Y0 B+ y& U% F
; G/ ~7 b+ f2 Q0 B y8 G/ Q( @# g. v" E6 [! S
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长. f" R$ J s/ q2 Y
B.没有变化* D; s+ E+ Z* Y- Q8 p5 I A
C.在浏览器上打印该字符串时,尖括号是可见的
; Z1 J- K' @0 P f3 nD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见! }! ~2 b% L, b& Z1 e/ o8 L' o
E.由于调用了htmlentities(),字符串会被销毁
5 S: R! T3 j& ~5 W4 n- e- C+ G* K0 R" w3 i) \
) ~. G6 T# o( G+ C/ f6.如果不给cookie设置过期时间会怎么样?. |: K. f5 \3 y) m! O$ S h
; j9 f- R/ ]# |" @A.立刻过期
$ O$ k0 D) o& |" DB.永不过期
1 n" c K; Y' K) h: xC.cookie无法设置, x- b. u: ]) p/ }3 d' u \
D.在浏览器会话结束时过期
% K! h+ |# t S7 q6 _# ZE.只在脚本没有产生服务器端session的情况下过期& J8 s" Y, f% A
2 t1 p4 D% T( x& n( ?# ]
1 V( s' F `& b
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.什么都没有" V2 a9 l+ | y* L( j5 V z* C* P" V" L
B.Array
7 N" Q6 s+ U1 X- ?2 {C.一个提示4 N# D( r. q% r- R$ H. O4 o
D.phpgreat; Z' l2 L! u, i
E.greatphp
! k- _. m8 A- R2 `$ @) ~# ^& C. U% J- e$ t9 m; F' K1 ]
7 m0 L( J8 O! b6 a, {6 H- K8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?3 R- M/ ?, z y$ R. {. h& t* [5 Y
) E/ T6 z) z, Z- D; o' s
A.这两个是明文传输,之后的信息加密传输# {5 d) \) ~) F/ _: D
B.加密传输
7 b' E! G- o$ M# Z3 }7 AC.URL明文传输,查询字串加密传输
0 M# Z( T* n; Y* Q {# i9 T3 cD.URL加密传输,查询字串明文传输3 n- d3 r! M) A) e' P' f. n# q
E.为确保加密,查询字串将转换为header,夹在POST信息中传输/ l6 w, L( I! k9 O
% e* ^/ |' a+ e& v: F/ R% u
9 ]2 n; d) c9 M# ?7 q9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?# h" S9 {$ B+ ^7 ~4 h# n+ e
8 @6 k4 S$ \- e
A.它们组成一个数组,存储在超级全局变量数组中) g) h- u3 _5 f* S% Y4 k4 D
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中5 Q! K$ `" ]) G: Q% R5 p) F" y, @
C.第二个元素将覆盖第一个元素1 n7 n! P# [; K v
D.第二个元素将自动被重命名
/ {& h- I" d! Z! F, p0 j- u L P7 ^E.PHP输出一个警告
, S6 c& ]! F9 W2 T/ ?& D+ ?, ~1 ?# K+ ^0 g) I. e7 M
7 S6 I% s3 e# @ k10.如何把数组存储在cookie里?
3 ^- ?1 u8 w3 z% d# O
3 p9 L" A% P/ mA.给cookie名添加一对方括号[]8 L: z( c7 I& X. Y d0 X) \2 H% T/ `
B.使用implode函数
5 L0 {- @5 I2 W3 v/ H6 yC.不可能,因为有容量限制
4 }2 m8 V) h. e5 P: J6 y% L1 l4 u9 AD.使用serialize函数
3 g2 }6 n; t% R b6 B% oE.给cookie名添加ARRAY关键词
5 S4 t, ]2 Q5 C7 P7 ^& [
! n9 m6 c: K- d$ a' o* n, i N# R( {: T& z
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
; \' ^$ ]5 v$ ^3 R% o# gB.1234567890
1 @5 ], \ P' r# H5 X, gC.0123456789
3 K t& R. S& }D.什么都没有1 s/ S3 {( X5 h
E.一个提示
, S4 F/ l o9 m7 h6 L. q( {
6 T2 z% B9 \: y9 o( X
5 X# e" u5 g2 p4 N, \, m12.默认情况下,PHP把会话(session)数据存储在______里。. d0 q1 i' U1 Z: h: t' ]
6 U" F/ L$ G# v6 h7 o7 sA.文件系统 C1 b7 U _% G9 Q, U
B.数据库
+ o' |0 [5 {, pC.虚拟内容6 w* @1 G6 |5 V1 h# f) M& a
D.共享内存& N6 t# F) b5 p' c0 t
E.以上都不是
2 @9 d3 E$ m+ _- I, C( ?7 d6 k" I' v; F- V& \. W% H
' s& o( T. Q3 m% A6 [8 ?/ v2 W! ]! x13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)' W) G9 K1 Q. u7 _, B( o
1 h* l" d1 A! t; Q$ F, r7 c: ]
A.浏览器的程序出问题了- N2 l( D2 n' J" J [
B.客户端的时区设置不正确
/ ]% x4 a j! T( M! vC.用户的杀毒软件阻止了所有安全的cookie$ ?1 a) ~/ R- V
D.浏览器被设置为阻止任何cookie
! [# e; t. I7 i+ p) ?) z# d3 V4 IE.cookie里使用了非法的字符, } \$ ?4 u4 O2 T5 F( O
! L7 V+ ?; O' G* R# M9 U- j* T
: m: O" x# B& i8 |9 f$ a; M. u; F) C; M14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
0 R/ D* d; Q% F* V5 s5 c6 T: l9 G7 ]2 A, o& J% \* v4 D
A.1440秒后
/ s6 X1 F" }: g: I) p' e7 mB.在session.gc_maxlifetime设置的时间过了后2 e, r) r8 C; O5 P
C.除非手动删除,否则永不过期
/ c* l$ k9 w3 b7 q4 Q- FD.除非浏览器重启,否则永不过期+ w4 N0 k7 Z+ `0 w5 ^' T3 q8 z A2 n
E.以上都不对, i4 A8 G8 T- ~7 h1 L
2 S- T/ y) s6 ^( I& `# b, F$ J/ `" z9 a. u% s/ G
15.哪个函数能把换行转换成HTML标签<br />?
" E+ Z# \, R) [1 j/ q$ f- D9 s& L- q" |
答案:____________
4 Y* C/ X# e7 c' y1 O S5 I0 g! [( m4 s* O+ f v% X
# f/ E4 k. N. }3 i4 w4 Q
8 j. O5 J3 F7 g2 W* l
答案速查
7 v* f( ?9 c4 E0 v: K1 g1:E
# H* {# x; R! F2:setcookie/setrawcookie" r; g7 s& N& m6 E/ S# p
3:B% I% {& p& d% g9 u4 ]
4:BD
9 z$ D/ s' |& p9 d. H- ]+ V2 ?/ D5:BD6 V3 c1 Y/ ?) _9 k
6:D
g( b; `- K. r3 Z( w5 {7:A0 g0 ]; ?: s* f0 x2 [1 b" ]
8:B3 F7 g O" A! t2 @( M0 m& }
9:C
1 `7 y0 `4 ~0 Q' X2 R10:B* e5 W6 j1 s. m& H9 R1 c% T
11:E
+ k5 E% D' K* a/ N12:A/ t5 b3 v4 B$ [( _
13:BD4 [5 e8 _5 J3 T9 X. @
14:B
# G: ~/ G$ {/ s( d15:nl2br, c, z! ?' P0 p+ i; F% Y4 p" \
% b+ o! N z) I0 U/ ^% p' I
! e, F7 I6 q2 X) t7 S4 p
1 o) h; T/ i; G( `
答案详解# a' e: p# Z+ T! Z/ h, v
$ |) Z1 o- [9 d% h! |* \1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。3 h0 u9 a' J7 U7 }2 F/ r" Y/ Q
8 ?% b* A R& e @. A" K% B
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
) y1 c0 T3 `. q% W/ j5 y
; @. w& M# p K7 c; H! L4 N3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
) }* g, n( m3 c5 ^( M! C/ J, p# M
, u5 j, j; Z& m: c, ^( e4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。. A; V* ^* P9 Z5 _' y) H3 F& ?
- K8 U1 t o* x, y: `* g, V( Z
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
- J1 k. ^( S8 {4 z& \, }
. t$ I1 x B5 H1 q6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。* g: I8 W W) D7 F* x" t
8 y8 S7 }3 ?+ K3 {, t7 |7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。- z, j4 F( g3 i) P- s
& j( H) R, N5 W/ Y2 R( U, e
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。2 h1 D2 o# G: z9 m8 C+ p
3 p& \+ Q1 N( X3 i+ {6 n1 g8 R9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。1 y$ T0 G, x+ U" L5 E0 B) l! V
4 F; R& `& a% i# q* R2 O4 q! m! ]10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。# X) O+ Z5 j5 r/ c+ v
% H9 R9 Z2 u ]: ]2 u11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。( f7 u7 }6 m+ e6 ~! w
2 h" b0 X x/ O* g4 b& v) a: O& j9 `
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
e% y1 e7 m) |* F, Q/ G0 r* T% @; G# y
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。, C. s1 G" u. H6 p8 E5 F4 V, X
1 Z& a/ x, z l9 e c14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。' Z+ }7 f5 S% n; e* A
8 B1 @! l7 T: Z4 I5 V7 X* f
15.函数nl2br能实现这个功能。 |
|