返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。9 P4 p6 d3 F" t
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。6 z+ b5 ^0 _( b: C8 O1 ]* m
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。, x5 W( h0 `0 W
# p  c. ?! h  C; i: r

# A. `5 ~8 H7 n问题6 P4 _" h1 O  n0 [0 f4 U1 Q# z

3 |4 Z1 o0 Z* p6 R1.如何访问会话变量(session)?) R  f$ b: O) b+ j2 j' i
2 v1 J  x+ i7 F; e9 J% g1 E
A.通过$_GET# A; S+ I2 N7 W/ g! T" t5 [
B.通过$_POST1 M  d* ^; r2 a$ D
C.通过$_REQUEST
& g, x( p0 g7 ?D.通过全局变量* Q/ B7 f& M- t; ^4 ]
E.以上都不对$ C0 k& s8 `/ l9 i7 e( p
6 k* _. G" N1 \
$ W- q, l5 a" \  U. N
2.哪个函数能让服务器输出如下header?
  |8 V+ D& B& a7 O, G5 E" p) t
8 |# l" b; B+ F; H- `5 Pset-Cookie: foo=bar;% S: w* o# Y+ z9 z/ E/ I
" T. G6 V4 S9 ^0 [
答案:_______________2 Q# d9 c! d0 R  K$ F
7 x, H9 R  ~  ~+ o1 H4 @( U8 q

. r: Y9 g5 P' D& I9 I0 g3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?6 z4 k! x6 a% i' X" R0 w6 Q
- `7 ?0 I  E: x7 l
A.通过HTTP_REMOTE_COOKIE访问# Z) j0 r8 h5 s; ^
B.不可能# p! q9 l/ j& w) T: K/ t# S
C.在调用setcookie()时设置一个不同的域名
2 ~' g5 {0 r) A6 bD.向浏览器发送额外的请求
" C' ^& C9 r" H* U$ L4 x1 x- R9 cE.使用Javascript,把cookie包含在URL中发送7 C" O6 N; b4 P
1 j8 h2 Y" b: P  e8 k( L1 Y6 l

, V, L: G3 S+ H: O1 b* D9 i. B, f4.index.php脚本如何访问表单元素email的值?(双选)! E/ H$ V, N( W
% l$ S4 \* E1 Q0 u3 x/ t4 |
<form action="index.php" method="post">1 i; a- u& _, L. z. q5 @. Z
<input type="text" name="email"/>
& @( `& H# q0 q- F' m</form>
* S$ `" A, G5 `9 x; r4 X; R1 y. v0 U- Y! Q
A.$_GET[‘email’]% G+ N% X: d$ O* L; |: I( Z
B.$_POST[‘email’]/ E; [; a, `( l, b0 C6 P4 i
C.$_SESSION[‘text’]
& B" x( v: [$ s% d8 P6 V0 iD.$_REQUEST[‘email’]
* w2 F) `" |8 m: v% n* \/ E+ jE.$_POST[‘text’]
: r8 e, @$ v) E: }7 }) D
- {; i( A4 Z0 S7 h/ j3 T3 ?8 Y( s; e- E# ^8 f2 J1 i( M0 m
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
1 T& A! G% S: wB.没有变化# k3 F& w, s) p
C.在浏览器上打印该字符串时,尖括号是可见的
! X) S# U7 D: e) D8 ^# }- ~7 dD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见$ T7 `/ x: R, M7 D1 {" g5 p1 J
E.由于调用了htmlentities(),字符串会被销毁/ f# E7 c5 d4 K1 I( Y1 F; a

& E& y) x; j: `! r/ l% [; v
4 A/ R& p8 U, z+ ?" ^, E6.如果不给cookie设置过期时间会怎么样?  y! d/ ?/ Q2 L0 E' i2 d" Y7 W- t

9 E& v8 H7 f7 a  [" oA.立刻过期
2 R+ A# S; \5 N2 c* A  n; XB.永不过期3 p/ l0 F$ Q, l5 k5 z- x
C.cookie无法设置# \! Q7 Z* N9 m
D.在浏览器会话结束时过期
4 N+ q: F# y0 ^* {E.只在脚本没有产生服务器端session的情况下过期
  A- k) b- b4 L! }3 G. p) g9 C2 ^$ V# _1 @

; m5 ?# \7 ]! `) v* o- g7 s7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有+ |. J6 E; d* Q! P
B.Array
0 S3 Q0 i4 ?. |C.一个提示% o( G3 ^; O0 ~5 \  a
D.phpgreat; H* B$ h4 y; X1 J) R" y
E.greatphp& U  q/ F! [8 G# @" q! v$ H3 n/ [6 G" @
' t; E5 q, f5 k4 S. g- [2 `
7 P9 i! [  n1 [6 p8 _0 C% V+ ]2 k
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
' H1 P$ j9 ^' m" ?+ A7 S7 o: ^/ r6 t. C  F
A.这两个是明文传输,之后的信息加密传输
$ p6 A3 U. g& UB.加密传输1 ]. v( @3 w1 M9 U( a
C.URL明文传输,查询字串加密传输
( z+ K, E4 e( {* TD.URL加密传输,查询字串明文传输4 G; `: I7 R' r0 v% Z
E.为确保加密,查询字串将转换为header,夹在POST信息中传输+ I1 ~; B% s6 |  n) f2 N( K

/ c1 [' G& x, L* T9 w/ ^1 U5 r; N1 r$ l% ?" b
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?( A. P4 V: i6 R% D7 K" U
$ |) @% q, f% h: k4 u1 X! K8 \
A.它们组成一个数组,存储在超级全局变量数组中
# `& Z- o, b+ h+ ]1 M  \B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中% N( G7 K( l! [* `
C.第二个元素将覆盖第一个元素
9 M% ~# {, S5 m) \, S6 CD.第二个元素将自动被重命名
4 a9 `+ ]( D: Y/ U- tE.PHP输出一个警告
, J" Z$ ?& ]. e" K& d/ B
) x. W' e- C5 Q* k. S, D; e$ i0 P2 w  t/ J% J
10.如何把数组存储在cookie里?
# W8 A' O9 J6 n* _1 Z( e* x; E3 Z# x& E! k4 @
A.给cookie名添加一对方括号[]9 S0 s6 X4 {- v3 h( d
B.使用implode函数8 f+ k/ t+ {' I. B" J! H
C.不可能,因为有容量限制
2 L6 H1 i0 @, [) jD.使用serialize函数7 w+ ?. y* m1 b1 h% ^" T
E.给cookie名添加ARRAY关键词
  }" k( @+ I0 T* Y
/ K5 D& W5 V/ Q) x& w' {/ m2 c" h' o- x2 b$ E- j; ~" Z5 }
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; |2 i: H* e& R2 I) c7 u3 ]$ Z
B.12345678905 I4 B# y7 Q' M9 X
C.0123456789
+ t) f' \2 @& X1 O( |/ }  J5 YD.什么都没有
: F% X! l; v% n5 T0 b" H/ f" H: j( g! ]E.一个提示
" W2 W% S' R7 [, I  o3 u- o3 Y/ d& S
% k" c6 A) [" j3 Y) n- P- T; [* [% ?" J! Y- ]/ {& P  h. t
12.默认情况下,PHP把会话(session)数据存储在______里。# K; @6 h2 S! l  W6 _8 U

; @1 k+ D* J# {1 V4 B9 m5 qA.文件系统# p$ M( ?2 S' m# G0 j0 A
B.数据库- U) Y$ u; T" M4 B
C.虚拟内容$ D& ]4 @9 p2 u# C9 J/ k
D.共享内存
) D2 l/ V; q+ Z  mE.以上都不是
, k$ H. K% P+ N6 d; ^; ^9 P- k1 ?5 i
7 ~+ Z! A$ o% T/ Y) U- G
6 x  C# w7 O6 [0 e1 I8 \2 j13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)) {% p  q; \6 z9 U
" g: A9 ]  S& [. w$ t5 J
A.浏览器的程序出问题了
' w/ ~" @+ H; O% D- iB.客户端的时区设置不正确
5 j) ?; J- W: Y, oC.用户的杀毒软件阻止了所有安全的cookie; t2 U: U/ X: V9 ?2 C/ e
D.浏览器被设置为阻止任何cookie( z5 C: I! P- n. I
E.cookie里使用了非法的字符' t; d- e0 d5 b
6 X8 h* s( o  h$ y4 j

4 G, a0 T; B6 I7 z14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?' e* H1 }* a6 Z- a: [( G1 q. P
, x8 s- u' j- k" u
A.1440秒后- a; w  p) @  b* L) Z4 Y
B.在session.gc_maxlifetime设置的时间过了后9 I- ]3 Z  ^8 J( s
C.除非手动删除,否则永不过期
7 N; y) i( X& sD.除非浏览器重启,否则永不过期
: r, r) }0 m! b) j" I- |# xE.以上都不对% b  a6 L$ j0 y: f. J, T& c7 q
6 A9 J; s& l: h

