返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
" w( |. |9 N. R* K$ j: t' e) |( i与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
# r; L9 w" a' u* }一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。5 P6 w' g4 B, O- R& p/ X- `

/ w# u3 m3 g  ~. V  L: t$ P
. a* l, M, |. S, k) p问题
0 G. Z; U1 |! \
9 f9 @) g+ c( ^6 K0 Z1.如何访问会话变量(session)?! T7 Q' M$ u* q* z2 Q# y

& G- |6 i3 |8 o/ A) PA.通过$_GET9 R; \+ U# n; E# W
B.通过$_POST. j5 X1 H+ p7 f
C.通过$_REQUEST# H. I2 k4 J& K# Q
D.通过全局变量+ q+ u7 A0 @9 R: O$ o- @
E.以上都不对
! w% ~$ f: t, q! H: c% H3 W) u8 H' C+ B
8 E1 K3 l( d5 P) o% [2 R
2.哪个函数能让服务器输出如下header?- i7 Z" g! I) ~1 [- J) ?
- a! u( n. O$ B* h% D+ S1 M
set-Cookie: foo=bar;
' H9 M1 M0 O+ O% a- u# D3 {" v- K- ~
答案:_______________
8 W7 t8 v; f( `9 Y1 u- O, y4 l3 W- M2 G
( ^; \7 X: f9 x
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
" `' H. [7 w* v2 b. T& n8 \) l  \3 m8 E3 ?( P. ^' O
A.通过HTTP_REMOTE_COOKIE访问7 H2 A* E4 T) d9 i( ?# A4 }
B.不可能# u5 v+ A+ A- \
C.在调用setcookie()时设置一个不同的域名. K: w3 v' @1 k7 X5 t' s
D.向浏览器发送额外的请求$ U) h+ A% Q+ ^! g; l7 Y& m" p8 i
E.使用Javascript,把cookie包含在URL中发送, H6 W) J! [% ~" V4 P9 U* Q: \

$ e: u3 z1 d# l. F! @9 O/ L: Y+ L7 T1 C( x: E' I- g# w! C* w3 S
4.index.php脚本如何访问表单元素email的值?(双选)
6 H8 H2 b" w2 [* t
6 m7 M7 c# L- B<form action="index.php" method="post">3 [; z3 {& I4 Y- P8 h
<input type="text" name="email"/>2 e) ~; [5 A2 P5 Q- h
</form>6 p5 h0 }$ N& c9 {# ?
% u: @7 n# H$ V; _7 ]$ o
A.$_GET[‘email’]
# U* P9 {. A' ?8 oB.$_POST[‘email’]
* V# C8 ?$ Z5 k) PC.$_SESSION[‘text’]! A5 L+ v; H* B: Q
D.$_REQUEST[‘email’]+ k7 ~1 p* m/ c$ B$ K! S
E.$_POST[‘text’]% O) ^$ X8 y" O6 _/ v1 i
  ?5 y8 U, `3 m# d$ T
+ e% D! D3 d  W8 D- \7 l8 `
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
9 o, _- c3 u! p' fB.没有变化
0 @% ]! d1 y; a' iC.在浏览器上打印该字符串时,尖括号是可见的3 B) X1 X& r: K2 m: S
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见' |% |" C" B& v: U
E.由于调用了htmlentities(),字符串会被销毁) L% c! E4 A# E; y. X! J- \. M/ i

  B2 _7 \1 M: ?0 v0 s. u
' {; X$ m  l9 W; r. A" B6.如果不给cookie设置过期时间会怎么样?
( G- P& M5 p* P9 v9 O& z' z9 x2 N3 _% H; j" Y
A.立刻过期
; z+ K  U$ U3 z! ]B.永不过期
& N3 b! S6 X9 y+ EC.cookie无法设置
* F0 K# i8 [7 ED.在浏览器会话结束时过期
6 F. Q. k+ c: p! h0 AE.只在脚本没有产生服务器端session的情况下过期. |4 b/ z4 N0 Q$ i  J

