返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。! Y. s: [1 f! W; _0 Y$ q) b
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。6 a% q% k* M2 }7 |# `
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。) y% m% C7 l9 V$ m7 y
! t: t/ J) R0 n8 @, y$ O

0 X( r. q+ o* e8 N( ?问题, L! ]+ T  o. l3 M0 q, F

  Y  H. k& d7 P2 a: \1.如何访问会话变量(session)?5 O4 W, h3 y1 G; G5 B( a, {

7 [2 ?3 `/ F& Z. ~9 AA.通过$_GET
# j" c5 C' w" L3 e& @4 n4 n( h# ^- OB.通过$_POST0 j& r& u* }; f
C.通过$_REQUEST# M0 P# O6 g0 T- m3 m* T
D.通过全局变量
) x) c/ K) A* V7 E' JE.以上都不对2 z  E& I7 ]0 |" w1 f# r4 ?

- W' w+ N/ V: }" T- j, l% w5 \: z) s! X" P9 C; O7 O5 G
2.哪个函数能让服务器输出如下header?$ }, G$ u+ Y( i
: k$ Z, V- ^/ a: J7 n) H9 L
set-Cookie: foo=bar;5 K1 ^2 W' F# m* S) M7 y7 T

- r, m5 M( l( c( ~1 {) S答案:_______________
% ]) M* c* @+ `' I5 s$ x  ~0 a0 d. E9 I1 ?% c* L" q6 a
% K/ H: r9 ~* F
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
5 \( Q' r" {8 ]/ v7 K8 [8 ?4 w2 ]( m0 n! G0 v+ a) y
A.通过HTTP_REMOTE_COOKIE访问5 Q! U4 ?# A' a1 g5 c! L
B.不可能
; c, U% I. @) o4 E- i' W: E2 h4 fC.在调用setcookie()时设置一个不同的域名. ?- C& L) }1 L7 W- ]& n
D.向浏览器发送额外的请求
- ], I& t9 m7 e- J  E  TE.使用Javascript,把cookie包含在URL中发送
% K! @; l  K/ M- D2 I% b8 ~; I
% `# t9 ~1 h* J6 R% w0 W  g9 r% S: M6 k# F
4.index.php脚本如何访问表单元素email的值?(双选)
7 y9 r/ b* A0 j( P& G) W) W, Z$ m+ d
% c5 v, Q/ N& u9 n) r( Q<form action="index.php" method="post">
% O- K3 d( p5 r$ r9 s1 m* h% h<input type="text" name="email"/>
$ c# u% o# J2 B</form>
* {/ l5 ?. ?$ r; B0 O- u' M
4 c2 d+ v5 f1 O3 k- n% c* iA.$_GET[‘email’]1 `9 @; C; p7 Y$ F1 x* ?
B.$_POST[‘email’]' R5 h( y" Y' t0 ?' S  `8 u
C.$_SESSION[‘text’]% }' r0 Y1 m6 a' ]8 a$ t
D.$_REQUEST[‘email’]
8 t) c7 w3 ~# o! o4 CE.$_POST[‘text’]2 H/ V6 ?1 K: O( y
5 _9 x4 _3 N( H, [

# s8 d: p$ y9 D6 C! l1 y$ V7 Y; J5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长/ p8 b- I, l) y7 o" n$ y9 E( a5 ^
B.没有变化
4 m( y- |0 H9 e, NC.在浏览器上打印该字符串时,尖括号是可见的4 R7 _' Z7 T- w9 i) U4 |1 Y0 R
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见6 h& H* @$ |0 l8 _9 W2 O
E.由于调用了htmlentities(),字符串会被销毁+ F' s8 j. d" _8 b7 B

3 H8 J; u) Q6 {' {9 s3 e- M) {- ]( Z& q3 m3 _5 \
6.如果不给cookie设置过期时间会怎么样?
- w, ]: n; i6 B
- ^9 N$ T  @8 s+ J" ~( j9 i) `A.立刻过期% S' _, @9 O# e: v5 q5 C5 Y
B.永不过期
" T- \8 ]( O5 N7 g& JC.cookie无法设置# {$ L" e2 s$ J5 R
D.在浏览器会话结束时过期
4 N: ?' i7 r/ [E.只在脚本没有产生服务器端session的情况下过期
" J; j( W8 C* P( ]( ~0 ~! k) z$ }
9 m6 h( s& }2 ?* f9 \* p0 }4 D- Q- I8 \3 z6 @' y
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.什么都没有
9 X9 o) F4 s7 \5 S5 ZB.Array1 {9 L& ^6 }% a4 v
C.一个提示
4 @0 H8 I% V0 g$ pD.phpgreat* V3 ~+ q9 ?. p; T* x
E.greatphp5 q$ ?' `/ H4 z. V4 }: h
# z7 C+ d5 i' S/ t

) E( o, m. f+ N/ F) F7 ^( Y8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?5 h; x" }, n! j' U
4 z4 Z% X, G! l% h& R, L% {5 N9 f
A.这两个是明文传输,之后的信息加密传输
- F. ~3 P6 W/ a- M' T" C9 nB.加密传输
" k% p- E) z$ K' f- EC.URL明文传输,查询字串加密传输
: C* O1 l1 i4 B' V8 @: {* V) d0 F. }; rD.URL加密传输,查询字串明文传输
- M2 D0 W& j" N$ OE.为确保加密,查询字串将转换为header,夹在POST信息中传输+ @9 Q3 U+ D. x# a

. I0 l- e, D) B% _/ O
! A' w  h8 s, c% q" P9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
6 N( u0 b' _) [$ z1 X2 P" E; s* b8 u" J  d
A.它们组成一个数组,存储在超级全局变量数组中1 A' g9 x, L" X8 @3 \' u0 M, L
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
, H" o1 i2 U; O9 `! F' jC.第二个元素将覆盖第一个元素4 t5 d, i* z$ h6 }5 q
D.第二个元素将自动被重命名
' \4 n- N. A1 d- BE.PHP输出一个警告
$ T( z  c' b' P2 Y$ x7 H  F
! E8 ?. F: o- {6 e, A7 r8 Q: g, Q7 v( [
10.如何把数组存储在cookie里?. K1 G3 ]! n( X% Z( l  g3 l
% `/ u8 H0 K6 h9 j  |' X) h
A.给cookie名添加一对方括号[]
' d# @9 C1 t: I! xB.使用implode函数2 _- Z( W' C+ H& x. A& ?1 W$ A
C.不可能,因为有容量限制
* A* c+ Y9 k5 y0 f2 Q+ D# GD.使用serialize函数
2 @! S6 Q! h6 a! a$ ~4 N+ l4 fE.给cookie名添加ARRAY关键词  P+ o) S3 V- E% O, V( e5 [* }
7 O4 u" W* P6 x
8 n) o/ J+ [. f9 n! j: C3 }' @
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& N; Z3 u. H# c7 P( P8 ?) Z
B.1234567890
# h: \+ c& L" B% ~! X1 X1 ~C.01234567897 j8 C% i0 |/ L2 Y, ~2 B
D.什么都没有! o; q& K9 W6 v& S/ v& [
E.一个提示
2 s7 }3 Q$ D; s" G- v* V% i" H0 {( i0 s; {

9 _+ c/ s- L4 M6 o12.默认情况下,PHP把会话(session)数据存储在______里。
7 Q' L/ T- h; w( Y( `) H8 m% A' K& l% n% z& z' ?* {
A.文件系统
  P1 E2 Q8 h7 PB.数据库0 k; Q4 z3 z' V& c# d
C.虚拟内容9 {; Z0 t) J9 k7 M- X7 D( v
D.共享内存9 L: i! Y9 b- E; d6 S
E.以上都不是$ T' D, ^* V- c
8 o) d, e) J. W9 F( l

% ~, b1 z8 J2 c, e6 o13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
* x8 I9 s7 K6 W! H7 \
' x$ k1 u- O6 H# V5 j& SA.浏览器的程序出问题了
4 |# a2 D" N" X: `6 kB.客户端的时区设置不正确
& Y. C* ]! ]/ m* V3 wC.用户的杀毒软件阻止了所有安全的cookie
$ b" x: s& E* b$ {3 ^, uD.浏览器被设置为阻止任何cookie7 N" Z3 X1 o2 R5 i
E.cookie里使用了非法的字符/ A) |! _2 m) d$ r
( r9 M; x7 f; m- p  o& q/ p/ k
1 K8 i2 D  Q: d" C4 }; s$ p* f
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
" i6 K3 {6 d2 a& ?3 T" ^7 d9 x4 e! D) @& Y- r/ `. U% m/ z- O
A.1440秒后
4 `. q( H% L9 C* _B.在session.gc_maxlifetime设置的时间过了后
  }6 x+ p0 y  c# d* _3 [C.除非手动删除,否则永不过期7 @8 i% G; u/ P4 W4 Y
D.除非浏览器重启,否则永不过期. ?  ]: i% m; ?2 m* J
E.以上都不对
; _; N% h" q% E4 l# [) B4 e( a) X% |! j8 V% E0 r* R& S' }( W

3 z" o) w1 d2 M9 r4 i. j, E, I15.哪个函数能把换行转换成HTML标签<br />?& v; [- U5 A  `; N- M
! s/ o, R- {0 N! B  d; \
答案:____________2 r! o8 ]- r# m( R; x3 V
$ p- b6 I; i) A9 x, W; P" i
+ k2 h% B5 \/ Q* U: N' d- {

' Q/ z& z7 {3 ?8 e2 D" }/ P答案速查
# {* u: C7 s* T& F3 I" ~1:E2 A2 f' r/ u8 [# _. K9 b! V% f
2:setcookie/setrawcookie
6 W/ Y! E. w' E2 X) `3:B
9 b3 }1 A: y+ L- B. Z8 }* W3 a4:BD+ I/ e9 O, U: r( @5 c: s
5:BD' e" X# b. H# t4 q8 V( ]
6:D
2 H+ H) g+ p* U& ~7:A
1 [- F# f) [; A( D% |3 |8:B
- `, B$ U- [' Y) O9:C
5 P& j  ]6 ?# M) |10:B9 N+ c% h; G5 R- w! i. I
11:E* \4 B9 F5 ^) I+ @
12:A3 m2 ^! y3 c1 [8 M: E
13:BD
; p6 N$ j3 i( e: C0 b$ z6 h14:B
: j! P, T4 I. B' u, Y/ _$ t15:nl2br+ M; A2 ~% l5 {2 @0 ^

+ x0 d- e* Y5 S( `. a- I6 u) m$ {: ^; Y3 z' J

7 b6 Y; r, a7 z% n2 N3 o答案详解7 z( J1 {* |- t* u

/ i9 e1 q" z' \' ^* K# a4 J1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。+ J2 q0 I% ]$ z  s
" J& L8 l4 g+ i4 Y
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。+ \8 C. o2 v& E

5 ?3 @4 r; _3 U) Y9 Y; Z* M3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
) @0 X; o, z  Z* d/ Y( w$ r, e' W  |4 V+ h& O/ a2 A
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
$ }3 f: _+ Q* H+ U* @4 x, a2 Z
1 g' v# r: Y; l. X% ]5 J7 K( u9 K5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。, M( i6 b. @; g# Y' r1 L

# s8 N  |: s. G. E6 A6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
% ]. v, K- S" P" c. q
: ?2 @# V5 K: r* d& m0 d$ ?" t7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
+ H) Y/ J' |0 S& J* G/ l
! c. j5 d( E# F8 F! y! @6 V8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。4 Q- B. H+ z' Y( F+ o& u0 ^6 e4 x" l

8 y9 }8 I- z( n, A& {7 ^9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
9 g: M$ D9 O: T" p+ e! \$ r8 W. @* ^( s
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
, Z1 G9 q# @) k# R+ [' V4 a9 m9 t) M; V* s( D- n6 W
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
! \& m+ k2 \4 a- D: M
  J9 E0 _6 _+ Z. f5 [12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。: W1 [% m9 F7 y' N" M
4 ]. p* p+ J2 u* F
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。" B- F( F' f* T5 _- x* [. G$ w
& U2 N8 s# I- w4 v- y0 N' Q9 o
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。7 }/ L: d/ ~; o
& W7 o9 S& R2 ^3 X; [
15.函数nl2br能实现这个功能。

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