7 ~/ f3 C& B1 |: x- c! `15.哪个函数能把换行转换成HTML标签<br />?  y, V7 J0 Y% C! d. e6 J# h+ Z" [
/ A, {; q! @! H* u) A( m+ c8 x3 D
答案:____________
: `- |  C# O# y" U, b5 o7 s! C- }
6 _6 r/ M5 C3 o, O- F
6 c2 j% a3 j7 ^7 u& \( Z. b5 y7 x4 b
答案速查4 T$ U0 m$ _$ ]# Q: K, f& P2 x. F
1:E) ^6 n. h  p6 _
2:setcookie/setrawcookie
$ {2 @* Y" k/ |4 J" B3:B! G2 p& g+ P. x. m' g) E, U# B
4:BD
/ [# F% g3 O0 b3 i$ z: Q5:BD0 ]. h) q' H( s& h7 F
6:D* h6 r5 ^$ |" I* a
7:A
: u# {% B( x4 T* K3 {1 c; q7 s3 p2 e/ k8:B
) }& f3 L2 E. g. |8 M: \) H; d1 a9 M9:C
* k/ C, J% O( P" F3 [/ @2 s10:B1 A/ O  ?2 S; T- N5 B* X  i
11:E; Y/ H7 r" n3 C" [$ @
12:A
0 A! J; ]5 S1 b8 Q13:BD( r. l9 z  T+ a% c# Z. U
14:B
7 E% I6 s- C9 S* ]; H" {15:nl2br- X, c1 I, R- H+ x. \( n4 G
; n8 P8 I( F6 y0 A* l1 X6 N
& i5 s) Q- B& G: L1 R2 ?  K2 b! s
0 m* z9 t5 O7 d. a; g
答案详解
! R8 L/ B& K# b' w+ r& I9 _% K9 r. n0 R( x- A& H* L; l" @3 t4 ~* W
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
' V& \# y5 Z9 C+ W7 x- z5 Y) r/ ?# P& y8 O& [& {
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
7 F) n# _2 m9 g; n, A( n2 u  \3 [& k$ Z$ L) t( G6 C9 Z
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
2 q0 n% q; E& t6 Q/ p( b& x4 W
( t! J' j/ z6 P" _, N4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
. b) N* D  a6 x  X. z' b4 a* y1 U/ Z3 R, u  N5 i% B' a. E! g
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
9 t7 S2 N2 I/ F# k! `4 o# _: M2 e& T. H% v* Z
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
$ @5 d1 B8 l( q7 S4 r; D& h2 @
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。+ I8 q# M4 ]8 o9 w$ y% n0 d
1 r- S( n7 R2 U* p
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。" k9 g, `8 {, I. g& G; W

' }  u$ a6 y* v9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。! T4 P( E5 B9 m; O1 T( z( s5 Q

$ r4 K/ A; {# k* M2 `3 X10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。" Z( B1 y* u8 E+ \/ R/ |

! n" x" C4 ^- i3 L! M3 S2 h11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
$ |3 _3 K  B' v3 |, {5 Z3 a7 G
+ x4 [% }) l  z  u/ N12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
0 H# Q9 Q3 V& m* r
. A: l+ T8 r5 U7 q& O13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。8 H2 l6 B3 O0 N. }+ a

; G* e1 G9 u) c14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
  A! \5 K) B4 v6 L9 ]$ k, w. L" f( ]
15.函数nl2br能实现这个功能。

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