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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
& D# t2 b/ l1 U2 m, W* L$ |与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。- u8 b1 W6 m' E
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。( W0 @# H- G, z4 u

( M0 o4 f& E7 l% ?: R( h4 P7 }! A6 |# p8 D+ z
问题
9 `- Z) Z3 ^# c2 X9 k' X8 o1 m7 ^3 _4 L8 _. E% Q/ L
1.如何访问会话变量(session)?
7 `, D+ d+ W( _, h
' b! b% L4 u0 _; f/ L2 D0 hA.通过$_GET
  H! K! w: l5 p0 v: K& e# eB.通过$_POST
3 a+ A: L) ^: a. a+ tC.通过$_REQUEST
& ?5 j( H- }: J" V' z: }2 t: |D.通过全局变量/ n/ ~- G3 ^3 z
E.以上都不对2 X+ c  X8 F3 G1 A& H6 Y

3 j" t, b" j2 v+ l3 ^: \
; j- S7 _# O4 J2 |) F2.哪个函数能让服务器输出如下header?4 p$ Y$ B+ g8 m4 q3 p
0 [  i0 w9 Q1 ^8 S2 u' R+ [: N
set-Cookie: foo=bar;
& g" X4 Y9 \9 I
7 ]4 E; Y$ q0 V- x答案:_______________
0 P6 ^! k. d) }/ \+ M# j
3 j& ~8 c0 P/ \% T& E! d2 H- r* q: V7 D- c, k: |( u1 x* w: [3 n
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?8 s! B' G8 |) w9 C: L
. U% [& S$ q1 I" b* W' V
A.通过HTTP_REMOTE_COOKIE访问
! J' Y0 g' U0 {+ ^! y0 qB.不可能
8 M7 @+ E2 r3 d# n, B& PC.在调用setcookie()时设置一个不同的域名; I% R; J5 t, o: A$ N/ g& b
D.向浏览器发送额外的请求( r% Y' @0 m; {- m5 E% `* q
E.使用Javascript,把cookie包含在URL中发送. X! u) o) A* c: t8 G0 x
4 q) \" r) L- T& N0 z2 t

) G+ N3 s" `* s4.index.php脚本如何访问表单元素email的值?(双选)
* g- c( K. A5 J- a- g4 g0 u/ K- `/ P( d4 n! k
<form action="index.php" method="post">  `: Q. Z. P$ m
<input type="text" name="email"/>& i1 x3 ^, }/ N
</form>
, }' G" }4 E0 f6 ?2 @/ X+ |" \( w0 L7 {$ C
A.$_GET[‘email’]
. g: @7 w! G+ {3 z" B' E  qB.$_POST[‘email’]7 I3 r# o0 C# I
C.$_SESSION[‘text’]
# m  y* a+ x& q  r7 KD.$_REQUEST[‘email’]8 g) [5 X1 i  K7 A. p
E.$_POST[‘text’]
" ?7 m( J2 C" Z7 C( m# k& i. k9 I8 @0 h: o
! t; l0 F7 v" \4 I, g/ M
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
7 Z2 Q1 _# _: vB.没有变化4 y3 `! F7 m( q& z3 N2 `
C.在浏览器上打印该字符串时,尖括号是可见的
2 i* m/ x) N( {% qD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
! m" Q  F9 P- }# E7 g* v) DE.由于调用了htmlentities(),字符串会被销毁( x5 Y9 o& t8 _) N" \6 P
! d9 g% W5 `$ W8 {  n  F' i

  q  j. f7 P3 ~; `. n3 S6.如果不给cookie设置过期时间会怎么样?
1 `$ @( c3 f9 O8 N4 [, S* @* X  e. n+ U6 Y# K: s
A.立刻过期6 a7 [, N' ~: y7 g
B.永不过期, y4 k$ \: W! w. m
C.cookie无法设置4 C$ X1 i) ^! K4 ~
D.在浏览器会话结束时过期
) \( z; K" I8 s& d) V% [E.只在脚本没有产生服务器端session的情况下过期; f* S! ~- T+ X8 o( D

" I% x2 X) h4 Q  g/ B" ~7 Y" c- `- g; _# X- @) ^
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.什么都没有
8 {& N: w) X  e# ?) \) HB.Array
( B6 E$ s! L4 A' S6 EC.一个提示
4 t' M' C4 d8 o! D6 _/ E2 DD.phpgreat' B5 \( J; X+ E8 B5 b; D
E.greatphp
* c5 N) k  y8 v3 i
- P  w' |/ [4 I* @3 ^
: [# ~+ E1 ^$ U% c- ?* P+ B8 v8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
+ U' y0 G& U" F) {# l
) G% h4 _) b7 E5 }  `A.这两个是明文传输,之后的信息加密传输' k; T, ~+ R/ B. `
B.加密传输( y9 [9 g7 h5 W( U6 t0 D7 Q& d
C.URL明文传输,查询字串加密传输; W8 E' i, X) [" B+ r2 n. E
D.URL加密传输,查询字串明文传输
0 S3 ?. I" P; Z. z2 v0 gE.为确保加密,查询字串将转换为header,夹在POST信息中传输4 n/ L, W9 u# k5 D0 C8 ~

& D2 x; H) X2 v1 i. i, h) A
$ ~1 u. o3 I4 v% h9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?8 g. M/ Q% `! O4 i

6 G: t9 Q& Q8 R) J  KA.它们组成一个数组,存储在超级全局变量数组中
" a: D$ n4 V  G! {1 P; H1 _B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
& H1 V% ^/ D* VC.第二个元素将覆盖第一个元素+ @5 L: [# t- d* p, ^8 {0 a3 z; N
D.第二个元素将自动被重命名7 R, z: }% e5 c0 \0 \
E.PHP输出一个警告, P% ?( t/ b, C2 F
4 ]; x9 b0 p6 C/ J* U  ?" k* y. m

& x- a; y) x) m10.如何把数组存储在cookie里?9 P  ]( `* W- j. Z- n. Y
- r- h7 H2 B/ k; H# l) I, v3 H
A.给cookie名添加一对方括号[]* R6 a' K# w) R' M- H# L4 B. T
B.使用implode函数
# f( O3 K. d* l9 S1 @C.不可能,因为有容量限制  h4 I: F+ f5 ?3 f5 y& q
D.使用serialize函数4 l) C# }: j( R( C; l  d
E.给cookie名添加ARRAY关键词
8 D7 E) d* C: W/ R$ m# I( \* ?0 _# C& Z5 r; L

