  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14161
- 金币
- 2371
- 威望
- 1647
- 贡献
- 1319
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
* C: b: y& X D# s% c" y与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
2 ^6 S' I/ B3 I一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。( s8 R: k2 t1 _: ~ I; v( f
: Q+ u# F* p# j3 K2 P8 Y
0 B/ F6 H) D" b3 n: B3 U; H问题
$ G# T j0 Y# Y' U9 J. v6 d6 ?) u+ s A, }: J* P
1.如何访问会话变量(session)?
% S% N, B& c9 y: n+ |2 P" H
; \4 @: [- z9 c( l: zA.通过$_GET. Y' j2 H8 i5 v
B.通过$_POST
?8 @1 C: U2 @) v, e9 j" VC.通过$_REQUEST
6 k; M& W2 F- I- oD.通过全局变量: ?' \4 o% d7 {
E.以上都不对! N( j1 ^; c$ c0 K$ d7 k3 K
. w- d2 E/ v- F
, v/ T8 {' U+ U9 V8 N- |( P2.哪个函数能让服务器输出如下header?3 E) T, u+ u' a0 o% h8 b. W
5 j6 Y5 ^7 M& S3 B# E+ A- h" Y
set-Cookie: foo=bar;
' L% S2 t0 [5 A! w% M' N" K) S: V% {+ c: ^( D+ F+ Z* j, |
答案:_______________5 g, [, X9 V' h4 @& B5 j6 f
) a6 X9 W! p2 S2 `! ?" K' @8 c
N/ p# O4 M! g( W3 y3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
2 [4 i g6 c3 h$ [8 h, l+ e2 m( E( S, ^
A.通过HTTP_REMOTE_COOKIE访问3 `1 ^" K! r8 a, n8 q8 S
B.不可能
6 X1 j, @ A- [) J, O8 e, SC.在调用setcookie()时设置一个不同的域名5 H' A0 W' h4 V2 a# D6 I
D.向浏览器发送额外的请求
) R; X8 w3 u2 u# SE.使用Javascript,把cookie包含在URL中发送
: M7 g# ^% r% \. L" U9 q% f& U; T9 X: _: p- a
! w6 ^) A& `& t1 s Q4.index.php脚本如何访问表单元素email的值?(双选)
& }$ K% M8 U% E J/ \4 C6 P$ p R/ _0 Y4 Q; B* f7 n" S
<form action="index.php" method="post">
5 O; C, S* c4 h% T7 N1 l<input type="text" name="email"/>
5 h! P4 F* b9 \, E( o- ^</form>, _7 `1 z8 v' S9 w+ n
V! @5 J7 _2 `; vA.$_GET[‘email’]8 m W, I, p9 Z, C8 y2 L1 z
B.$_POST[‘email’]
+ u- w9 O2 u+ ]" BC.$_SESSION[‘text’]
6 Q9 j* `5 h- |2 aD.$_REQUEST[‘email’]
9 j5 {* h: I" x Y \' cE.$_POST[‘text’]
6 [5 ~0 N+ {2 a. t" h5 ?, ?0 E/ k# S0 K& O" \
% @0 l0 c' z1 \$ H
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
' C0 W$ k0 p$ c: NB.没有变化
7 J2 L8 H/ k+ J" y* YC.在浏览器上打印该字符串时,尖括号是可见的2 ~5 {8 x) M* N; E- C. G0 Q
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
2 ]/ v P- M5 y/ M! LE.由于调用了htmlentities(),字符串会被销毁
( k- A* R' ?1 V5 M* U; q) o1 I% ^
: ^* G8 p" M3 u+ A, z* N. O, i8 }4 l& e+ J5 g: p/ A/ A9 I/ I; H) x
6.如果不给cookie设置过期时间会怎么样?
# v @2 _0 c' O1 E J
' o% J3 q3 q% Y& l. a! U) ^A.立刻过期8 @9 m2 H3 a1 T0 [
B.永不过期) d$ T4 `" |0 H, H& D4 @
C.cookie无法设置9 q. i/ Y. z5 r+ _
D.在浏览器会话结束时过期
' N/ {* T7 R/ _) fE.只在脚本没有产生服务器端session的情况下过期
/ I. o: Y! A& i- P8 g v3 i% U* ~6 `, r/ ^* S3 d/ o F2 x5 a
" \6 G( a; E m% |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.什么都没有% \3 K/ l# H/ u/ O
B.Array
a& v4 |& H4 X; |( S+ SC.一个提示
1 E7 r, Q( ?8 I9 u) k+ jD.phpgreat
: d9 w% O0 ~+ K3 A/ j# ?. UE.greatphp6 F: e# B5 z& ^# A$ f2 b5 }. ]0 o
* x# y4 p2 { k f: Q, u5 o. U1 V0 k
: Z6 Q+ |" X( z1 B8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的? E! O9 W: X- r7 k: Z5 h
3 p1 d8 x! I9 ~5 [# m+ K# kA.这两个是明文传输,之后的信息加密传输1 ~7 f- `1 |% f/ o
B.加密传输
' i" u2 }, d2 k, C2 mC.URL明文传输,查询字串加密传输
/ P6 e8 D" ~3 R, jD.URL加密传输,查询字串明文传输
+ H% w( M8 o+ l4 _3 LE.为确保加密,查询字串将转换为header,夹在POST信息中传输% o0 S6 Y: u2 { T5 q
! Z8 A8 x9 k" a+ {% }+ f5 M
' S" p7 V& T u
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
. ~1 m( d2 \3 Q+ D5 W/ z: {( A: D% W8 s
A.它们组成一个数组,存储在超级全局变量数组中* G0 Q8 C3 U. d* j9 t
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中' ]3 h8 I$ S+ }) }
C.第二个元素将覆盖第一个元素
1 F" S) I3 r) ^$ Y" Q4 DD.第二个元素将自动被重命名/ r9 s! M4 ?1 |1 u$ L$ L. ]
E.PHP输出一个警告
' F# s1 |$ f, M E' O8 Z* C6 h8 x7 x& I6 s$ f% J
; W9 H: Q k1 D8 o0 E
10.如何把数组存储在cookie里?
8 r; T1 P! {& V9 ?8 @; B$ @' ~! G$ |, R
A.给cookie名添加一对方括号[]
- ?8 J! m& I( g! @' RB.使用implode函数# n6 l- C' t% ?" T) V
C.不可能,因为有容量限制
/ ~% s9 H. }2 @& S- zD.使用serialize函数
# t* n7 i' Z& B6 _/ CE.给cookie名添加ARRAY关键词
2 }/ y* S. e- g+ s, m7 a) x$ \+ n: r' N s& `
Z+ `/ C9 O7 p) [# Q11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
' R. [5 T: L1 [3 ^& M- QB.1234567890
: M" N2 n5 J4 r: PC.0123456789
2 P C$ S& j& Y+ DD.什么都没有
$ w: J7 a0 r8 p, @/ ^ CE.一个提示5 b" k% ]& A! {. i* \9 L
/ H Z& N( _8 ]: y- m
9 I T3 ~) F8 d5 V$ L7 w) [12.默认情况下,PHP把会话(session)数据存储在______里。0 c, _) r4 }/ Y% _- Z
; q5 |/ C$ S# Z
A.文件系统; D, J4 z6 v* G0 Y- `7 R7 U
B.数据库
& `6 c& O3 V& w+ iC.虚拟内容
2 o) t0 M& O) E# j4 wD.共享内存
/ e$ h1 S: q0 U, J; L% \E.以上都不是' E( Z1 H# H6 }4 g6 v
# J8 V* v! Q$ m# C% O
7 G: F: D# \, {* Y' E. o2 |. Y13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选), c5 A2 S6 f- m7 k
* q/ h9 n5 s/ g# [8 Y$ _0 s
A.浏览器的程序出问题了3 K7 z7 J7 f' D+ t
B.客户端的时区设置不正确
3 Y6 ^! e* R: A# Y2 [- s. aC.用户的杀毒软件阻止了所有安全的cookie. K( G7 J7 r2 f' R8 }" ^$ O
D.浏览器被设置为阻止任何cookie t" j6 B b. i# A$ f7 E, q4 c" s/ h
E.cookie里使用了非法的字符% U( v1 U! o5 T1 Y# E0 F
% S; n, `) M1 q% C A' Z
* c( [: L J# C' h6 ?/ w
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
, } W. W8 i6 @. t/ G& t! L0 o
& k$ X& }' m. N( V# v$ B& J& N$ \A.1440秒后
/ p7 z. n$ C) E$ D1 j: JB.在session.gc_maxlifetime设置的时间过了后$ a; I: S4 H x* e& A& }( @
C.除非手动删除,否则永不过期% a$ Y# U" k* L1 A$ b. K
D.除非浏览器重启,否则永不过期: V3 V4 T5 O @3 B8 o3 [
E.以上都不对
5 h/ b! [+ A$ _" [* C0 N
; N+ o: D- [# W2 l( J2 W7 T! r% I/ U
5 _3 a( |8 t5 d, t15.哪个函数能把换行转换成HTML标签<br />?1 O1 b" }/ }+ B8 x
6 t, N$ {. \" \& Y答案:____________: r/ g8 c7 R+ Z8 f9 |/ x
- c% \0 k7 ~; A/ F
2 X$ H; r# |, j; S0 _# l J# E% V1 J) z8 C$ O0 I; x
答案速查* G6 E5 x9 o+ B* w3 C6 r9 y& e
1:E
; g2 t, }' S$ i0 f `1 x: f+ B2:setcookie/setrawcookie
# \" i! G- S7 i2 ?3:B: x$ j; ~( c7 z
4:BD
; h$ a7 B9 d+ |1 K5:BD, Y) B+ D" g) f9 j* y4 f& U n
6:D% s# W ?% q! F: ~7 D! J
7:A5 k$ }# Q- [: b+ V
8:B
5 ~. V; U. \& c* l% m D. o2 z9:C
3 ^! U4 i/ m, f' M10:B4 x4 d* C# \% a& }2 K* K* n
11:E
) {8 z+ ]5 a6 B0 E$ ^8 R12:A/ }- B9 }) X+ v( W5 J. I5 j
13:BD5 t# W# }$ w& ^, u+ S% h
14:B7 c9 p- Z1 X$ t- b5 D' A
15:nl2br
9 {& [; D ]% a3 U+ ~$ |" }- k) z0 a" H k. p# L$ b
E, d3 h' z( d* H6 Q( H2 d
8 h Q1 A4 n9 M9 F答案详解
1 V) m( A+ O: G: E1 O
; f' O5 S' _" Z1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
; c( f5 x2 o5 I: c/ }! f0 m4 }6 t+ v, n e
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
y! Q2 `; l5 G6 l9 n/ \
5 K+ A' a$ R8 C3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。1 F8 a7 h F. L, b; k
- N4 U& s. w* D9 ]% d1 X4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
- w+ T& G2 W9 C: O$ Y: J
/ Q4 m/ O6 }& L3 k" B5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
7 T0 Q9 t: l3 H& J7 b& w% y" N
- T( s7 u& M, |) Z! o) A; X6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。8 Q$ D+ }+ S& {
" {# k- p6 N* v! B3 i+ I7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
2 h5 l( Y5 |- W( Y# y* q8 }& T6 P6 R- J6 G$ M$ P
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
* V; S+ d4 W0 R% M" J3 |$ H: ~
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。) p, O! F. F% J) i/ F' `/ g
, q: [; _$ [! r+ Y( M1 W10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
( V0 u3 x. n. E! O/ h; h6 D* q& b \- v+ O& V$ g1 d& I6 S) D r* }
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
3 Q% d4 Q3 e$ G; |+ X9 q9 t+ A0 a. S3 E, H
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。" f' W+ ~+ z9 U3 I3 Z( L
* Z) k [" x# L+ K; F) C% N
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
# o6 v8 i! c) c2 ~! V0 H& M1 O Z9 ]% s/ O3 q/ X
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
- g# {4 u" ]" U" [9 B1 x2 y3 v) L% U4 _- C
15.函数nl2br能实现这个功能。 |
|