获得本站免费赞助空间请点这里
返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
8 G6 U: J, w% o2 @7 F与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
3 Y) O0 D, F+ B一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。# F$ w. l( f' `8 |( [+ U2 y# a
5 \9 _3 ]3 W- b
6 m: V  `* w' d+ w. s; z) Y6 i
问题
3 R  p) C1 l" h% D, W" H
1 j# T: Z$ t  ~; G1.如何访问会话变量(session)?; L" J" M9 H1 h' V; K2 ]

* g1 l! J; }. c  N$ Q  h% qA.通过$_GET- u/ x2 ?. a% u& [8 ^: C1 f
B.通过$_POST
" H$ d  S. y9 i( }C.通过$_REQUEST
' [" y& i, @9 W& w  ~D.通过全局变量
) p0 B3 e/ ?) o+ `- dE.以上都不对0 ?6 A" w+ F+ h. U6 W/ \, @

, {' v8 W. ?2 i1 m1 |0 O  O) K6 l
  C8 e* a: D) x2 w/ B3 W) X0 H+ B; v2.哪个函数能让服务器输出如下header?
$ J+ q4 r# D  \) Y5 o$ ]
% C: R: @/ N7 D7 N' `% [% d+ Hset-Cookie: foo=bar;
6 x0 L& v, b, y5 i5 M; U
: A# z- F: I0 ?6 V答案:_______________
% M8 {6 Y3 K8 H3 g+ H! K; G( K' O& {$ W# X% ]

* M7 G  D9 C" ]* K3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
* v: _; j' k: P# ?# Z
9 F7 J+ g) T  `5 y  dA.通过HTTP_REMOTE_COOKIE访问
, t" ~- ^) m4 z7 D1 J+ D% b9 iB.不可能
; M  p4 }, e1 BC.在调用setcookie()时设置一个不同的域名
% l9 B& A) A/ P4 ZD.向浏览器发送额外的请求
% a$ F, B; _! U" j! vE.使用Javascript,把cookie包含在URL中发送2 |% p* Y$ W/ Y1 B
0 c# ^  B9 J/ H. [7 q3 G

0 k$ w/ ]! {( ]4.index.php脚本如何访问表单元素email的值?(双选)
( Z  o& H- @7 C( P8 K; b  I& n' c4 O" d2 V- U/ w
<form action="index.php" method="post">
' O. v1 o' A3 W6 {7 S<input type="text" name="email"/>
# j8 W$ s+ Z" Z$ |</form>
* F4 O2 C3 S7 d. d& z8 g$ t+ j0 Y3 c% a7 s6 |, E5 T
A.$_GET[‘email’]
. _" y9 E' k5 d5 WB.$_POST[‘email’]- l+ F1 B% n3 j+ T6 T6 V  H1 \
C.$_SESSION[‘text’]
+ M  }! g. @! T2 }' aD.$_REQUEST[‘email’]
0 e5 C  U' ~% B, d9 t  kE.$_POST[‘text’]& S$ l0 S, P  g7 b. k8 _' K

% J8 i3 K2 X8 d- x+ i# k/ @8 U# ], Z. l; o' a1 Y6 C7 U  }
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长9 L& s4 U6 c/ C5 j1 ?9 u# K
B.没有变化0 w  e0 k. y# t( Z7 H' c8 ?% q
C.在浏览器上打印该字符串时,尖括号是可见的" L3 ^$ i7 H1 c) z) |9 X! f( x# @
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见$ F, u$ k1 V# U* t0 }% H
E.由于调用了htmlentities(),字符串会被销毁( R! Q% W( d2 D' T

' w+ Z2 ?: C3 M8 q0 q7 z$ M: _
0 u. ?. d* W, L  U6.如果不给cookie设置过期时间会怎么样?
3 p0 o1 S& I4 q, y: T+ t4 u' @3 `6 e
A.立刻过期
/ N) r; o( w- ~6 ?! [B.永不过期
! e- J9 T4 \! qC.cookie无法设置8 ~0 G" h1 j# ~6 z# I0 A
D.在浏览器会话结束时过期
- M1 W; C( A+ t9 g5 tE.只在脚本没有产生服务器端session的情况下过期' n, r& X; f0 \' L4 N( S6 ?4 W

9 f) s6 c( {# S* M! ^, d* k5 f! b8 Z# h3 ^3 k9 N% E
7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有  c6 v) T. D" R, M# @
B.Array9 Y( a; {3 X% S
C.一个提示
8 R) v# D4 `+ @' l- E7 D+ }" WD.phpgreat8 H! E  y  v# l$ X1 [' P# e
E.greatphp
9 Y+ s  U  k$ M$ s) v  }4 m. _; i  R2 X6 ]1 S
: B7 e( v# V% D" ~, A) q3 v& P; x
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?0 b  B. N) z  H4 `; ~
# R6 x& P! L, q
A.这两个是明文传输,之后的信息加密传输
+ ]7 _" A  t$ F: e7 v# H* nB.加密传输/ Z: ^) l5 t) m1 I
C.URL明文传输,查询字串加密传输
8 Y: k8 c4 Q& ~$ r, S* \+ H; E3 yD.URL加密传输,查询字串明文传输
: l0 D& z7 W/ ~5 HE.为确保加密,查询字串将转换为header,夹在POST信息中传输
6 i/ S! ]2 {# W8 @2 r
8 X# L( }- D" ]6 L7 O+ E( d; f4 M6 t1 U+ A1 f
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
4 M$ O+ k& }4 ?9 W, E/ W+ ?
  Y9 i. Y- L' u2 z! C$ ~1 I% }+ CA.它们组成一个数组,存储在超级全局变量数组中. O  y8 v. z/ w
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
9 u8 f" w5 @2 T. j8 ZC.第二个元素将覆盖第一个元素1 ^8 ?1 ~* O0 q0 }) T$ l8 z
D.第二个元素将自动被重命名% p; B1 c& O- q/ G9 F3 u
E.PHP输出一个警告
: D7 ?- J8 `4 W3 l2 l- M) J
  M+ L$ `; D8 D
* }4 N; a3 F4 g10.如何把数组存储在cookie里?$ Z  i$ p! f( L% V

5 A4 S7 L, z& I& Z0 t7 yA.给cookie名添加一对方括号[]5 y/ h5 {. F" W: K7 E9 y, U2 c' O3 S: l
B.使用implode函数
& |/ _' v: c6 a- B: VC.不可能,因为有容量限制
. z. d$ p" j4 r9 s/ F5 A, AD.使用serialize函数
9 h) f& X4 [# W- dE.给cookie名添加ARRAY关键词
: f! c3 ~! Z% U8 s  x- C6 g3 Z8 w
/ ~" f  v  {! d5 ~- T7 H' `& Q8 k: J) p
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
" P7 o) |- n1 n2 B* d. i4 NB.1234567890
$ T0 M7 \9 W  V' j/ SC.01234567899 O  ]* p6 V. \0 V' `) G
D.什么都没有3 r6 ?7 f, e$ k4 b& c# o' [8 b
E.一个提示; e" P9 S, o! i. D# ^- e

$ c0 B  d& D0 ?: a/ y3 ~& z$ @* M
0 q) o+ m1 i) c8 H+ C12.默认情况下,PHP把会话(session)数据存储在______里。
' W4 ?2 ]! ]0 l' D8 D1 `; {' ]/ K7 E5 |+ y4 ]  i9 h9 E
A.文件系统& \& h" X+ d& s4 p4 k
B.数据库; A4 E0 ~/ i3 q' [4 [
C.虚拟内容3 g7 h) j, t/ D9 H3 ~8 ^' b
D.共享内存6 b# b% n4 G9 c9 H/ E% \
E.以上都不是
8 _( E8 H9 D+ H9 i9 U0 k% l; h( m' h. N+ ]0 p

$ P/ x1 e/ u! c1 {' s3 ?0 f& z13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
* ]' c+ g0 q$ v- K+ [( ~* O" T
' S" Z0 p6 u/ q7 o, q7 XA.浏览器的程序出问题了
+ w3 M/ A1 v0 h! e; o5 r. vB.客户端的时区设置不正确
% P2 c- x8 A- WC.用户的杀毒软件阻止了所有安全的cookie; m* t! C" C7 B# r5 b1 R3 r
D.浏览器被设置为阻止任何cookie
) ~1 E+ q" Y' I; q' l; JE.cookie里使用了非法的字符4 h# R2 M, Q1 D9 e* T
% @" M, v' V  \. B: {: k' ]( ~

/ i7 z, a/ a6 u  M14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?7 ~' P# X- j7 ~1 A6 l. A5 Y; @) o* [2 a

- x, O0 V+ \9 `, M% {- g/ MA.1440秒后0 m( L' z6 q# {& ]
B.在session.gc_maxlifetime设置的时间过了后
, j) g, g4 ~' H: B2 gC.除非手动删除,否则永不过期
% ^* b) _( f$ _  W$ e2 {D.除非浏览器重启,否则永不过期
2 G4 u8 ?" ?+ a2 V* ]% F; AE.以上都不对8 M$ }! A- b2 j2 l& I0 O

2 k. ], Y1 y% [
( Y+ F. Y+ |3 j$ F4 q15.哪个函数能把换行转换成HTML标签<br />?- m/ F0 O: ^, ?

: d( e0 v  a+ e8 @答案:____________) T0 c* }# D- ^1 D# c

. J1 v: E' q4 b2 T$ Z9 Z# C% Q! E  x  M% g8 n& l. M/ r+ S  q( l3 \
5 |- o; ?$ O. g; f
答案速查5 o4 S- q" H% a! j( k8 W
1:E3 N0 i" B! d* ?, G! k$ c
2:setcookie/setrawcookie
0 E/ d* L: O& K0 }6 _3:B( Y1 S+ K: @6 Q* v! x# G/ s+ L
4:BD& {7 M6 E% A! m; t! a( v
5:BD
1 W8 |: D- q* ]# i6:D
0 Z' b0 U) c5 E- ^  c8 Z7:A+ k, \0 b8 X- u% S. }5 o- D
8:B
* S) o! j& ]1 y2 A9:C
' f5 V4 v/ B4 \) F+ X10:B5 R. Y4 d0 x1 b( z7 N" U
11:E
, M0 V/ \9 g/ e! N" [12:A
+ S# C( K( A, K0 F13:BD
( ^. _+ A8 i/ ^2 @2 h* j14:B
  D: }' M7 o& K$ s8 ]5 Z15:nl2br, i* I" B3 e5 i' u8 h- a) F

) Q) Q+ d9 w9 q; T7 x7 [* X: F: q+ S2 z  P+ R2 ~' k3 {0 i
( _4 b: J1 S2 M( u
答案详解. d% b9 r6 T9 k* f' a6 a
" ^! i7 b- h/ s( T5 e" g
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
, L+ q$ c( h1 s8 M* o) S1 o) o8 L% _9 @& V! ^
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
; G' P2 \3 b! f  V4 S8 t9 r# Q8 O, M( E
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。% @: R1 D4 m& J" a- o
4 o# Q$ i( |+ U* L6 Z% m( {
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。6 p0 I2 h7 ~2 o$ K, _) z

& O3 ~: f! e6 Z. O9 B. ?- a5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
4 E- e0 |7 X2 O$ D' [
* v+ g0 I/ K3 w7 I- [% R5 @6 c6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。2 I7 h& j! a! p) G1 A
" i3 b) G, ~8 s8 [
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
' M4 n' |8 E9 T. j
; }% S4 `5 C- c  j4 M2 R7 p6 o8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。5 x4 R; {/ A! G* ?8 a

  b+ c: @6 H0 c! X' U. D9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。1 F8 T/ Y4 A: n9 H

3 I' G+ o" H: \0 r& F* ?10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
/ P. f0 h6 W% P5 k: O7 \& {3 |! f. A9 u6 x' q, U
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。! Z6 |- z$ e' C( P+ ]  P
- U- D& `- a- [2 D# P# B2 t
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
7 ^* ^, W/ T8 o7 x- ]% O) P. {( ?/ s7 B. h
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
1 F: A$ b# w: V5 A4 x
8 b( ~) I" F. t* r: a5 \14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
9 ]: y7 o9 A# _) Z- t
' m. e% D8 C: O! a5 w! g  V15.函数nl2br能实现这个功能。

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