标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
[打印本页]
作者:
admin
时间:
2008-4-4 02:25
标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
. J, g! }6 U8 }
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
4 F7 }7 l7 y3 L0 L7 \5 F
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
: T9 d. j0 y" W3 r, o( k( F
: h; D3 z+ t( r9 K" U- e) v
/ F" H; G6 j$ j
问题
[/ Z' w0 {7 V" b# I5 T% D0 R% K4 j
1 V: _4 S1 p" A- @9 K/ e
1.如何访问会话变量(session)?
7 B+ c, h) O/ E; V9 K
' J! t" N! c' K, @4 E6 a
A.通过$_GET
% E+ v% E* v" @) K; _
B.通过$_POST
* V0 R9 u* V! v8 b5 `+ v5 f, L: a
C.通过$_REQUEST
9 W" K# w+ v ]* k4 K1 }# g7 n
D.通过全局变量
: ^' Y6 {# x& C$ Q& b8 p2 h
E.以上都不对
D. a! `# X) W; v% F7 _" z
$ j% ?$ H& Z% v5 w% M6 R: A# ]6 K
: L+ R. k0 h2 f: b* }
2.哪个函数能让服务器输出如下header?
( J* B$ \, @0 s8 A
8 m. | @1 W* e. U5 j- S1 W5 E
set-Cookie: foo=bar;
! r3 |0 d0 X6 g$ g& U3 D
& m; |% L0 s5 t
答案:_______________
6 j3 O& [' r c( q" S. S
4 i2 W8 F2 e. g$ v2 X# g/ M! B
) I" |) j+ f5 Q. i- C3 \ q6 n
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- G7 v5 T n, |# _
9 T# m" N/ u9 V; [+ o0 D
A.通过HTTP_REMOTE_COOKIE访问
1 z5 K$ P, O; S r; P
B.不可能
% R" e' y" P7 X! I
C.在调用setcookie()时设置一个不同的域名
) m9 i8 l) A- w+ A: r9 Z
D.向浏览器发送额外的请求
) h, o5 `) n. T h% }
E.使用Javascript,把cookie包含在URL中发送
8 M3 X4 ~, g9 R2 Y, O. _
, x- x6 k0 d% \
/ ?1 c- o" R, G$ }
4.index.php脚本如何访问表单元素email的值?(双选)
8 E& ~5 y5 ^2 E' v# o
# r* d) G# Y9 J) B
<form action="index.php" method="post">
. r: K+ f7 _/ I' X+ y" p- W9 a
<input type="text" name="email"/>
" P4 m" p, T4 S1 a \
</form>
, [% z8 Q: l+ r' A+ ?- p& b
Y8 r# u8 Z" R( ?2 S# _( a% u/ {
A.$_GET[‘email’]
* G9 W) m+ V- Q
B.$_POST[‘email’]
. O$ s, t2 S4 ^% e
C.$_SESSION[‘text’]
* I7 t }! W/ ?
D.$_REQUEST[‘email’]
# K) s: f% C q' d3 D( G4 `6 Z5 }
E.$_POST[‘text’]
4 w+ F; p: `" i
7 k! e1 Q1 ?; e4 t$ K; J
5 M, z+ H1 y+ C* j( p
5.以下脚本将如何影响$s字符串?(双选)
<?php
$s = '<p>Hello</p>';
$ss = htmlentities ($s);
echo $s;
?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
/ n# l) }2 F, u" C6 b
B.没有变化
) |7 B0 o8 B: @6 v+ Z. s2 b! J
C.在浏览器上打印该字符串时,尖括号是可见的
, u) y& B- j# P7 t$ T$ l" A
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
9 T5 u; h* @, U- m
E.由于调用了htmlentities(),字符串会被销毁
/ g* h, X: M. [' s0 Y* l
% r2 x7 n2 X8 L; I
$ _2 l$ E( b0 }4 L" \/ J
6.如果不给cookie设置过期时间会怎么样?
3 m4 o" I& x, ^( c# x( e5 w% Q
, T+ B; P3 X1 I. i$ Z
A.立刻过期
1 s3 l& \1 _5 ~- X
B.永不过期
+ ?) A. K& m' B. B
C.cookie无法设置
' m" x: @& G; g* J! P# |* o# Y$ _
D.在浏览器会话结束时过期
" E. t4 g' x7 B) Q# q" A4 |4 p
E.只在脚本没有产生服务器端session的情况下过期
- e2 s$ F8 v/ B; ]7 ~- \ @
8 H9 t7 }7 n; k' A" N; m* b
- z& A+ F7 X0 q, J
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.什么都没有
) g3 A* V S) N* [; w
B.Array
! B$ T) W. Z3 r
C.一个提示
! Y* Y; k& B! {! ~6 C" Z
D.phpgreat
; C7 a, l+ B8 s* A' o
E.greatphp
# [7 h, l3 a1 t2 o/ `2 q
6 Y) X, j* g+ Q9 k, C" U k1 L2 V
$ S. h" l% y8 g
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
0 b! H$ l, b4 R. R! d
. c" O. h) d2 v$ `, E, S
A.这两个是明文传输,之后的信息加密传输
- Z. d+ s9 R8 y( B8 Z- l
B.加密传输
8 j! q& f @0 i# e7 v5 L9 C4 f4 @
C.URL明文传输,查询字串加密传输
8 }0 @2 W; C# f: v; O f' U
D.URL加密传输,查询字串明文传输
; C" A- z _/ p: L
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
* A5 P+ X2 J) ^* b
4 g1 G- w B4 ^ c% r
, x8 R2 a; w" {1 |* W2 ~
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
' D4 L3 o0 k6 C3 P/ \! Z- {
# _" Y% d& T/ I: L& t
A.它们组成一个数组,存储在超级全局变量数组中
& T& Z6 O1 b$ ?4 g
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 y. x" M" B1 ^8 ?1 K
C.第二个元素将覆盖第一个元素
7 \- J. o; D2 y
D.第二个元素将自动被重命名
1 Z0 V& F3 p- F: {' s
E.PHP输出一个警告
: o, |9 W7 R n7 q/ O% D0 a$ F
) l+ g. G9 v1 Y9 {' }% P
; P0 `/ Z9 g2 \8 o$ Y) G
10.如何把数组存储在cookie里?
# i- Z/ l# Y2 ]
4 [/ I' ]0 O! k
A.给cookie名添加一对方括号[]
( U3 v9 z! s# \
B.使用implode函数
+ [4 s, ~0 D! L, V6 G( ?
C.不可能,因为有容量限制
0 h) o) Z: \! `( Y+ Q% z) T7 ]
D.使用serialize函数
+ b4 t2 o- R& n2 {9 H0 f( d* T }( X
E.给cookie名添加ARRAY关键词
3 w3 F( ]1 O& W" G& s7 t# u" W
% g' k: Y7 Z' u
+ `: m% b( V3 Q: I x% }
11.以下脚本输出什么?
<?php
ob_start();
for ($i = 0; $i < 10; $i++) {
echo $i;
}
$output = ob_get_contents();
ob_end_clean();
echo $ouput;
?>
复制代码
A.12345678910
5 h! ~1 O0 h q7 }: l! x6 s" W
B.1234567890
# N5 J( K: \7 v( u0 c
C.0123456789
- l! s) h+ C# c- R$ g8 c8 Z4 ]
D.什么都没有
( p8 Z1 o3 Y6 }$ }5 R, Z3 y
E.一个提示
. |) E' q t. ~. o
6 Q; k) Q5 [& Y+ @
3 {' {% i- v, w1 E+ c
12.默认情况下,PHP把会话(session)数据存储在______里。
. L2 a) m6 ?; @# e4 S; E: G8 N
8 Q/ g8 l" w4 l( U
A.文件系统
0 ~6 ]0 a5 R) G& z. K
B.数据库
w7 U0 w. f9 }% y" L
C.虚拟内容
' k6 a: o: `. F7 w: b+ o
D.共享内存
* J8 u, z" R: m# J( K* q. r
E.以上都不是
% f. T3 M+ X$ z; V+ {4 _ ?' a& W) K
9 Q! I" q9 |& h! s* k
w3 s5 d- d4 G+ a" x
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
8 w& r8 Z$ k8 _0 X
2 W+ @( p! O0 h O* v5 [
A.浏览器的程序出问题了
5 p) E' o, ?3 U& ^: p! z5 C1 B& c6 T6 j
B.客户端的时区设置不正确
4 ~; o, r& C- s
C.用户的杀毒软件阻止了所有安全的cookie
$ J* k. {0 n$ _! {2 p9 G% G% S
D.浏览器被设置为阻止任何cookie
) s2 P4 n: `8 B7 d3 _
E.cookie里使用了非法的字符
' G) M: g. w: v2 \" d8 N9 b
, E S6 C, b4 ]
1 U0 z( D4 e1 [1 C t9 j7 W
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
) R9 P0 k4 n! c; L# v# i6 B& z, B
0 M7 j( u! z: F* e9 S
A.1440秒后
9 g( ]) j6 c& C
B.在session.gc_maxlifetime设置的时间过了后
6 Z! ]$ g0 [" p/ Q; i* j& Y5 P! v
C.除非手动删除,否则永不过期
" F: K0 ^7 V7 E7 I; e' _0 |% z
D.除非浏览器重启,否则永不过期
2 B% S s' c8 Q
E.以上都不对
: o& b/ y6 @; b! {! \3 @. k2 g u( y
) ~3 T. A( ]/ }& w7 Q! I9 U5 Z
; j5 w! I5 ]2 I7 V, j
15.哪个函数能把换行转换成HTML标签<br />?
/ w' k: i& Q" b) m7 k: G$ j
2 `6 L% W3 [* ?: ]' F; q" O
答案:____________
$ N5 [2 u- z' z6 ]& P
. L# J1 R* ~# q6 A$ s# U* e' M) w
. n6 l1 v& I7 Y+ c1 h- v6 y) A
1 T( p1 j q- X9 @+ X) A5 Y. v
答案速查
$ m- d( c8 g- @ L- c* p$ z$ k
1:E
5 g ~8 m+ k3 H5 r! Y& _8 v% Q
2:setcookie/setrawcookie
+ \7 G/ N7 b; U# M% z3 p
3:B
1 g) A# l/ i/ z" F0 v: P
4:BD
2 ^* s( M) W, {
5:BD
: |: [% F* R% o9 W( f, K; F
6:D
3 ?( }( S/ t3 ?# s& J
7:A
+ A; b0 O2 b4 `: C
8:B
0 _1 o2 A' u" P
9:C
7 U4 S* V$ T4 q7 c2 ^1 ~; |! T
10:B
7 P. n: p- [" P. u8 v
11:E
! a2 h$ |, f. ]0 q
12:A
1 Y& A$ y0 B' X! C8 i
13:BD
2 z% _$ F3 v: s0 f
14:B
; d# {8 u5 ^$ z* {
15:nl2br
" K; Q: q0 c0 V: y% `( p. u
F7 i( J" Q' e3 ~2 O
( w/ S1 G! a, L% G7 W
$ D" i' C: \7 c3 `4 }6 E& A
答案详解
/ J& s! ]# L4 d& g3 O
* W, z; g+ I6 |' L* T6 M
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
" d4 u5 y$ f' ]" r6 G6 {, n
* V4 N- ~* m5 R: D T
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
/ T) ]; @' D' a5 ~. y( r
5 t" U$ J: K! S% S' ^& \
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
: p$ x8 N3 B, d' q
0 r) Z7 U6 y9 J' w6 J* {6 z1 M
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
- E7 H+ s: f/ W7 p$ j
2 D8 g; P0 @% e# i' a2 |' |8 p' R
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
* x0 v Y2 g* W2 L* ]9 N2 Y
* t/ ~* D% k4 m i- {0 N
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
7 k! U9 W" Y, |: z" w8 Z$ {
. l1 [6 {( G3 T: e5 [# {3 x; Z8 p
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
V2 c) a9 _/ \4 i4 {
( N$ e" d5 A6 w* x
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
8 S2 j8 j; e. p/ a Z
0 e9 ]) E U; Y9 I$ M4 C4 A
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
7 c% G" N! N$ n) ]1 k4 g
3 \& S6 o3 d9 e& T7 n' K
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
, T" W; S9 V0 W7 o. Z' r
& ]: Y# b. X* G
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
: s. z$ U& n) U0 p: {8 }2 @: r
" A8 y8 A% d2 C$ L! \+ f
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
3 |9 e0 {# j2 b: I
3 _/ C7 `) l3 a& C% z) S
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
2 o* f) V4 O. P, M
) W' u! V# t% u4 C2 }- r
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
$ V- u6 l. }% X' \7 |: S
% K+ G+ L& l2 z1 p0 {5 ]
15.函数nl2br能实现这个功能。
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2