返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。# Q! @, ]. l% g8 F
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。" w7 R" {6 j8 c2 W
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
4 Y. e( Y8 `3 g! k4 ^) e' M0 ~# `" H+ T* ^
. p3 v! S9 v1 M4 D  m+ v, v
问题
" w$ C7 g5 D5 g9 }! I! M- ~+ [7 m
1.如何访问会话变量(session)?" E4 p% P" T; V

8 n( l: ^% q2 ?/ ^; ^  i" yA.通过$_GET
! h) t- ^' c4 x0 ]8 \6 A6 a; Q3 IB.通过$_POST1 d% ]/ b+ c" l& ^$ m. D
C.通过$_REQUEST8 V  N1 \, |; `/ I8 }* X
D.通过全局变量
( }' P/ T' [8 d, ~) r' [E.以上都不对) e' ^  a  N, _4 f

+ J7 H- H: `7 w6 s0 o, T0 t9 b4 u9 ]1 ~% y  G1 X8 t  J. f
2.哪个函数能让服务器输出如下header?
  u& L' {: B8 P* S( A: N9 v* O; B9 z. Z
set-Cookie: foo=bar;
# @; F+ J4 r: H, t& C/ x9 [
2 u9 A# o' q6 |7 T* ~7 G- L答案:_______________
& B; y6 x8 D% B- ]1 Q: A" v; \% s2 R) [) d; b7 v! J
1 S& e- ?' W' ^8 U1 z& O8 K
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?% c5 h5 r" }' Q, Z9 K
6 F+ S! V4 p2 H! M( S
A.通过HTTP_REMOTE_COOKIE访问
4 b- f# F! E8 FB.不可能
" t) Q! [8 Z2 q+ {% c& HC.在调用setcookie()时设置一个不同的域名
# L$ K- _1 A8 L# Z; R4 P5 b, q4 eD.向浏览器发送额外的请求* M3 z% G. F3 W/ E. F7 v
E.使用Javascript,把cookie包含在URL中发送3 W/ b- ]/ C( D$ v/ H" C! `
# ]: E3 e, J& V9 q+ O
0 y4 n  a' X9 ~; n
4.index.php脚本如何访问表单元素email的值?(双选)4 {" ^9 o& N2 v  b  I
6 {% @; z& ]6 I: l- D$ k% t9 X3 e& p
<form action="index.php" method="post">5 E. P' K, h. o) V8 H2 g, d1 I
<input type="text" name="email"/>
. Q" p  e6 V4 Q$ o+ J' F</form>6 f, ~- p& F2 V+ Q' N5 @
( q5 H1 a: G  z+ J5 m+ n
A.$_GET[‘email’]& l( c* v6 g2 O5 D# B
B.$_POST[‘email’]
$ |$ \7 L; g5 j6 ?8 vC.$_SESSION[‘text’]" W) d) x, y3 f% G* }; b
D.$_REQUEST[‘email’]
. g0 Q4 ]# g  @, FE.$_POST[‘text’]
- U" i% O3 |2 J8 J- c; B! R& B/ p% W9 W
6 ?# Y. P/ h9 M  v' l4 a
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长+ [$ g# r5 w8 e6 D
B.没有变化
7 N; |6 b6 ^8 m( yC.在浏览器上打印该字符串时,尖括号是可见的
6 b: y* l( _7 v, t. X! AD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见+ Q" ?( V- e3 G/ I8 j
E.由于调用了htmlentities(),字符串会被销毁
& }- N  R& h" E: L# e" n
' A- `( W6 i4 L" m3 |5 i+ A- f& J2 d
6.如果不给cookie设置过期时间会怎么样?" v3 I7 ~7 s# ?; v" s
6 C9 l' N5 C% E4 o, L
A.立刻过期
. [% R" H- S  s; l  F" |. H/ bB.永不过期
$ b2 O9 v& P( a& g5 m7 ~C.cookie无法设置( H& r; d8 P/ k% k7 ?8 J
D.在浏览器会话结束时过期
3 m. x8 @" H4 y% C6 z( U% OE.只在脚本没有产生服务器端session的情况下过期
1 R! ?( l. X9 R, d, W" O2 k6 K3 ]1 k. B7 k. R% ^! b, X

; u  b0 Z% \$ w7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
- T, U8 A; z, f5 TB.Array; U( p$ G: y* i! P7 s
C.一个提示
& Q/ T- g8 r# U2 FD.phpgreat
- |8 p  F- I1 h  I1 R& m3 EE.greatphp
6 c0 R+ H: Z. F- K$ Y$ X& o  [7 x3 v' ^1 P

% M' d. `) V) Y" x9 o) x8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?. d4 a7 ]/ |6 d8 E
) b9 F2 w2 U2 j
A.这两个是明文传输,之后的信息加密传输" q; F7 x3 U3 E+ V
B.加密传输! f+ a/ X4 C* Z
C.URL明文传输,查询字串加密传输
: z$ G$ w3 w7 [% {5 h6 |2 Q1 ND.URL加密传输,查询字串明文传输
1 j% v! o6 w  M( d2 ]# R3 Q/ OE.为确保加密,查询字串将转换为header,夹在POST信息中传输7 @1 o% [: P1 V( i2 g, A, E

" w+ p+ m' u3 \/ W2 j. ]3 t& D1 i+ h. ?: [' ^. F
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?+ U9 p: V) m: }! v6 {* N1 a: C9 h
, M$ ~4 k; a! |; ?. t
A.它们组成一个数组,存储在超级全局变量数组中6 U9 C5 L1 s' h% i
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
1 z% Q* B3 a# ^) J* @( k9 hC.第二个元素将覆盖第一个元素( ~  L) J7 C# N! F' I
D.第二个元素将自动被重命名
; X$ `% y) k$ u0 |# \% Q- vE.PHP输出一个警告1 m6 l3 L# s/ Z- U, {

' P6 k) E# V9 x  h% t' \
, t9 N' ?2 E7 F' P# R6 b10.如何把数组存储在cookie里?
/ H4 d, a/ I" b' M0 X& R
% v7 [* D# e" ~/ ?! d9 F- B0 `A.给cookie名添加一对方括号[]: M3 [) q6 ]4 h- G$ e: e
B.使用implode函数
4 R: v; z  o0 Q6 O, A/ ZC.不可能,因为有容量限制" W6 h$ [5 q6 L+ r. |8 S  z1 a6 m
D.使用serialize函数# W3 V, Q" ~2 j  I, g" W
E.给cookie名添加ARRAY关键词6 X7 O/ R6 ]9 u$ o9 b+ ^# d3 X# r

  L# v# X1 ^, l+ K. Z; o& L* y
" r9 w7 h* s+ D  @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, p2 F! N, @! U. }- Z/ L! Z7 Q5 I# j
B.12345678909 U# u, h7 [% h5 ?
C.01234567891 S" T6 |: e* n2 a* s
D.什么都没有9 C6 `4 v- R+ R1 _; g! v9 Y+ o
E.一个提示
$ \1 t0 j6 j8 v3 ?* P3 y. @+ m# y
9 c$ Q( ]! d$ Q6 M
& e. V% k# B( M7 i8 U# `12.默认情况下,PHP把会话(session)数据存储在______里。3 K1 _$ H  ^% D' o8 ~

) v) r; G+ T- W" Y' wA.文件系统
8 v1 o9 R3 F' J! l6 s* A+ v. nB.数据库
' B% Y# E0 y' i. y0 }C.虚拟内容! I( h, z, \7 F" M' ~/ H/ k
D.共享内存0 @, E3 F( W4 L
E.以上都不是- i7 d! K& m7 B
2 _% D% e2 K) E/ H

6 T2 ?7 ]+ E' s13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)4 y! s9 v& o* H8 L. H9 B" S- Z8 Z

7 D5 c# q4 l. {) I1 {A.浏览器的程序出问题了4 \2 P" |  ~$ k  c. l$ z8 B
B.客户端的时区设置不正确
3 b, P9 A2 j( D8 V$ j  W0 ?- GC.用户的杀毒软件阻止了所有安全的cookie$ P1 I" `$ D, d5 P) [
D.浏览器被设置为阻止任何cookie
; r8 w# x1 o% {7 ^E.cookie里使用了非法的字符( ?$ W( K4 v8 V4 w

6 W: w) }1 U" O* @
8 Z& J% a+ }  D; f7 G; z% h8 X14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
: Q. R( B5 v7 x& n* b8 M+ i1 S, B5 b1 D, a7 Y5 v2 j8 ?1 }& k5 g
A.1440秒后3 R" n5 m5 u6 D* W' Q! \2 _
B.在session.gc_maxlifetime设置的时间过了后
; [7 V. ~- I+ f4 H: wC.除非手动删除,否则永不过期
* k: r1 b/ W0 @( B5 P. y1 b7 M. I. TD.除非浏览器重启,否则永不过期
  b7 G' h: |6 M* X6 ?% ?# QE.以上都不对6 \7 u7 K0 m6 N' g) m3 N
! E. @- Y1 z) C" r2 t' a# v3 I
: K( q  L2 _7 b
15.哪个函数能把换行转换成HTML标签<br />?: }4 ]* M9 O  W7 B  T4 d) w

+ E& c: A7 l. T% g7 a6 k7 @3 ^  ^答案:____________
& t8 ?* |7 |- E3 H" R. t
5 f8 i, T" }8 E0 s3 C5 J
6 ]6 `6 @4 ]: ?, t& f3 A. s& w: Q, h
/ X! V) R) v, V答案速查
5 B9 A) o4 T. g6 c1:E
& h# s: B! j. E. `2:setcookie/setrawcookie& C7 a8 u- g; F' }; O" P9 T) v! |
3:B1 K6 r. l  p+ }8 j
4:BD
3 i4 ]# J$ E/ Y4 G' G5:BD; a+ l! ?6 b& P* J8 D/ Y1 [5 A8 x% K
6:D# {  U( J+ R5 ~7 ]! I- H+ R4 d
7:A& x1 w( c1 k& P
8:B
# f4 W0 c/ f2 Y1 w; Z: l) l5 d# G9:C: ^1 n; r5 Y* {7 V
10:B: b1 C8 {3 }) s, Z4 W# \$ s/ c3 I
11:E( X) K. v  ?, ^. S1 _* q/ s
12:A8 j* s, [- M+ H& n
13:BD
' p" p& {- t, @; t14:B7 V2 P9 [8 @. ~5 b% J# R( v+ s% d
15:nl2br* S* V1 m# O" F% P1 w/ O
7 g* r2 |; X8 M* f4 O

1 R% Y( Y3 {+ n! b, F3 }# N  y. B( e! ?/ X  Z/ X9 j
答案详解8 y% ?, \4 J1 ^. C* O

$ {8 ]1 m0 O6 M. t  T2 ?, b1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
( z) K) F5 x  m2 ~8 L) Y" F: B4 Y
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
+ W: @: [( s3 ]4 D' m! X& ]  E9 n2 V" m/ M
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
7 Z1 ^: Q: |/ E  n$ |0 N! x/ w) g! \4 M' `6 l" M
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。' Q: W2 }& @/ E) L: g( J1 t
/ Z- _2 k8 {  r' x7 X+ m6 |! G
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。. a, W; _: M2 f# `$ E

# C; U8 X' ^0 g6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
. M9 u" ^; v$ K. }* v  H% w" ^
- q9 n, D  D2 X& N" K4 B7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。4 C% m2 p2 e5 ?0 R9 Y6 D, J
. g7 t/ h$ w0 i
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。- W, o+ W8 f& _/ @4 M7 Z# o
: Q5 I6 O7 a1 m. d, K
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
  H3 B% E( q, ]7 c, [! |
, Z4 f* o' z: t4 M& }2 j* e7 \# R10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
, o4 s- x: l" E5 K, A1 @8 r- ?$ w, p3 f' f+ h2 S" Y0 s- e* J
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。+ G: w1 M* y/ q4 z1 L0 Y& F+ x

& q3 T. p& w: @12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。! \1 u7 T" D# @; w$ p! v1 Y: r

$ S6 |" o7 ^, b, d( n, Y. n13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
- g* [7 n% s: ?# d
7 K7 g6 T- k6 [$ j; m! j! _4 ^14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。" {* \2 Z4 w. n' l' V; f
! `" h9 e' g6 L) k0 I
15.函数nl2br能实现这个功能。

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