( i9 F0 `( x8 V: C. E- }* j' H8 z7 r1 O9 f6 i
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.什么都没有
, v) z, ~  t  v+ d9 QB.Array
5 a/ _- ]2 m0 J  c* ^4 R  _& XC.一个提示+ q( R" M& |2 M; n$ L$ Q
D.phpgreat
! ^0 o7 _% |# q' I. n" L6 u+ {E.greatphp2 m* L: `7 {7 \6 V  T/ W
+ [: x7 k8 y& i8 F1 o* ^

) v$ ^" C: X3 ?' W2 r/ P8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?, D; C; e: x% T* n; _' |: D. T

" A  n) ^& K, HA.这两个是明文传输,之后的信息加密传输
2 J$ t6 E( a* H6 w% w( q- OB.加密传输
7 `: e8 X* J5 @3 E/ i  s* b1 f5 E% `C.URL明文传输,查询字串加密传输
# y9 P7 s( w7 y4 H- x: S0 JD.URL加密传输,查询字串明文传输
0 n: a, @% [+ |* d# B' N. GE.为确保加密,查询字串将转换为header,夹在POST信息中传输9 j+ Y# X. i' q: D* P7 s

7 i0 I. v; p  y. }' [2 l0 U- e
8 b5 r9 O/ d6 K4 l- W+ c; [9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?6 t- ?6 o5 i" j& _+ W+ W8 h& v

  B; O* y* t4 U* ~" {0 eA.它们组成一个数组,存储在超级全局变量数组中
3 b7 e( t0 h, y: C- p6 F% B; n6 xB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中' M+ i1 f, C$ O( Z& M4 J/ [+ Y
C.第二个元素将覆盖第一个元素! }: \) T! p7 r/ n9 h- @4 {/ c/ k
D.第二个元素将自动被重命名! ~0 s& b: y/ A2 H; X" q
E.PHP输出一个警告' H" j+ ]$ g+ w( {

1 M9 y% s, {! g5 w  f; c+ t$ i( U+ U9 r; L
10.如何把数组存储在cookie里?
: D' E& {# _/ i  J) a) n0 o) h' y7 J; H* ]9 v3 E+ y! }9 x0 }3 I' _* ^
A.给cookie名添加一对方括号[]
  {# H  {* K, l; o+ C5 S7 r3 XB.使用implode函数
4 S2 D+ w) G% D# z; K% W* @& HC.不可能,因为有容量限制5 E- {- |, n) K  w, M- s; n/ \
D.使用serialize函数
; ?/ i" M! Y5 @0 ~/ Q7 H3 QE.给cookie名添加ARRAY关键词
/ X' F4 m' ?' `1 r7 S5 R( {6 g3 f6 r: k$ G( D. n

* x  @( g1 l. R: X: U- K% R11.以下脚本输出什么?

  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- I# }6 U  \) ?0 V$ D9 y4 |0 F
B.1234567890
+ D& p( `" x7 Z2 p. T0 W' l3 }: T0 [C.0123456789: D/ D- g* h# y$ M0 S1 |1 I- h
D.什么都没有0 a5 R" [3 {1 t) j7 `: y# K3 K$ }
E.一个提示% z5 I/ x# b+ x& _4 }
0 T5 k8 c) n' _

" B4 s5 ]" N/ e12.默认情况下,PHP把会话(session)数据存储在______里。' e1 t$ Z( j" p) u5 ?& {
, |/ U4 y: j4 P5 T  Z
A.文件系统" v' Q, @" }- P: Y* S$ }8 B( h
B.数据库
9 Z9 P4 z- E! X6 f9 ?% L8 cC.虚拟内容" z7 ?6 c/ s* T) O
D.共享内存
) w) e. f! G1 l  M; f+ f& i7 ME.以上都不是, }* b5 O9 y  M7 h' w. z( E, O
# F' m3 X9 |. y7 X

' G3 C! G: {) C6 z# _; a& |13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选), i  k0 {  c2 c1 i

; o  y9 v' i1 G& a3 B: \A.浏览器的程序出问题了5 _; i; d4 j3 J: n) Q6 ?5 ]; ]
B.客户端的时区设置不正确  H6 T" I  O  S# |% f4 Y7 e
C.用户的杀毒软件阻止了所有安全的cookie
8 E+ @% Z% }* ?) Q7 d& \/ N; ND.浏览器被设置为阻止任何cookie
+ [+ J, @+ Y5 J4 o4 B% y5 JE.cookie里使用了非法的字符
2 r& q  H7 q; }" U
3 }1 p4 F& S( i! U
. s7 d0 o9 N) m* F; X9 f' n% W. u: f14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?& h9 h; f" U( z. s
9 P2 J/ ?5 ^. x3 [( P
A.1440秒后! y/ v0 x  }0 C" ]. m2 l
B.在session.gc_maxlifetime设置的时间过了后
6 f! m. Y* M* F! c) y6 F! hC.除非手动删除,否则永不过期
- v' o4 G& k" nD.除非浏览器重启,否则永不过期6 K/ e% q9 I# Q& K1 F: g! Z( b3 p
E.以上都不对9 {' h; a- k/ `& |& {' t

  s0 i! f. s- v* T& i* r' q  o5 E7 i! A# f8 w& l  ]( G
15.哪个函数能把换行转换成HTML标签<br />?1 T3 ^1 _9 g' ~7 H1 c
( |0 |9 n# N8 c4 B$ U. [
答案:____________
+ r- o4 L0 K/ x7 `% D! t
8 t% Y9 u! C1 c1 w
* p8 U+ D( H: C; K+ O/ o
  a; Z7 p+ U3 n( C: S答案速查
! p5 d, O: v' T; O/ J$ x2 ?1:E
- a% o  c$ _+ j. b2:setcookie/setrawcookie
* A3 x8 x* d1 T( M, i3 G3:B
5 n8 T! z: t7 o/ W: Z7 x' B4 k4:BD
) p# i8 Q4 V# t( y5 k* f5:BD
1 }% m+ B' A% n# B0 E# U6:D) |0 H4 N' v3 G! }7 V
7:A
% [3 h" }- o3 K, c4 T- N8:B: g8 j( S0 ]1 J- T
9:C
( v! Z& W4 _! S. e; l10:B  ~1 ~/ Q: B" n5 |: y/ O
11:E2 S  [, ]0 @! [7 }
12:A0 m  ?3 Q9 U& j' D, Y4 F: C
13:BD* ~/ x: i  \5 @0 s( P
14:B! K1 t' ^9 P2 _) r
15:nl2br
5 o! P/ i, E& a+ ]4 Y4 Y+ r1 d) o& o) E% q& X$ }5 z- E  c
! q5 o/ y) ~) S3 X+ z

$ D1 M+ z: _" R% d答案详解9 K1 l* a- I; _$ u9 J, N1 c

& A* e" r$ t8 @, R+ ^1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。& \. a! W+ K' C5 r! @, E: {
0 J5 l4 B) S% Y
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。" w9 E" D- [7 w  i5 i4 A0 I4 j

! N- u- t4 D/ ?( v, z9 r* J3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。$ o$ W3 x3 m+ |1 S5 y) \$ q

7 [' E5 @6 t$ P' G3 k5 }- P4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。' u$ j! V, \. q: E5 z& |& ]- P

1 A1 C; |1 k& k( }& q$ B" r6 R5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。$ }+ ?* I: `: F, J
* f" S- w0 x& U: Q
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
6 o$ T6 I7 s1 A& d. N% f* ^( m+ V6 u* ?# d0 v- m% W2 C" r2 |6 |
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。& x; |. M5 ~( _' c) J, p! C
* W0 t( K/ ^+ N: d3 N
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。1 o& }0 S  W% D( {

, o. V; u1 N6 @& q7 v7 ^9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。! V( d' r/ \" z
& p8 w* i. p" j  T/ V. |. [2 J8 q
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。! U6 d7 }; ^2 U7 J" t8 z4 K- Y4 \
* Z0 ^/ B  A, K9 r  n
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
4 ]- m1 u. w' M, d% n( M# I+ n6 x, d
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。' e: R/ V  c! Y

( U; S0 v$ f5 z13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。& Z% Z0 L4 s6 e( P  M, u

& Z( z0 c! ^' ^6 n; i9 h14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。6 b! o+ X: m! I; `

4 v# u8 x5 i* [! _' L15.函数nl2br能实现这个功能。

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