标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
[打印本页]
作者:
admin
时间:
2008-4-4 02:25
标题:
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
; n% S9 s7 N5 V+ N* k
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
% @& u- L$ r) h! Q
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
0 t0 y9 I# r5 p3 O. K8 L
6 b, p7 y! S, M: N
+ J" s) e6 ?: N! y# K( `
问题
% \: g5 K8 B t9 v" W" a8 C0 l; [
6 }$ O/ Z" j/ d4 \- S
1.如何访问会话变量(session)?
/ [4 L1 A5 H H5 i/ B- v' }
4 x. Q* t" t7 g4 @4 p* |# X6 n; J* T
A.通过$_GET
$ a" B/ T" E4 D. \# C
B.通过$_POST
0 `( z+ F) b2 c
C.通过$_REQUEST
8 s' B5 T9 ^( b
D.通过全局变量
9 j4 D/ [& F1 U( W# B
E.以上都不对
, n; \& o# h# H2 F& @4 G
8 J( _9 N3 y3 j
' Y1 n7 X2 E& P6 @# M& l
2.哪个函数能让服务器输出如下header?
5 Z5 l/ D5 k; O3 Y9 I" U* X
% B$ v! s4 c- P' V* ~( \
set-Cookie: foo=bar;
9 {; W* K0 e& b% j6 ?
: _$ v1 ?3 R5 q0 S) b: |
答案:_______________
) G2 N% C2 b+ m8 s
) h6 b% A: X; P# X% h, ~
7 D3 J" h& V# z* s" L/ W* l2 `0 a
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
1 d, [% n5 g. Y8 a/ g
, q2 ]% T% {$ j2 D% h, l
A.通过HTTP_REMOTE_COOKIE访问
0 _+ _4 y3 \ X# M! h
B.不可能
! O# {% [, O! H8 {
C.在调用setcookie()时设置一个不同的域名
. A) F6 J8 A% U
D.向浏览器发送额外的请求
/ ?: L7 w8 I8 v8 [
E.使用Javascript,把cookie包含在URL中发送
5 z( I% ^& X# b8 N! J, S
/ K, p. j5 T6 }; E* u6 X
8 M- i. j! x" ?/ \8 B l
4.index.php脚本如何访问表单元素email的值?(双选)
* }& d$ U- T* `0 u, ~3 a
3 m+ M$ Q8 S; m$ p! ~$ Y/ f
<form action="index.php" method="post">
8 {4 x# z/ o7 M& l: q
<input type="text" name="email"/>
& v8 C* `8 }8 ?" W7 Q+ \
</form>
- u; e9 T A: h1 r% C3 y# q
9 o+ }/ p8 ]: Z5 Z- G+ x
A.$_GET[‘email’]
/ {5 {' S( }& d9 k7 v) `/ u2 G
B.$_POST[‘email’]
" o9 F' ~) X5 ?- k
C.$_SESSION[‘text’]
8 A* z, H2 o5 E9 G, Z
D.$_REQUEST[‘email’]
* f- T4 D4 I7 N' \+ m1 a! I% h; u
E.$_POST[‘text’]
* P* e! A+ R n
- H0 H! l! ~0 i6 u: a. c0 i1 u$ g
, H: M( ~$ B5 Q9 h' N
5.以下脚本将如何影响$s字符串?(双选)
<?php
$s = '<p>Hello</p>';
$ss = htmlentities ($s);
echo $s;
?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
5 W `( M$ u8 ?6 N
B.没有变化
3 Z/ U2 S) E' V
C.在浏览器上打印该字符串时,尖括号是可见的
' H; P& H7 \: x8 f$ e3 h$ o7 q" e
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
% g1 f B2 S. _* q- o
E.由于调用了htmlentities(),字符串会被销毁
) `; w. F" n$ l1 f; s3 X: P
1 d9 Y2 ~5 k! H
) E/ {0 \; `% @% I
6.如果不给cookie设置过期时间会怎么样?
0 U1 Z$ d4 T% |9 e/ r
- H3 C3 d F( `1 Y9 k9 }" Q( c
A.立刻过期
8 x8 q w: e- k
B.永不过期
, Z* C4 d* Z! N, ~7 w
C.cookie无法设置
c0 ]9 f, _: P
D.在浏览器会话结束时过期
: ~/ L' _( p+ J( c/ N
E.只在脚本没有产生服务器端session的情况下过期
E5 {% R v: Y4 F
! A! T( f# Q- h9 i) h/ y0 E% F" B
) M$ c( t9 k5 \# E" R2 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.什么都没有
1 Q/ ?1 W! u# D# E* {0 ?: e+ r
B.Array
; J, ~9 @( a6 j4 N: o$ b
C.一个提示
) T& {' T% n* y, {+ K8 b6 q
D.phpgreat
$ T5 }- |/ \$ U. M9 Q9 v8 C
E.greatphp
9 T% T/ }* @ M, j
$ j" w1 m, j6 |" d6 h5 ?6 _0 X6 U
{& U! p' x$ f/ t
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
/ e+ a* @1 \) v: d, {1 o
& h! _4 |3 e" H/ Z n) L' N
A.这两个是明文传输,之后的信息加密传输
! N% w- `+ w: h9 Z* M# j
B.加密传输
* F/ }' j1 u2 K, K) Q
C.URL明文传输,查询字串加密传输
7 O7 Y+ J4 u1 I9 u
D.URL加密传输,查询字串明文传输
7 |4 h7 C' s6 y& E% Y6 G0 b
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
0 E7 E8 v) s0 c1 t) @' g
6 R. Z0 m. M. \ M
( g( |% J" Z: d, f y3 T% J! _ O6 o
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
: M" |* u* ?- U' z: O& p
Y0 R$ H7 D, L4 i; C- I
A.它们组成一个数组,存储在超级全局变量数组中
7 @% Z. O4 ^ \: h
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
0 g! N2 h3 M; d* x& ]0 s
C.第二个元素将覆盖第一个元素
+ V7 c' j) n! n4 Y. W1 H2 g `) B
D.第二个元素将自动被重命名
! v2 j/ w! [8 d& B, e: B: E
E.PHP输出一个警告
7 `( s, V5 U* T) e& e
- Y! \2 w) k, X( F& B. |
/ C/ O5 } C5 s$ W& K
10.如何把数组存储在cookie里?
" ^ H) T0 z0 @
: G4 n( Z# O, r0 X& J, g, B
A.给cookie名添加一对方括号[]
: j! B& j- P3 i' y9 b' o2 R" Z7 U
B.使用implode函数
, o" m5 ^" E" X
C.不可能,因为有容量限制
6 m$ J. d2 w, ^: G$ m1 Q- H3 t
D.使用serialize函数
; K, s8 `" X9 Q; b: w
E.给cookie名添加ARRAY关键词
" G* `% D! A$ n2 @; @
$ P0 }3 { z" A- a; {/ H, K' {* l& I
5 n0 ]0 e6 a! E3 A2 X& I9 N3 c
11.以下脚本输出什么?
<?php
ob_start();
for ($i = 0; $i < 10; $i++) {
echo $i;
}
$output = ob_get_contents();
ob_end_clean();
echo $ouput;
?>
复制代码
A.12345678910
! t$ \. R9 m% s
B.1234567890
2 P: {8 {) W3 \7 W* v. [
C.0123456789
. C2 I, J7 B* D# X T" u& |' \
D.什么都没有
J: k/ D( v5 O2 Z2 {/ \6 S, n( S9 R
E.一个提示
5 t! ^0 ?8 y: q9 U) b, U& g
5 D. n, f" _1 L i+ ]6 u, K/ z6 W6 [
5 k" U8 ~# k o6 m/ B0 ~
12.默认情况下,PHP把会话(session)数据存储在______里。
$ O6 j) a, f' g9 P& D2 _+ q
0 d$ d# I) A0 u% v2 p
A.文件系统
7 C+ T5 o3 a$ z, i" d4 N
B.数据库
8 ?) }8 X& J! q% [" i
C.虚拟内容
6 d$ ~ ~ k2 l9 T9 f( q. t$ ^5 e
D.共享内存
5 Y) |. z0 o; E, [0 G+ {' K
E.以上都不是
( A/ p+ Z4 S, c# v* Z. a8 X0 u7 x
1 j5 T& N2 V4 r7 i# t! F1 \
G) P- i; N9 F6 q) G9 P: A5 i y
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
$ H9 q! R. }$ ?6 h+ u' h- j; B( T0 G& r
4 \9 L9 ]- B. k" `+ k
A.浏览器的程序出问题了
2 ^- `# I8 p+ a( W; l
B.客户端的时区设置不正确
$ M! H3 _' n1 {& Z. W, r
C.用户的杀毒软件阻止了所有安全的cookie
7 B7 O! Y' {0 M% m# L0 a- j
D.浏览器被设置为阻止任何cookie
0 d& [; n" \& F* ]
E.cookie里使用了非法的字符
# j7 d" |) h2 w% z
" s' M0 ?% G! q
* R5 y. _+ e8 H7 f' r0 u3 e
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
, E0 ]7 O, E2 S) e4 e' b4 G3 N1 j
7 l( e0 ~* r( O) q% S3 d
A.1440秒后
" K- q8 n1 G" H& Z
B.在session.gc_maxlifetime设置的时间过了后
6 k9 H3 O+ n4 |& l2 ?/ W
C.除非手动删除,否则永不过期
2 V: }+ c2 I5 A$ y. g
D.除非浏览器重启,否则永不过期
* ?( [) h/ h. N
E.以上都不对
" g- j' Z# s6 U7 k. G! T# {8 a
$ M4 B/ p: R( e6 F# n/ x
- v+ X# B0 W& N Q1 I" [3 H2 U
15.哪个函数能把换行转换成HTML标签<br />?
* Q4 J5 x; S! j
) z: l+ x9 `/ h* I
答案:____________
N( u( Z7 w R& `2 f
5 j6 ^& X7 F+ r. s- a9 q8 d" u
0 K- k% M& \4 n1 P- i, t' l
3 P% z% a6 [- \. B% c# z0 x$ B: P
答案速查
: K( I, F9 b: A7 z. ?
1:E
& P5 G5 E* E6 x# `7 E$ E" X
2:setcookie/setrawcookie
; ^! ?- Y1 h: m. ]5 C
3:B
4 w6 j, C' G9 h7 y. C: }
4:BD
6 d, B. {0 \4 W7 @/ _0 l9 B2 L, N4 _8 x
5:BD
' r: M% {2 x" s
6:D
4 K/ F% I0 t! c4 U) n: W% c
7:A
5 H( c9 m/ |: s1 m
8:B
$ k; x& x& ]: h; S# a
9:C
/ y8 S; \7 \6 `* E
10:B
" m3 v, D3 i) }2 I% W& K+ v2 w2 x
11:E
; k5 A! t+ G$ N9 z1 U0 k$ |
12:A
* E3 m0 Z+ U) k, D
13:BD
. {: H/ t' ~7 {& b2 U
14:B
; m( P; |2 g5 r1 g2 s
15:nl2br
: }" x/ Q0 H% X4 P% x. J S
1 q' |! P' K% l$ j, `: R
7 s( T( c2 O2 `
7 g8 m8 `# T+ e5 s6 S' a$ T
答案详解
7 r, K$ \. _* m3 a& G
5 u h3 l# H' p3 ~- x
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
8 F8 k$ O, j8 z
+ v! Y. T B4 H1 }+ N1 o8 }8 V: ^0 d
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
0 L U' q% _7 |2 Q7 a
/ S8 Y* M( v; f. R, h' v% v% P
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
. i* W. k& P1 v0 [
$ o( X6 c# u3 H, u% M; ^/ Z0 B& {- @) o
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
6 K& t* s, o: z d/ s; ~
C0 m, ]) ?1 T2 d: a+ D
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
, u/ @! O! K* b
1 `1 \0 s7 q8 b# R. o, ]5 W5 `
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
# X j: ?" e' v
2 T7 ~1 O* D }8 p8 h- D
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
# c: \$ R' {$ A U5 R* N6 X
2 p" I4 ?, l$ V1 Q
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
: s( W8 R& p- K+ B
5 ^# ]. ^" A, {; |* G4 O( u/ Q/ }
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
! @, u! ~) p/ n) y1 I
: g1 m7 }5 o" l: D: O' M
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
5 `- H5 ^' I5 `9 T
8 P& J& V j+ O7 G
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
# G9 c# l9 C6 m* z* O `
" m9 d3 U- y! `6 T6 z% U
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
8 N# o: V( ^7 S! Y8 {7 p
+ }7 V( e& {" ?% g
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
( L0 p3 C3 \4 X @/ _; Q5 U
$ }6 E' ?) G0 i: j6 v! ~# T& g
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
2 A6 c+ w$ B* ~
4 _6 {9 }$ B" t
15.函数nl2br能实现这个功能。
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2