标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
[打印本页]
作者:
admin
时间:
2008-4-4 02:25
标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
: f* ~: ^6 X1 K! W2 a* q, s! l
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
2 x6 ~9 J: R4 r& b* R/ O0 r6 D
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
2 r, C4 ?: v7 K7 F
) v8 j& {9 t% N7 v0 a+ Q9 D8 _3 u, k
A1 T7 A, @( `, `
问题
! O9 R" }! ?; \" B9 B
# c2 G6 g9 H% i2 }% ^' E# f: q
1.如何访问会话变量(session)?
; j7 _, R% {6 S' e5 B+ A; A, B
4 n1 u/ Z) E& F6 y1 l
A.通过$_GET
) d6 \6 Q: n, l$ Q
B.通过$_POST
$ D# `3 D) s$ w- D; q
C.通过$_REQUEST
% T0 D7 F& {0 B
D.通过全局变量
/ X8 H7 P6 e4 h3 ?- ]+ V6 a! i, V, L
E.以上都不对
$ n6 [; [+ l( K8 q
3 t& f4 X! N3 B$ |& B- L7 ]) s
3 p1 x9 X2 J1 ^5 Z
2.哪个函数能让服务器输出如下header?
% M$ t, ?+ @4 `1 x* G4 _
/ ]4 e; a+ ~. b
set-Cookie: foo=bar;
- ?6 y3 _1 u; P2 u; Z/ i9 j$ \/ q
( W, v' h0 i( O3 q
答案:_______________
; M3 G" x$ u/ W0 `! a8 ]; N: Y7 C' |( q
! g, w% ^, }* u& K7 q
* r) F5 v: |; J9 L5 N' x5 R4 E" ~
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- v5 Z+ J2 w: V9 t8 ^% G5 K3 B0 P
1 t! h: z' f U& A) L0 o
A.通过HTTP_REMOTE_COOKIE访问
' ~4 K* B" `9 Z7 F
B.不可能
1 y, e3 L8 E1 B! P+ @. i
C.在调用setcookie()时设置一个不同的域名
& b! o$ t0 ~. c# i+ `
D.向浏览器发送额外的请求
/ w! [9 u/ q. l
E.使用Javascript,把cookie包含在URL中发送
/ E* O) {9 L0 U" @7 y
/ x- _1 \1 Q4 ~/ `* p
& W& j. \( _/ i( \; c9 S
4.index.php脚本如何访问表单元素email的值?(双选)
# e9 W6 B' O3 Q1 ~6 ^7 O
) U! A% F2 q. [- i+ q
<form action="index.php" method="post">
6 L2 K( E! L" \! [8 a( u. S
<input type="text" name="email"/>
) p% t3 X3 Y: n* m$ m- O
</form>
' P l4 B [& c) ]
; F! X! u6 u8 F" N
A.$_GET[‘email’]
! H* ~3 [4 Z# q0 ~4 Y
B.$_POST[‘email’]
9 u+ s. [9 D! ^5 J. a. `
C.$_SESSION[‘text’]
1 g* }9 m+ f( e& u6 a3 y/ Y
D.$_REQUEST[‘email’]
( f9 I9 u2 E" u) X; _5 d6 Y- l K
E.$_POST[‘text’]
* W0 r$ I, l; |1 V: H% t0 y# V7 M+ v
8 ^. J4 \9 l C; @* Q; M* k: I
: K5 O( q+ o; S M% e2 D6 O: v
5.以下脚本将如何影响$s字符串?(双选)
<?php
$s = '<p>Hello</p>';
$ss = htmlentities ($s);
echo $s;
?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
7 g) B1 |% }* j, q- X% B
B.没有变化
. a+ i- }- D3 x6 f
C.在浏览器上打印该字符串时,尖括号是可见的
! b2 |/ W w: q9 r) @) A' p
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
6 B! s' Z2 \" ~. {2 ]. P
E.由于调用了htmlentities(),字符串会被销毁
" ?& w' N/ Y. l% {2 @/ g
" X Z5 m x8 X) g) N2 L4 l
7 O/ R$ u C* U; Q2 @" }8 w! Q7 _
6.如果不给cookie设置过期时间会怎么样?
' [& H$ G* R7 k: }& x* H N5 G2 j
: H, y- P5 ?; }# `
A.立刻过期
4 l* R0 `# j U9 N$ n' O+ }1 K
B.永不过期
* a! o% H5 {, F7 ~; [- b8 q V6 d
C.cookie无法设置
! r3 ~9 u, _( }9 z# ^
D.在浏览器会话结束时过期
2 t2 e4 ?( I* d
E.只在脚本没有产生服务器端session的情况下过期
+ B$ V# ~6 l' M2 m$ w/ J7 b) M
+ M$ L1 J! k. e; x& I
- p t% p# Z1 T$ {( p' ^
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.什么都没有
' Q- `. |0 b. A5 W, Q
B.Array
( W0 Y* N/ t" O: p
C.一个提示
8 q3 T: L! x2 s# Q
D.phpgreat
, Q! U" d4 ~! o
E.greatphp
# Y1 o9 ~, p; W! d4 r, Y9 L
3 X! Q; R0 {/ V! w
4 P8 ?4 c; |6 c9 B" q7 D+ N" q$ P
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
5 p/ z8 @2 }6 }- x( v$ _
8 r, n& E* J& @" [
A.这两个是明文传输,之后的信息加密传输
0 @- M6 p, k- Q1 u" o
B.加密传输
+ A3 w* C/ i5 i( z* J
C.URL明文传输,查询字串加密传输
8 v9 Q, d1 `7 x+ I1 `5 x/ @
D.URL加密传输,查询字串明文传输
! f4 t$ O( k9 ~3 C
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
! ^7 Q" R: h0 J7 i
" S% x8 Y/ N2 K+ A2 t* ?
. R4 W3 ]4 T9 H3 p+ F/ D
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
6 ~; G0 ^! i4 T l
( R1 E E! e1 ^: V L" |
A.它们组成一个数组,存储在超级全局变量数组中
& h/ K! f( h# ?% b* C
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
' ~8 v% j+ U N, s6 r9 f) c
C.第二个元素将覆盖第一个元素
* u8 ?' Y6 ?8 q
D.第二个元素将自动被重命名
2 X8 f6 C: |# Y8 X9 h) z. A! i" w
E.PHP输出一个警告
) y' m8 O% j( i. u
' M4 p( }3 c1 f; b
$ C, X; h1 y# O) Y" B, F
10.如何把数组存储在cookie里?
% {: r1 `% W$ W' [9 x
6 J( l4 F* N7 P9 h3 y5 b% H, s, g
A.给cookie名添加一对方括号[]
, }. `/ w a" [1 I( ?; z
B.使用implode函数
8 Z* D; f! A2 `! @& K: M5 F
C.不可能,因为有容量限制
; e* K a' W* O" P; g
D.使用serialize函数
1 [4 S- g- a% a) V5 r
E.给cookie名添加ARRAY关键词
9 ]# _' C0 b3 ]/ Q
9 u* a$ {/ G5 {
, p! S# _) l4 }
11.以下脚本输出什么?
<?php
ob_start();
for ($i = 0; $i < 10; $i++) {
echo $i;
}
$output = ob_get_contents();
ob_end_clean();
echo $ouput;
?>
复制代码
A.12345678910
4 p6 t" b0 Q$ j) Q# H
B.1234567890
+ h; ]! m, Q. g+ V
C.0123456789
h' ?/ E3 D3 \/ { d+ O- U
D.什么都没有
, a. K7 Z0 _# q
E.一个提示
) U% H$ `! D- X1 y- P
( J( F0 A* R; [6 k: e! E. n) E
" i# k* h1 P, z n: }' {$ j
12.默认情况下,PHP把会话(session)数据存储在______里。
0 s' m/ g$ x9 O
$ k7 f% Z. _! P: I, H' Z" b$ p
A.文件系统
& x. p: }$ v& }# j6 N
B.数据库
/ [4 L2 _, o9 R- x5 U' ?% @7 L
C.虚拟内容
" c9 Q* N- e' A
D.共享内存
: R" M' Y; i1 M0 `2 u- Q6 {
E.以上都不是
3 K2 m. k# j# o4 m. n8 Q$ P2 L
( e% V$ f+ P5 Q5 K: s
w6 @1 s6 Q) \
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
* _& j! H; D% @
' @" ]% i% O* ~3 ~7 ~" I
A.浏览器的程序出问题了
. D; L5 t2 H! s+ c' { _3 k3 A3 f0 V
B.客户端的时区设置不正确
2 v9 r- H- c! I
C.用户的杀毒软件阻止了所有安全的cookie
; U R# q7 S4 p; W# _) t7 t! l
D.浏览器被设置为阻止任何cookie
7 p4 Y/ M" m" I& r
E.cookie里使用了非法的字符
4 w2 N2 k B( f; e0 a+ K
# z7 p$ P* B& V8 L" C. u2 K
?, J( D, ?% |% C9 s* X# [
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
" c3 J3 [& n4 O' ?+ d5 I
* @4 E+ A7 @, @, B$ I. V
A.1440秒后
/ Z$ t1 P8 a$ u, F
B.在session.gc_maxlifetime设置的时间过了后
/ D9 p) a& `, B( c+ L" \ ~
C.除非手动删除,否则永不过期
3 L' O; f0 J5 ~' s
D.除非浏览器重启,否则永不过期
$ Z2 @, A( m) D' i+ B5 u
E.以上都不对
2 C7 A. v( z6 i' k9 F7 x
) G+ \1 ?; c+ @6 O1 O4 T& J
, Q/ ]7 d( _8 S: q/ n% J3 W
15.哪个函数能把换行转换成HTML标签<br />?
; S8 _6 X8 Z( l& C" e! g+ B
N. q5 {: W3 y9 s# x0 e3 \, l
答案:____________
/ z% j- A- s. k
( i5 o! J: B1 U" y: N
- I( e' Z6 h3 e
" u- w3 D& b4 ?) ]
答案速查
0 z' o" x7 J8 G
1:E
% |% f/ h' g* Q; s/ t
2:setcookie/setrawcookie
, B3 j! F* }0 Z5 F! G8 w
3:B
0 [( {/ ^& Z4 ~6 h
4:BD
8 a; K7 m& H$ |3 k5 |# W. M) U
5:BD
; g7 j8 U' O9 K; P7 R& T. t7 F# ]; e% u
6:D
! E: {2 N M# K5 J" Y% H
7:A
6 Q& v! s& w5 W: f1 o
8:B
+ f3 M/ X: D: V* C
9:C
" L/ y4 W' ]+ {, v) M: \! J
10:B
- q& [; c: @: S# T/ l
11:E
4 w2 j+ ^. e. a$ S0 t
12:A
! Y) p5 P8 w# n, {; f( t
13:BD
& G, l8 S2 t! w% n4 L
14:B
2 ^' |) G6 G, o4 l) B. i6 j
15:nl2br
M" ~; M4 ?$ `; y7 q+ A0 y( t: S( M
% [/ }2 |, r% B5 G
6 l( @1 L8 u+ p( m9 d+ S
* |, d- Y% D% s
答案详解
4 O- L: a9 P" J3 P. h% x
5 `1 `7 q( m# G( z( W" |$ F
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
3 d `1 n. t! u( [6 A7 v4 z) y# q; Q
6 e$ K: x" D: A3 I# t% r* `' Z
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
- l. Y4 q9 g4 O0 C
1 ]' l. J- X5 Y7 k1 H6 }& M
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
* D4 ^! Q5 d& [- ^$ T6 X0 E
0 h' i2 S! F+ x7 ?- f& @) b/ B' t
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
! C4 c3 a# P2 u' w o* k) a4 v
( T1 P, Y% I$ j; n8 w; l3 t6 V5 c. y
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
. Z5 h* I! ~3 q; ]. s8 j. u
0 s& d9 I ?) l% E# y$ t$ H
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
6 m9 X& c# l' C" C5 A8 c
& I. E! t2 t$ v! z
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
6 [5 ?3 M% W' \
, u/ e2 n" S' T+ Q/ }
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
* K! X l9 L |. y, m: f
4 ]' k2 f! p: T# q
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
4 z: T( W$ x# B
4 H1 v" h" y' [- e2 V/ ]" Y
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
2 M+ m% m7 l& T/ W& g7 M! k
8 K% O9 D5 ~6 ~. ?4 A
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
8 c( X8 q8 Y- `, I4 |+ C
8 k5 u4 M% s4 z3 z. w9 V' } j
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
. H! e' a; r1 z1 j; ~/ K
0 K# v N( n' C' R+ r' w/ B
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
+ T5 [( l5 R# x, \& R6 S0 P
; [# f& u( l2 k( j y3 B
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
) [- K. e g( d* H: b' h
" y6 `4 ?/ j: M1 `; I9 U( @/ ^5 J
15.函数nl2br能实现这个功能。
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2