返回列表 发帖

[Zend权威认证试题讲解]第三章 Web开发中的PHP

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。7 K9 D9 h( c3 w/ n' ?6 {
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
* I/ z+ H4 O+ m2 J" s一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。4 _9 \/ A- Q: n- I$ A% U1 v& S
5 L/ E1 L% N7 R  f/ ~
. t( `  \% t8 k% M# f/ ?6 n$ ?! H; J
问题
: B, Q# W" V* H" F/ M' a) M5 W: m% P7 Q
1.如何访问会话变量(session)?8 |" \  v+ C4 V0 o

8 ?7 \$ \% F: U# k- g  ]A.通过$_GET
% h5 I1 y+ X8 ^* T+ R9 N9 I' o+ j  jB.通过$_POST
& X( k/ a1 @2 O) h( m" r, m+ gC.通过$_REQUEST
  @. }4 I* U) P/ f# F" N* H" fD.通过全局变量! N) }$ w1 `0 Z2 c4 v9 y* X
E.以上都不对. B' J, k  t! u; Y

1 ^1 t5 H1 d( _9 h1 c) n" l* J4 f7 O0 f) ~/ a! F
2.哪个函数能让服务器输出如下header?% j& Z6 N) W4 X

) R7 ~' L' k, |7 W: Kset-Cookie: foo=bar;  q$ {* m; a. O/ Y8 M- N3 H1 j6 Z
" q/ m& \. k* u6 [, O* j( k
答案:_______________
* X8 {  I& E: x( P. N. p0 v
' h9 r* I3 Z2 [. J) ~$ K6 o
# d* L8 K( J% k: F$ e! w4 V  U9 D3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?- _7 z8 z7 Y' q! I
& _2 D6 |. [; S- l" |! p& K8 k
A.通过HTTP_REMOTE_COOKIE访问
7 `( ~! x9 Y8 yB.不可能
  b/ s- M, e" r. m+ kC.在调用setcookie()时设置一个不同的域名/ {: I4 M5 t, D) k+ _  e
D.向浏览器发送额外的请求
) C$ ^, S( C8 c. _4 Y' bE.使用Javascript,把cookie包含在URL中发送8 V- A% f( k( U0 n. V9 e

9 H5 N$ g; \3 F" K, A
. H" X* y1 s# V8 c+ y4.index.php脚本如何访问表单元素email的值?(双选)  o# S8 o7 K& Y& u6 C1 A& F

0 k/ H2 q0 J) W7 z9 e<form action="index.php" method="post">8 d" ^, I1 g; B
<input type="text" name="email"/>
7 m+ R% q, b( |7 u: c; v</form>
4 _! G' D# E/ C0 V) L: V. ~1 @9 a2 J$ M+ L
A.$_GET[‘email’]9 Q+ i3 G( o2 T- K9 n
B.$_POST[‘email’]
$ L) _" p4 }" c& pC.$_SESSION[‘text’]  v) Z; j) \! c
D.$_REQUEST[‘email’]
1 T& k3 Y8 p1 W8 wE.$_POST[‘text’]
3 U; j* \8 ~6 e9 F& U8 V. _6 V  R/ b
6 Q  I% {0 N1 D* t% K
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长7 R9 l8 c! K/ l9 u
B.没有变化
+ |- P) h8 W* kC.在浏览器上打印该字符串时,尖括号是可见的
! E; w! F! q' n: d$ eD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
" U2 ^" P8 T8 H# h0 u& I: IE.由于调用了htmlentities(),字符串会被销毁
. O9 ?$ s5 G0 w( v: F5 K* r( x) M6 F6 l8 k4 v

. O, @  u5 N; r3 n8 D6.如果不给cookie设置过期时间会怎么样?
8 p/ F3 z# X- Y" X( B9 ~" r8 Y% k9 g) P: H- ?7 v
A.立刻过期
# ?2 q  n+ {. o+ F2 aB.永不过期, `& E; _* @* N, O0 }
C.cookie无法设置, F+ F+ W. E: n* V+ H0 ~
D.在浏览器会话结束时过期. [2 i" w* Y: L& P' l1 y
E.只在脚本没有产生服务器端session的情况下过期
1 U) w- A4 l; M, E
! d2 J( {3 D! r4 S( H2 ~
5 C( u, [  y  r. i+ L$ C. X7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?

  1. <form action="index.php" method="post">
  2. <input type="text" name="element[]">
  3. <input type="text" name="element[]">
  4. </form>
  5. <?php
  6. echo $_GET['element'];
  7. ?>
复制代码
A.什么都没有) g8 U+ L7 J/ C- J# W
B.Array
2 }' Y4 h7 o' r, wC.一个提示! V  [+ q' R2 A. V
D.phpgreat; A+ B, ~7 Z, `5 N$ P
E.greatphp
/ L/ @+ [3 u. P  K
& a; _5 P, N% f2 `
; x' Q( V, p1 R, h) r/ e8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?! Z/ N. G  K( r. {1 W5 n
- g7 c/ l) Z( v: g" O
A.这两个是明文传输,之后的信息加密传输  h6 w) ^6 E5 N- r. z
B.加密传输
& _. R# H* O9 m( LC.URL明文传输,查询字串加密传输
7 k! I4 ]3 j2 M4 G$ z$ l$ [2 e0 Y" J* [D.URL加密传输,查询字串明文传输
# h9 u0 ^1 u9 _& D% Y3 X, xE.为确保加密,查询字串将转换为header,夹在POST信息中传输
7 d, ^: e2 d/ N2 `8 M9 F; k6 L1 p3 I+ V0 M( o; Z) v$ A$ x5 I/ ^
* d- ]$ n' ]/ Q, |% F0 z
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?: w& G0 Q& a/ {0 W# u

7 u9 }7 Q& n& r% |" _- H  sA.它们组成一个数组,存储在超级全局变量数组中
$ \  |$ {: \5 f8 g" u5 rB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中7 h6 V" T1 p' e1 ^1 H, m+ U
C.第二个元素将覆盖第一个元素8 r0 y) }* {+ A4 Y& E- V+ v& O
D.第二个元素将自动被重命名
' o- W7 p- n, n. l' {; w) R1 IE.PHP输出一个警告
6 @9 h& b- A- W$ e- ]3 L/ ]
! \5 B7 }: z9 w3 m1 Z, ?1 F8 }, O8 Q9 x7 F% k
10.如何把数组存储在cookie里?
9 W  G4 j% c' g+ A. d  U; r4 \
! S* i/ v* X' o1 ]" nA.给cookie名添加一对方括号[]
4 v4 X( y# |5 w9 d* \B.使用implode函数
" w8 X( C% r; H' b; U% p+ ]* X; gC.不可能,因为有容量限制) Y" A' ~/ H4 c% S$ {$ ^3 {/ ^3 \
D.使用serialize函数
  z- q1 U. d4 g: jE.给cookie名添加ARRAY关键词
( w. s8 ]$ T/ Z
! R; a* Q4 d9 b3 z1 r( E" A7 d3 o* n) z: Z/ Y$ {! @' j7 y
11.以下脚本输出什么?

  1. <?php
  2. ob_start();
  3. for ($i = 0; $i < 10; $i++) {
  4.         echo $i;
  5. }
  6. $output = ob_get_contents();
  7. ob_end_clean();
  8. echo $ouput;
  9. ?>
复制代码
A.12345678910& ^: `% s+ r/ G
B.12345678904 v( o7 J8 J( G3 I! B
C.0123456789
  u4 _6 [/ x1 x9 \/ r9 hD.什么都没有
. j( L3 e. C6 L' e9 N0 wE.一个提示
& F' i" N! H+ \7 \1 O. v2 c
7 {1 I, z! W) v+ \7 c, [5 U( e- O4 s2 \) I% j1 j+ r
12.默认情况下,PHP把会话(session)数据存储在______里。8 e3 p6 a# H- _- _8 \& y. n' u
' ?! b  x, y! Z2 s& e) f5 }
A.文件系统
! n) V. }% w! `0 m* W! |, yB.数据库
- a- i" N& A: ]. ]C.虚拟内容5 p) {2 L* j. K" a6 y6 i) S
D.共享内存
. P4 N" N  }3 [) h7 @: _. OE.以上都不是
# ~' c% t+ O7 |- t* J( F9 K+ R2 e5 V# j$ k# h
5 |( p$ A9 K! B% q
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
* a7 ?4 A$ h; r/ ~4 G  L$ A6 Q
A.浏览器的程序出问题了
; p* |& K: P: H; k" S1 G& tB.客户端的时区设置不正确
) b- n' y8 n4 A4 zC.用户的杀毒软件阻止了所有安全的cookie
% c9 P% e9 q9 O2 FD.浏览器被设置为阻止任何cookie
8 `( k; G8 C: o5 W) z7 m6 N9 rE.cookie里使用了非法的字符
( J& n; X4 V+ k: J2 o% g- R1 e/ C
+ J  f/ ?$ t. }6 P; }+ ^5 R' n( R9 x7 w6 F0 d
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
% K+ o7 ^2 w/ h
" g6 p7 h- W% R* L% s. \A.1440秒后5 |  S0 L/ v1 R3 \8 U5 ?! D
B.在session.gc_maxlifetime设置的时间过了后
7 Q% S* a3 ]+ C& B: p) \8 GC.除非手动删除,否则永不过期
2 a! I. R& |* z* `0 E. H- bD.除非浏览器重启,否则永不过期
# i, O( y: b7 wE.以上都不对/ X- X3 j3 w6 N4 a" a2 j

. N8 `; U; p; c8 P
5 ]* h' ]$ c* _, f15.哪个函数能把换行转换成HTML标签<br />?
5 w" |8 O/ q, H: v6 D+ g8 Y; Z. p7 m# g% K- X" i+ S$ |  [# K
答案:____________! ]9 T7 C2 n+ \" |$ F1 W& _. ~

5 C/ f7 n6 j+ x- v' o. s* L
, G6 v% ]4 s& }* S1 F  ?4 d9 n$ x2 o) o  s
答案速查2 U7 b% y" M0 u- Q% Z0 H% D9 }
1:E! r. H2 b3 G, j! e  f% g
2:setcookie/setrawcookie0 y% I& L; i% z7 V3 \0 d# m, I
3:B
9 V' `, k; `! |, T& E* s. a9 c4:BD
% E1 `% p2 L; d  L$ H3 S5:BD! u" S  u9 g; S) l" I0 [
6:D
- X  x% B& H* o. M% C7:A' Y) P& y9 k1 ~' h1 i2 s
8:B) ~; `& Z4 W( E4 q/ r: X( w( O4 N
9:C
9 r, P4 a7 z+ \; A10:B0 m1 }- m) u. r" e- {/ R7 }# k
11:E
5 {0 Q5 W6 Y% B% E, m$ B12:A) i0 V, k* Q# Z5 n# ~
13:BD" p/ p' g" x0 V+ l4 T* T! W$ ~
14:B: D6 O# [8 N1 i; Z# V" V9 b
15:nl2br- d  l+ ]' \( V
* g4 Z. n( h1 K4 G
" R1 ^# F2 j6 N1 X  E' u

. h3 V  }9 H) j1 ~- o2 E- G( T答案详解/ I" F; d: |0 d9 X/ Z
1 J; E0 {+ A4 l: {" e9 \& _; F
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
* c7 h2 S: m: u5 q: s2 ]& h. d% ~  ~* _
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
; P0 t/ F- r4 x8 T( F6 n; y# {# I5 |1 Z5 H/ J
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
: G6 e, t" v4 b3 W  w8 J# ?" w
2 [$ B# s8 A$ C0 Y4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! R' {; _4 O" J
$ x8 H) a$ Z; e. i/ \  B) L4 S
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。2 y4 A* {& w8 V  B* H& j- ^

( O7 b' Y' u/ {  ~: T9 ~! }6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
' p. z" I! O2 m( y$ d$ i0 G8 h; X" j& K& b8 u7 W* J, d* X' d
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。; t; [- `8 r* ]. ]& C

; E. o+ M, \" }# W9 w% Z8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。4 b# A; D) H4 }& F

- ^6 p5 @$ L) S/ ~4 {1 Z9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。* |! C( p$ h0 z+ t$ R* f
4 r" ~2 u* V& h1 Q1 Q; b' @+ a
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
* |4 T8 E+ Q% }7 c: M- T5 M( E# {) r2 n# E% k
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。" C8 M" m* h: W2 {

% Q' |% ^7 L+ k" R4 y8 Q12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。0 c3 z* O* L4 `/ x& m8 Z

! E' \6 x# G& k4 F1 R13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
! R8 w; t) J$ Q# E1 s8 R& s5 b9 C+ D1 G# l1 B! o/ V* D
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
+ s9 I" d0 N9 w# |9 K& d4 `1 U
15.函数nl2br能实现这个功能。

返回列表
【捌玖网络】已经运行: