标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
[打印本页]
作者:
admin
时间:
2008-4-4 02:25
标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
* k* _4 t* E# s, v, q' V$ p( c
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
; ]! O# \" q- j1 U+ M2 E6 r
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
% Y; |" ?4 B. j& [
) f: a/ C* k' w. R% r
9 D L: A* }' y
问题
0 ~/ g6 t I1 E7 L
* k- C! V* D0 }' ~/ X6 r7 W0 L
1.如何访问会话变量(session)?
4 z! Q* c3 B5 P1 v/ u) l* c
1 |0 c# J) S; @ E/ d
A.通过$_GET
|( g9 M3 i- s2 N) h8 E
B.通过$_POST
( b" f8 G: k; A9 ?
C.通过$_REQUEST
; F( M% J0 ]0 U# Q2 K' A
D.通过全局变量
3 ?4 |- [1 O# p% q% g+ K$ i
E.以上都不对
; z3 {( J6 W$ ]3 Z1 K+ m( l$ h
! B, J- J! h% q- V3 g2 Q0 P
1 y F: k8 A% b) Y
2.哪个函数能让服务器输出如下header?
* J. s9 b' ] R6 i+ S9 Z
+ a1 H( }! E# G( O5 @+ J4 Q) W
set-Cookie: foo=bar;
2 _! c1 r1 l$ m4 b3 C- f% j
* x4 a) p1 |1 e' ?, J9 r, w
答案:_______________
4 P% q' Z' M2 v1 N& V, J* O1 A# C( h! f
4 @7 i8 i8 ]) G7 Z( N4 u4 o
F' |8 ` y7 W
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
( P# U$ L, _3 |7 S" L# m
7 \3 x% C0 V/ j2 C! s% u! ]
A.通过HTTP_REMOTE_COOKIE访问
/ C9 ]# m; t5 u; f
B.不可能
5 i' r. L7 P; B( c4 |
C.在调用setcookie()时设置一个不同的域名
, X3 P: `2 ]0 f
D.向浏览器发送额外的请求
" \9 i* J; O, y) B9 `0 R& `( l
E.使用Javascript,把cookie包含在URL中发送
7 o# b. n- ~0 y- l( H4 B( X$ b
( Q2 N8 v! j6 X2 d+ |) A
5 D- G5 I- ]6 y8 T; K$ o6 Q
4.index.php脚本如何访问表单元素email的值?(双选)
; G5 p R+ t7 `: t5 F0 y
1 Q m6 {5 r6 \; f
<form action="index.php" method="post">
- @/ P( ~+ r5 E! A/ j8 @4 Z/ G
<input type="text" name="email"/>
. ]$ P+ V) K/ T' B7 ~4 u
</form>
% Z& h" D" k( Y, R
' \" W3 r9 `8 l% O6 u1 z
A.$_GET[‘email’]
: W4 Q, ?# K% e! ]% r% q; O
B.$_POST[‘email’]
" M% _4 d1 |( w& O# U
C.$_SESSION[‘text’]
6 Y% p6 X' O" e" U p
D.$_REQUEST[‘email’]
+ _/ m) f4 k. C; c+ u) S: N( ~7 w; d
E.$_POST[‘text’]
p. O1 m3 q5 ]" }8 n
: T* C% a( @9 V. W
9 K0 @" n; i, L' y
5.以下脚本将如何影响$s字符串?(双选)
<?php
$s = '<p>Hello</p>';
$ss = htmlentities ($s);
echo $s;
?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
' R/ G$ [- P( b* r7 r; e
B.没有变化
( D6 q; ?; X6 H- ?2 q) |) R
C.在浏览器上打印该字符串时,尖括号是可见的
* {) X' @4 f0 Z9 i8 ?+ G
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
. F$ G( ^0 ?/ }: k
E.由于调用了htmlentities(),字符串会被销毁
- Q- q! W: Q, U# i5 p4 I4 _
" B$ }" p* q' f1 T3 t
3 P4 T2 N; w7 i# p
6.如果不给cookie设置过期时间会怎么样?
# e' A( ?" F2 Z- k7 I
# u6 `; I$ v9 n* O( {0 ^; ~
A.立刻过期
- ?( }) a8 e9 K/ v( E3 a
B.永不过期
4 l" d% s" V; \/ d0 K: y. t3 r
C.cookie无法设置
" |) J( q H( U8 ]" N' |, \
D.在浏览器会话结束时过期
9 c0 c; c$ v; l3 p7 \
E.只在脚本没有产生服务器端session的情况下过期
4 C! M& M* ~5 }- W P
5 |. s9 i/ J9 M6 y
% U; `7 g' X0 U) Z2 @% F- u6 R
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.什么都没有
, I U8 M# x/ R, R8 k3 C2 H* n
B.Array
5 Y C$ ]' J: I1 v4 {: X1 \- E/ T: q) m( r
C.一个提示
6 Q9 z* ?0 p( s9 `( M* z
D.phpgreat
" b5 I$ Q5 k) y2 t
E.greatphp
. I. d$ `3 B7 e- O2 u/ s; B
9 B9 o' M S% O' x
. D# B4 m/ ] A, N
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
) U3 {7 n7 B3 |+ l" _+ j. Y d
$ F( R/ K% t: Q- Y- b z
A.这两个是明文传输,之后的信息加密传输
1 y9 Y9 l% z P6 [) S+ U1 c. d
B.加密传输
; M' l/ V' b/ L3 Y4 F* {; v
C.URL明文传输,查询字串加密传输
7 n) Q c' p, v# q8 s, `5 f0 `
D.URL加密传输,查询字串明文传输
) i$ r* E0 [% t& V/ ^+ ~
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
w. E" T: ]% t: z% z5 u' [, l
' E; Q( a2 D9 E# Y0 T( {" Q R
8 C( a8 S* N' J, h
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
& I! B) P. C9 W/ B( O6 c
5 _5 ^9 p& J2 N3 D& y
A.它们组成一个数组,存储在超级全局变量数组中
1 b# ]" j9 K+ Y+ v# s
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
, F; u& Y x d: B; O# c7 ^# `
C.第二个元素将覆盖第一个元素
4 W$ g, Q$ n& p' U
D.第二个元素将自动被重命名
0 h9 u4 ?5 X: O5 X, _$ \
E.PHP输出一个警告
# y! s2 g0 r/ a4 P- d- s9 W
9 m$ S5 k! d/ y8 v( b
. E$ K8 T- R' @0 l. G) y
10.如何把数组存储在cookie里?
# r! g, p' J& U
* z B* [1 e8 O( r9 \2 Q
A.给cookie名添加一对方括号[]
/ H# ^2 Q/ W5 F# D4 a
B.使用implode函数
( d$ T1 `; G$ R) @0 ]
C.不可能,因为有容量限制
7 h0 S" O# A4 q
D.使用serialize函数
, g& t* g Q5 i- p3 R: O8 V
E.给cookie名添加ARRAY关键词
# B8 O0 E: `* s8 @2 m
( p! ?9 U$ m- l0 q7 m
5 |! l3 j' u' u# N% J" L S
11.以下脚本输出什么?
<?php
ob_start();
for ($i = 0; $i < 10; $i++) {
echo $i;
}
$output = ob_get_contents();
ob_end_clean();
echo $ouput;
?>
复制代码
A.12345678910
% g/ ]0 ]8 T( W% H0 G
B.1234567890
8 \0 K3 z0 o/ D; l p
C.0123456789
7 w0 d" Q; U9 e& J5 t4 E* o! P$ {
D.什么都没有
; G3 y( ?0 g+ t9 M
E.一个提示
9 Y1 d4 j4 R- D2 ~! ~) b. Y/ f* P
8 i% d' ?8 h7 b
4 B$ u/ x' I* a
12.默认情况下,PHP把会话(session)数据存储在______里。
* i& y; b& x3 u
* M$ D+ ^& Z3 N# W6 c( y
A.文件系统
) H( E! a0 @+ c1 K& k
B.数据库
2 }: f4 S6 \: }) ~0 e
C.虚拟内容
2 E2 n/ K! }6 }# O. r7 K* b% Y
D.共享内存
1 v; @; d2 p. i1 Y& {7 M+ c
E.以上都不是
/ ?- t- ^) C. \4 k* E, C$ f
# Y* Y' `/ a Z
2 ?& K. u) E, R8 Y, H* _( Q9 b7 Y
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
" b3 [1 R0 m( ^, D" Q; G8 ^7 s3 p% p
# Z+ e8 R/ A ?) v" f+ d1 E2 B
A.浏览器的程序出问题了
( a K2 P$ L2 ]
B.客户端的时区设置不正确
% W' |! W8 O0 K: }2 ~& q! G0 s
C.用户的杀毒软件阻止了所有安全的cookie
! Z- H1 J, X X
D.浏览器被设置为阻止任何cookie
. h5 a$ U4 M5 M. m
E.cookie里使用了非法的字符
" K9 m# D+ k, T( I+ D. W" | K, _+ b
$ _( f9 n! P; `% @6 G
! h+ Z; Z% N) Q5 y
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
8 b7 ?2 ^; e x. z
# V9 b% z0 y% x
A.1440秒后
% A7 P; H( D8 k( Z3 j
B.在session.gc_maxlifetime设置的时间过了后
t* m! g+ _" z% p
C.除非手动删除,否则永不过期
* X: S: Y0 x2 E# ~7 r1 Q* q- E
D.除非浏览器重启,否则永不过期
( G2 l# E- E% V% C- |8 G$ y
E.以上都不对
. x1 B B+ r9 T: {3 W! @" e
E z7 ?! z# s1 R" M
" o3 e% \1 Z1 i- q3 j
15.哪个函数能把换行转换成HTML标签<br />?
/ |3 z n( i. ~: }3 C) z' J
! _ u- g! I/ W4 }& a! u
答案:____________
5 B* b& c7 l/ u9 T! R
: L4 g5 Z0 z2 n5 A+ t
! k2 ]. j6 X5 X- y1 o; H( F4 W2 K
- B# g J0 |* J" Y+ J; c7 K
答案速查
3 Y7 n0 B. i; Z8 J2 t! w b
1:E
# D+ ^2 A9 J- o1 m1 i$ F( P$ B
2:setcookie/setrawcookie
/ H5 W8 M9 y& V3 p+ M# y
3:B
6 J/ g0 [% d) ]+ {0 o! `$ |/ R
4:BD
9 @+ M$ g6 H. T: k3 D+ q
5:BD
# w" y- T5 L/ H0 ^0 T
6:D
) z$ D$ m+ z0 u: P) K
7:A
/ o/ M5 J6 A! Y" w. s' \
8:B
/ Q* T6 r0 m8 c( ]5 V% b: N& o7 ^" P2 u+ C
9:C
g" | O9 j- { o3 t
10:B
) n9 A4 n$ u3 M; {5 L' x, R& x
11:E
! z: N& c+ B1 @( u- U: N2 ?
12:A
2 c5 R, T& ^$ n3 l
13:BD
7 x$ ?5 M) p3 E2 M9 r; ^
14:B
" @$ {" x( ~4 t( l0 X+ q! ?& o
15:nl2br
7 w( ]$ j* F5 T4 Q4 a
3 s: l4 j( S- O& x& u/ S0 h
- S+ h4 M0 e* A' R
! \) A; g# V) k- P7 s, {: b
答案详解
. r% N! Y' g+ S i
' H: x$ @* i/ T1 ~1 {5 J! M4 [
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
: n+ ^: e9 v+ {: t
/ _" g3 A8 J/ `- @. i# a3 \( q U
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
; L7 _4 c' E5 u
$ G$ g1 b/ A: E. ]3 W* Z0 v
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
8 H3 \, o8 }1 T0 H- N; I8 ]
* t. @, M! h2 b" q7 J3 C
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
5 C# f* `5 Q4 @$ U2 @% L9 G& U
: {% B; }/ j( _$ \, a7 `9 `
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
4 a! ~; y2 T- N1 f$ g& F
8 A" W! _. j. }4 g4 _1 l" F0 c" @
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
" _1 z% p2 C4 m
@6 R6 e+ u) A2 W# r/ l) w
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
; O7 d$ X; E! y8 C1 K
! _3 d. Q- J3 n2 }; f2 n+ Q
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
# ]/ p; {$ L7 Q
6 d6 O4 z; k& }4 Z+ c) J
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
`9 w7 g2 ^+ x! r4 O _
2 M- E8 v5 I; H r
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
7 j$ ~' Z+ w% d/ n! i( y8 \' X2 g
+ J+ J& R5 U" T# G0 h; e
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
: y- E X$ E* q3 b
/ \) D E$ f: |) m; X. p
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
# @7 I& h& E8 i- w, A$ }6 O; ?/ c% a
6 K- E% d* }) l4 g
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
* \ V% B( j% E% |7 A5 z
. g5 q: b: P$ z% A! d
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
% @ ?0 G8 S: a' R6 m9 B% o
( D' x& v! T$ K2 z4 ?
15.函数nl2br能实现这个功能。
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2