标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
[打印本页]
作者:
admin
时间:
2008-4-4 02:25
标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
6 C) z, t: F# k4 U% v2 r# ^
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
; S. X8 T* Y/ G% ~. Q
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
9 O) J, T# g! }. b, T ~
w4 G" i6 q9 p+ `
4 S1 l& e) w+ W6 p) B9 s$ [5 o
问题
/ y/ H, W! M/ w0 |7 _! G$ M* D
0 z# ^3 a% p- G
1.如何访问会话变量(session)?
5 p& G7 P6 u0 s0 u+ _
5 E! q+ R$ w5 y$ S/ i A3 S/ h
A.通过$_GET
8 J: b' K, X/ o" ^6 u7 Y6 M
B.通过$_POST
" i% j/ `/ N; b: \$ w5 e
C.通过$_REQUEST
! S F/ t* P8 {: K9 t
D.通过全局变量
( ^5 m0 g% l0 _# m) _2 e
E.以上都不对
, F4 H- ~" b5 x, v
, }* P& k# C3 L/ t7 f0 L& s
# Z% y9 s$ k2 Q* H$ G# ~
2.哪个函数能让服务器输出如下header?
! h) i6 `1 C P7 M
9 j5 d2 x- O' m/ }. C
set-Cookie: foo=bar;
- y( g; S6 Q( {' d: E4 l+ s
; n* }' s0 L- P, r( O
答案:_______________
# ?& E- X! Z' t q9 c
Z3 _; f2 L7 O8 S" X. J
' B' y$ Y8 y) S" x
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
" _/ X* P+ r6 u/ I/ a
6 K! u7 m2 g5 J$ R: n, |
A.通过HTTP_REMOTE_COOKIE访问
5 ]: h; H/ h4 e* c
B.不可能
! S% K9 v+ F2 X% v( `2 B! h
C.在调用setcookie()时设置一个不同的域名
( G* q" Z4 y5 w, j! Q- [
D.向浏览器发送额外的请求
" ]( H5 }% _: Q9 D& T/ g
E.使用Javascript,把cookie包含在URL中发送
2 q. W7 [8 l* ]; e
% L* i2 E9 D d. a0 z7 `) L$ G
5 L6 Y7 {3 m* n) F6 D: `; p
4.index.php脚本如何访问表单元素email的值?(双选)
+ f1 y; j/ ~1 N) E6 h6 n; o9 w- k8 t
- f5 L0 K1 O6 ?! Z# P9 D+ V( ?+ b
<form action="index.php" method="post">
& G0 m: H7 u, E6 E% G7 A
<input type="text" name="email"/>
, Y$ {* L3 {& e7 u/ ]$ ~6 {8 Y* ~
</form>
- C% x3 Y1 N, |
* n) o; {- P0 C- h% r) X0 j
A.$_GET[‘email’]
( i% f) m/ y' R6 {/ c. h; \# }
B.$_POST[‘email’]
4 c0 I- v/ y, `# f, ?
C.$_SESSION[‘text’]
5 P5 A1 K, Q. \$ }. y6 {$ r
D.$_REQUEST[‘email’]
( K+ H F0 w) a4 h6 `
E.$_POST[‘text’]
P: m% G& O$ C& f2 M$ Q
+ e- p }+ g/ F
$ r! j: w; H% N% x2 n, l8 G6 n% f
5.以下脚本将如何影响$s字符串?(双选)
<?php
$s = '<p>Hello</p>';
$ss = htmlentities ($s);
echo $s;
?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
4 o; ]* j' ^0 X2 R/ M# H- q' w
B.没有变化
0 G6 A; ~( D3 V1 F
C.在浏览器上打印该字符串时,尖括号是可见的
3 A' V4 _* b' M; y# H
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
- G# U4 n4 m9 W) f
E.由于调用了htmlentities(),字符串会被销毁
2 M" C; h6 b3 O, Q+ ]: {4 x$ P) w
! F7 q8 p! f+ G5 E: R: Z" ]
5 T8 ?1 C# v2 t I4 V
6.如果不给cookie设置过期时间会怎么样?
! N/ f& x; k" [2 v3 ?, y
$ ?) U, I6 l+ @, `, L1 E9 S" x
A.立刻过期
1 \( Z, M8 g4 P
B.永不过期
: J' e: C/ H& q2 N
C.cookie无法设置
. |; u3 z. i% `5 `0 g
D.在浏览器会话结束时过期
( C* a e1 d; q+ C0 V$ m
E.只在脚本没有产生服务器端session的情况下过期
: a, b0 d* m& j% }7 _3 w4 E
4 n- M$ G% {" }
4 o; @- V7 M! s( Z4 g% t* S
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.什么都没有
# ^8 P/ g. r r9 v8 T" q8 l4 ~" P& v
B.Array
, T d- J8 b" a
C.一个提示
8 f# L1 c% o9 B1 r0 T F% r6 N
D.phpgreat
2 ^) N# w% H+ q1 h! q: r
E.greatphp
4 o$ P+ m0 n, L0 R' b, S4 f
) Y4 e; E( t5 X. K2 C
# {1 [7 g4 c7 X& } d. |6 X
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
) Y/ J1 h( i7 v. y
( I% w: s- v8 j3 O0 m# w0 u0 W
A.这两个是明文传输,之后的信息加密传输
* i; U2 F. x2 N& J( o
B.加密传输
: l; a' N3 Z% O9 g) c+ _
C.URL明文传输,查询字串加密传输
- F6 E- m! H. |! Y, Z
D.URL加密传输,查询字串明文传输
3 g/ y9 v* l+ g- z1 g
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
& |1 f* n3 G+ h% y
% g3 H6 t" O' V( L6 n- I g
8 r9 i* c" \, d! w& q% Q
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
$ \6 ~; p1 n M! M; x2 s2 b( g
) w% j3 v/ f/ P
A.它们组成一个数组,存储在超级全局变量数组中
' z e9 l2 @% _
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
2 b' y3 L5 b1 R, y* H H% m
C.第二个元素将覆盖第一个元素
7 B8 f! B) D* i$ {
D.第二个元素将自动被重命名
7 ]& w6 D) H1 w4 K& r# k
E.PHP输出一个警告
9 v. n% @( U% O) K# \
6 i6 G+ b- g/ Q: ?
8 ^4 F! P% y/ k a9 G+ K$ ~# h# \
10.如何把数组存储在cookie里?
5 u0 R+ a- z! i
$ j0 W, w; I E% u. a; M) L
A.给cookie名添加一对方括号[]
+ s! H0 f! H; |2 ?- E
B.使用implode函数
" {. j2 i" r8 r& n
C.不可能,因为有容量限制
4 z8 s( Z0 C* k. e
D.使用serialize函数
4 _) r- I0 b- ~. v$ x
E.给cookie名添加ARRAY关键词
- A x; V4 a- C4 O) ^. i; b) `
+ ^- e2 ?& j3 C$ l. T, g
' ]8 V) r, @0 T' S" M
11.以下脚本输出什么?
<?php
ob_start();
for ($i = 0; $i < 10; $i++) {
echo $i;
}
$output = ob_get_contents();
ob_end_clean();
echo $ouput;
?>
复制代码
A.12345678910
8 r; R& W, I! f) X, D( q* c
B.1234567890
6 v5 k* g; `6 [
C.0123456789
4 w1 \3 ^/ n7 i3 T% `
D.什么都没有
Y% B/ R% g$ L' `" z, x6 R
E.一个提示
& {# y' q- q& r1 b$ [. o2 N# e
. U6 z2 d; u5 ^; p
* v+ \( G" a* v
12.默认情况下,PHP把会话(session)数据存储在______里。
* w" N" o8 l5 I5 G
' ~; i7 j2 X/ {
A.文件系统
& W2 S: a) m+ d7 ~5 Y, T
B.数据库
+ q% z. p% h3 N, t1 @1 K" A
C.虚拟内容
) ]: A, w; j% Q8 |' [% T
D.共享内存
$ K* m4 Q2 t! v4 h; j
E.以上都不是
: w! V7 Z. L" E6 r
2 K+ p. |: s& h3 F# m, D
* D: Z3 N c+ X: O3 N& h
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
5 a# _+ o, e5 R; J* `
6 ?# p- u' c0 G* ^" E
A.浏览器的程序出问题了
2 _$ Q" P4 N' I J. N: R2 ~- ^! U
B.客户端的时区设置不正确
/ A$ F! j4 ^) O3 I7 j* G5 g
C.用户的杀毒软件阻止了所有安全的cookie
1 b q+ L2 c8 H, M- `' E
D.浏览器被设置为阻止任何cookie
4 I; T1 n2 {* {9 W8 e
E.cookie里使用了非法的字符
/ x" |8 R" n3 t0 H- L5 y9 n j
% }- s3 h1 ^+ }
]6 a- }& P3 c/ u6 z
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
: C+ N! y7 t' F; e- u
: n& y/ V$ H* W8 r0 q: V0 _& B% [
A.1440秒后
. Y+ [. n% d* v+ u. |' y0 A6 _- @
B.在session.gc_maxlifetime设置的时间过了后
% @% o# v$ l) |( `# b
C.除非手动删除,否则永不过期
- ]$ o4 N' C: p
D.除非浏览器重启,否则永不过期
. ]: `2 R( h$ _- p
E.以上都不对
3 }, P" B6 j" `+ Z6 J2 C' E8 B
2 n. B/ O: {. H
- r2 l9 ^4 g/ C+ p7 O2 i" a5 G
15.哪个函数能把换行转换成HTML标签<br />?
2 s c: X2 M* B0 r+ z' s5 e
. M3 I( n1 u6 w" I0 d
答案:____________
+ b/ x8 C1 c# e/ s
' Z1 _5 B$ J, j' L2 B0 f
+ ^) P p5 g B! ~
) e& w0 F$ K0 y, A7 j6 m
答案速查
# V: D: m) g- {
1:E
2 \, M4 H7 a( o7 W& P# I1 B
2:setcookie/setrawcookie
& l$ X W6 l/ o% A' Q
3:B
8 R6 d1 N- b* s, h- I8 t0 L
4:BD
4 H, o: N O# F2 o
5:BD
; C( \2 ]+ k, {
6:D
6 c: J$ a6 I8 R- ~0 [/ o9 L4 c
7:A
. c4 y+ r6 z+ M, k+ P/ B
8:B
! |8 O/ ~* V& n4 q$ y
9:C
' T( h. L% |2 U1 c- X% r( J
10:B
# A# u9 s/ m; @
11:E
; o, s3 y: A; b7 f+ v7 S
12:A
; n8 S* s4 X F" w- W/ v' F
13:BD
; B6 L; {8 P4 n6 z
14:B
( {) I) ?! ?( `
15:nl2br
: A6 R* L5 ?& |. O* x, _/ M
" B7 }! q j9 I, ~- Y
" [! L7 F3 W' Q
6 P) c/ U) \. d
答案详解
; H9 Y+ P9 t& Y9 s- u
( M c! h/ u5 d
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
, S3 { c4 K, Y8 c$ w! s- Z9 o
. c: e: @0 y5 V5 W h
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
# ^6 W$ v' `/ f0 c( `1 h' n
" `$ ~. P6 \+ \( W
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
4 v) B# X' h% |) R: e
1 i7 \& b( X, o2 d# x9 v
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
! o( \9 z. p$ M+ j# X
5 x( ^7 {% h. i' \( Y0 C
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
o% q, E4 J' }
. v1 A4 b6 ?/ t6 s9 |
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
" L* v7 Q/ `7 U
* Y4 I! u' l- z5 U1 j4 b
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
; n9 B' q0 {0 q, H2 s
& g% g7 d' t) R. F G. e" a9 W* L
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
: W: ]2 R! B1 C5 C& I0 l# _
8 w/ b. x# T, c! Y) U- ?; d
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
% @! {6 Z, F, j( W' @- y, f2 F
4 I" x- N8 H% y8 k6 r1 Z0 W! O
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
+ V* K# G: E, s# M' m! N: x: C
& c7 Q& K5 I l0 k( k
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
# s: `2 u6 m# W" e2 ?
6 N% e6 k! S- O* C3 R7 t6 z
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
+ y# h1 h. X3 r+ K- e: H5 x
3 Q) }1 @/ r( _0 v1 q3 ]0 [
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
7 Q) h/ P3 E0 t2 o- b; v b
1 g0 @# f9 A" G% Y5 W! }8 k+ l
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
' d1 ?7 O: W# G, c9 V
9 J* n \8 X* m- _8 |4 J$ L. U
15.函数nl2br能实现这个功能。
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2