  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
7 ? l4 w# ^, c5 E与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。. ?" U( L4 S1 V" {" S3 Q
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。) ~3 D9 T/ l* k! e: l
6 Q6 z/ X" |2 ~' `/ J
" T( x* ]( m: c( n6 R0 O& X# H4 M问题& ]0 @; n0 o' \' `# [2 ^2 G! G" r
* O" F9 n- p! @1.如何访问会话变量(session)?
- e5 O0 `; b& a0 r; w
/ H* d# i5 W/ w# p7 v' @* rA.通过$_GET& L7 w$ S! v1 M+ Z
B.通过$_POST3 P9 K/ I( `! j* A
C.通过$_REQUEST
* \( E- z; S( c1 a$ n/ ]D.通过全局变量
" \) Z1 V5 ^: { V6 |8 I7 j% D" h& q( FE.以上都不对
# d# R6 y; B8 L2 b- |! ^# p# Y4 m) m$ D& a3 c; ^% ~, X; Q
- F( R5 n e8 T4 g4 z: A% D2.哪个函数能让服务器输出如下header?1 S3 Q; V# z* y* I# [8 a1 m
# P0 j; b% l6 F/ k; [$ c0 ~5 \- `" cset-Cookie: foo=bar;0 R' s/ p' T, N3 d3 O
/ W8 D4 f/ u' `1 H
答案:_______________
7 P: u4 q: P+ \# C" z; H9 v5 s
7 e+ b, ^3 `& J0 d+ f% T2 m8 b% _0 n- i9 v
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
; _" E$ ^2 ^3 H8 `) `
7 g1 K" r/ W! a7 LA.通过HTTP_REMOTE_COOKIE访问4 j$ r2 N H2 N( q$ a- ^
B.不可能
; T5 c Q, f% P6 h. B! bC.在调用setcookie()时设置一个不同的域名
) V, [$ k2 q4 D2 aD.向浏览器发送额外的请求0 ]' y/ J1 K8 n B
E.使用Javascript,把cookie包含在URL中发送
$ [1 O6 _* h" H7 `7 w$ }0 m5 [/ k# M, J. c
6 J; j( I+ H7 {4 Z) m9 F8 T4.index.php脚本如何访问表单元素email的值?(双选)
! H3 ~8 i# E) E9 `, y9 E' d6 v( D* |
<form action="index.php" method="post">
1 O' J% h8 _) c) R( [<input type="text" name="email"/>7 \9 J. x- n% O% G
</form>
# _& N( W! V6 t( p9 J# A) ]' B4 L% m" @
A.$_GET[‘email’]
) Q" T$ y5 }" U/ I: Q. v$ iB.$_POST[‘email’]
% P- j# w9 r' F% e5 g1 I7 YC.$_SESSION[‘text’]
# w4 M$ w$ D' p$ k* o$ lD.$_REQUEST[‘email’]
5 R5 ^; |" t, H: S. dE.$_POST[‘text’]
% l. l+ i0 p* Q9 B9 j* F) M( l9 @
6 b' m* D7 ^9 Y( U1 H e1 Y& B% S8 J( m
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长& X7 j5 T( g# G8 u% W
B.没有变化; ?( y# a0 y/ q0 d
C.在浏览器上打印该字符串时,尖括号是可见的" R9 o# _; G, X3 C' Y
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
0 g& A" g) P- B, u# o4 k. G2 {8 K" dE.由于调用了htmlentities(),字符串会被销毁: |: a A, |- c% ?& q
5 | Y1 @( C% F, n
) A) H! L4 H$ i' {6.如果不给cookie设置过期时间会怎么样?
5 P L$ [8 q$ d& W0 q" Y3 a8 L
: l! [" h( ]$ u0 k, P( N8 |' PA.立刻过期. G# W: u. v1 Y: `' b
B.永不过期- S% d' @7 W% Y7 D p$ a) l5 _
C.cookie无法设置0 ]# ^* H5 `7 K8 ^& E
D.在浏览器会话结束时过期 v7 }) G5 Y( @2 v1 b
E.只在脚本没有产生服务器端session的情况下过期% Y: S+ _) p6 l/ j
b" a, f/ _; V7 e' P3 g0 k9 u0 B
4 T; i s R& f' N7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有1 P1 v5 O1 q& k) l
B.Array
2 [: F* `' D6 z* Y) B! TC.一个提示
( X+ B1 x( L8 H5 F1 ?; o" eD.phpgreat
: @) D* l4 n9 `) ?+ z8 VE.greatphp
" ~- ]9 O E& l% `7 T
* O7 m2 v: Q+ I; E% ^* P
3 m# g& F- O4 ~- O' S8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?6 q' w8 t, H& [
+ r& e& w2 L6 i
A.这两个是明文传输,之后的信息加密传输7 V/ f8 t3 W) A; U n# E
B.加密传输
! a: ]/ \) P6 d- W9 p9 Z& EC.URL明文传输,查询字串加密传输! m( |( V8 |" Y; o
D.URL加密传输,查询字串明文传输* E) s1 s& l0 X1 E% Q3 X7 E
E.为确保加密,查询字串将转换为header,夹在POST信息中传输 d8 ^! W8 v' f6 {
9 f j8 m2 B4 J6 A) t8 _4 L! x) [
7 N6 Z4 A7 s: |& m: D& j# j& R9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?2 d& ^ q! K6 ^8 }
1 ]# a. q! g; c8 @) ]A.它们组成一个数组,存储在超级全局变量数组中
5 Z; R0 A# Q# o; L2 U$ m+ M2 ~# A9 a) ]B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中" A* e6 e: ^7 T8 ? q) B3 _
C.第二个元素将覆盖第一个元素
# ~& `) U# v1 W$ f3 lD.第二个元素将自动被重命名
+ S/ Q3 V- F$ _E.PHP输出一个警告
0 p+ f* c5 A8 q+ v% D4 C' c. d6 @7 n: Y$ u: ?9 N+ _# _
' ]4 I! t6 U$ f) N! ~2 E2 M10.如何把数组存储在cookie里?9 k8 i; E/ S; m' W8 p' M# b
- i5 L! {* {; t! h4 O# B0 F' t tA.给cookie名添加一对方括号[]
2 `" J9 `3 S$ zB.使用implode函数" L' K, s3 o R' D. k1 @
C.不可能,因为有容量限制/ Y) j3 p9 @- a m+ u6 w( G
D.使用serialize函数. Z& V, }, m4 |# y2 h3 {2 d- B
E.给cookie名添加ARRAY关键词
6 O6 m# Q( v1 o: H3 B
2 q9 y2 f0 G8 A3 V; i
& x1 J5 x6 v0 |* g11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789103 U# K A. N2 b
B.1234567890
; {5 A( D- a0 n/ Y _2 ]; Q8 ~4 DC.01234567893 [0 o/ V* c3 b) o5 F! q2 \4 v) B
D.什么都没有& \- l3 d6 o' n3 ?
E.一个提示: K7 L8 E0 A4 @+ j
- Q1 o* |; C9 z( K) ^$ \ H' h: x7 x$ Y% D' l0 r9 l3 z
12.默认情况下,PHP把会话(session)数据存储在______里。
9 R, r; Y2 ]. }% ^. M' I: C8 r8 P. [- P, ]7 i6 h M9 m3 k& }
A.文件系统$ N! V% j7 y1 |: t
B.数据库
5 T4 O4 {) O; }+ F; d# m& \) Z( IC.虚拟内容* A- \3 e/ g0 V- q& M% l: ^
D.共享内存1 B3 s6 l y* m$ c! D" ?4 b% D3 J
E.以上都不是
& C9 ]/ l+ @; B* t3 [" |* A- [- a8 \" L+ Q- o
* y! R1 V. c) C, d* b, Z
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
' O) O$ K1 ^ f4 `+ M0 `: j( g" _4 A3 {6 D8 c$ @ M1 p
A.浏览器的程序出问题了; v# N7 v4 R1 x" D6 {
B.客户端的时区设置不正确
1 O3 D. J' T5 o+ k# Q4 ?* B# {C.用户的杀毒软件阻止了所有安全的cookie( P& o+ Y6 J9 e
D.浏览器被设置为阻止任何cookie* z7 t# v1 \, j+ N- f5 ?: T
E.cookie里使用了非法的字符6 U* R$ \5 f8 D6 r
) m! u$ \0 f" C; y0 Z4 b
' }, ?$ `; B3 ~ Z: g
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?2 h5 I! g0 M1 _& E& M" Y
/ d: j* x, `, L4 E) \
A.1440秒后
# B" z6 U" |# [! G2 xB.在session.gc_maxlifetime设置的时间过了后
& [0 E/ Y+ p+ ~* I9 g% TC.除非手动删除,否则永不过期! r) @4 P- X$ H* W' l
D.除非浏览器重启,否则永不过期6 R# s9 a- v+ f8 c1 f. i9 A
E.以上都不对5 K1 U) e& H4 Z0 ?6 c" u$ d& \9 q
9 u1 g! p8 w. a% o* f; u
) ~$ }+ n2 w0 v5 A" A) e15.哪个函数能把换行转换成HTML标签<br />?; |+ }+ _- x: E( r
' l8 _# J" r7 h& i# P5 m7 Y答案:____________
: M5 E! E `" k; j( j6 m+ u7 R& z" W: x8 H' V3 v/ N
, z' `; K- p: g. e# ^6 V/ L9 l* I9 o) d3 S4 M, b
答案速查
% H# d$ _0 F9 d3 ?; {3 w6 b4 V1:E2 A" |- p/ y- |& p! h
2:setcookie/setrawcookie
- k1 s) t, U2 c. D6 [5 R: L3:B
$ {1 j: c( H ^, C. G: l* I2 w4:BD
# V5 x( L% O4 w* B* t5:BD3 n* x/ p: w, K% p. U
6:D: _. X |5 U2 m0 x) F9 X1 g$ G
7:A! ?0 y7 F' R) Y: h2 t: C% j
8:B; |3 g1 K; F+ Z, h
9:C5 V6 o, C9 y! z, z
10:B
1 W+ k, H" X' g, y11:E5 V8 C! ^6 ]' D* m
12:A* o7 A% I& w- E. x9 f* X9 t( o
13:BD- l/ U9 F, i6 O/ k
14:B
1 u* k2 q9 r! i: {( _$ R0 S15:nl2br
; ]$ a; H" b# |# L$ D
5 I% v0 Q% `' l3 [3 U* R0 i) h7 C0 m0 Z
$ k( V9 F! K! ~: d. W答案详解2 }& H' n! h3 \4 q2 ~8 |
3 K. y& t% v3 M- o0 }, U1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
7 S0 P2 j, `% `, f
* s, z4 _2 r6 v( a/ Q8 W2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
% t5 B8 }7 d: g% E
! N: c7 u8 j B3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
M3 V8 q( o! l$ i2 H& H0 E
2 H$ [) {: D8 j3 K4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
& K8 j7 j0 x. T0 O) s
( k) u$ A9 N2 \: Q Z. E5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。; U2 ?9 C( s/ i0 A# U$ I
+ f! b( l, d2 Y: d$ V6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。% K, c% x- b( C1 A5 X4 ~
( D5 O) b- t# O: q7 V! O" ]0 y7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
6 O6 B: O8 I, m8 G; u7 Z& q3 q" u" G& n) _. b
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
, z4 E" P6 @6 [9 e0 c% e4 @$ B. x( r
# V$ O: `- a( C3 e$ b7 l4 i6 r9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
& K/ n) P/ V1 ^; o9 s: D! q. Y5 k0 u+ b% F
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
* t6 b4 p5 c/ ]# R, v
" R9 y+ B3 S, e) e( t+ H, X11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。6 w& u" i+ N- J9 D: R
% p: b. s1 R& c: L" n4 ~% S
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。& D. I" D" m' S$ g- B8 ~$ _
9 `) l5 [. |6 C7 {/ d- u, }. N! I13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
2 V. Z, _- I3 L# p0 h( [0 ~7 T- _
- \% w# j9 W' h' U14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。4 m. V/ w0 ~1 ?. d9 V
. Y' ^% ?, i* Y9 f6 |0 L+ R! |8 A
15.函数nl2br能实现这个功能。 |
|