2 E1 S7 G- z- o+ G; W11.以下脚本输出什么?

  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.123456789102 x4 B0 ^3 J& O" J
B.1234567890
! F3 i3 A# A, u; gC.0123456789' T, l+ N6 ]: g6 P8 h/ i, }
D.什么都没有
) @: _/ @; @0 T* sE.一个提示2 j1 m, [8 e# X( g3 r- J

4 z7 u) s$ ]8 |  t6 _: J& T/ E8 g* v
12.默认情况下,PHP把会话(session)数据存储在______里。
1 ^; M! L1 E; l) `/ S# Z# k0 A+ K7 p! L* o2 o) E
A.文件系统
! f% k# Q# b1 L$ QB.数据库
6 q. `% K9 a% \  h' EC.虚拟内容, l: D' l2 Q3 C. i1 g
D.共享内存
; M% N9 f' \) k0 ?5 L" E$ JE.以上都不是* _# K0 l; x$ E; W: C" \

, {5 N9 n% H  T& C- @" n
. O9 n2 G7 L) J; p13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
5 o& n' ~) U1 K2 \3 D5 ?' c( @$ _8 v2 {. @  q; _& l/ z5 q
A.浏览器的程序出问题了
0 Y- i0 i' I# U& [B.客户端的时区设置不正确/ G- H9 z$ ?5 K
C.用户的杀毒软件阻止了所有安全的cookie" \8 @/ _" o$ b( S5 f
D.浏览器被设置为阻止任何cookie
( H; K: ^. G$ ?5 aE.cookie里使用了非法的字符4 S! `  J% D& q; l2 p  o. _

7 \) o$ ~; m, o; i5 _* z1 ^. E6 |2 r& f/ X) z6 e. V
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?4 v6 h7 _* z9 B& R* N4 X* x0 _

/ s- K' w8 u5 q3 T* O  o8 CA.1440秒后( q$ R' t" G( e: ]+ e" I% ~
B.在session.gc_maxlifetime设置的时间过了后: h1 W" ^* \7 u, x% W1 L8 c. b( u
C.除非手动删除,否则永不过期
# A7 [! r& d: c/ a8 ND.除非浏览器重启,否则永不过期5 U+ ^* Y3 i- g3 k- K( w1 Q
E.以上都不对" u9 b' ~% F6 N0 P1 |( [5 s

7 a6 r0 m* W, {! r) D
0 D8 b+ H4 m. U/ v0 _+ @% l; S15.哪个函数能把换行转换成HTML标签<br />?; G$ L2 U7 I9 }- b) g
0 a* h0 S3 w& x2 y: a" O
答案:____________) I' w( X  @  f

8 P: \+ k8 N! }% f- [6 O! F2 o! z* h/ ^3 s) y$ S: R' d

7 _5 `4 r) y7 b, S, T4 S  c答案速查
% b1 ~, o. i+ G: r9 J& R7 H0 E1:E; |+ p4 j, v6 f6 t; @7 F  P! X
2:setcookie/setrawcookie5 R. O- g! c( U& z( ~
3:B" ^9 M9 `- v3 K- G
4:BD
# F+ v4 ?6 ~  R8 A( B; v5:BD$ o" a3 |. f- r4 V" c. k  m3 e  j
6:D  Z/ V; D3 n8 C3 h# M) {
7:A4 S& c: }8 m0 G; ~! j% ?  r- d7 x
8:B
" K" X; q) j) p2 c+ Y% U+ I: \- Z9:C8 u$ I9 @. S+ s. U3 i) \& X7 e5 l
10:B! U$ `$ G( P; |: F$ L
11:E
) U' M) T1 e7 d' X1 Z0 Z3 |12:A0 g2 T7 a" u3 E6 T  a8 O
13:BD: f/ g% M0 s/ c& {' {! N
14:B
) o& g# o: v( o. A9 ^; c15:nl2br
; l# y- V; L# k& U1 w  K1 R+ ^
% z: h6 v7 `6 o! J
- y) o9 W7 G: M$ R& [8 Y; ?' J+ ^3 P+ K
答案详解
9 Y+ m% k% C8 K/ A& t0 K0 s  Q( ~& L* C; B: B0 u0 g/ V! E
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
+ T) C0 Z+ s8 v1 T- R& C+ S$ q. ?) f% s
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
. f9 z; m/ o, I  P! a& L2 Y3 p- l
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。. V  T5 ]6 R" g5 m0 G

- V6 b- [" i5 T7 ?5 Z  e9 X8 S8 H4 C4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
) J, Y1 A; X6 M( O5 f: r
- n: U- {' M$ O2 y- Q# ^5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。9 U8 g0 b4 {5 s  g  X3 m$ [/ u

6 {) }/ Y3 g* A+ r1 d6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
8 M2 M# t; y6 O8 G5 h. p
3 r; d$ S  ]  d  H$ j( V: n8 D7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
! L# T, {6 ~6 S0 `/ X  _( `7 f7 B1 \- v9 _; @
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。& N) i! S" r0 d& y2 Y' ]. d

+ l9 g7 R: L9 r8 `. ^1 y9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
% p3 H* f, e' N& h9 E8 u9 ]
8 H& G, M$ D3 f10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。' W( z4 H3 k8 G9 r0 C6 |: o

0 W! x: O! F, X11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。+ |* k/ [/ u, X: V

. ~/ K. K( M. B: y7 r1 @; s12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。- y: o( A; K5 B5 W  P' W" A, [8 L; k+ ~

+ k" ?! Q! C: A! C' E, e0 t$ m13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。$ N* c/ m' D6 ]2 U9 L& C, m6 ^

* Z* q& q+ r- d; F# e14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
, O! s* C/ s4 Y$ v; P' _/ L  `
5 M1 p. r' G9 K) o15.函数nl2br能实现这个功能。

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