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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
8 c" b8 b6 ^4 H/ b0 j' P6 k与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
7 S( T) Z2 _1 u# L( C6 B& U一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
. P, y" f4 K1 L! B# z/ P) b2 q( j/ V9 h  Z7 t, {
0 ~: h& F0 _& E2 H) F8 _* w
问题- q" G3 A0 _9 A+ d1 {( g

( o) ]7 ]' {4 u  c/ O( H& e0 q1.如何访问会话变量(session)?% m4 s. \8 c$ F7 F: [% _1 ~

) L6 S% [) g( F! |; J, `* C  F" C6 P6 tA.通过$_GET. J2 a' S' e+ T/ J( w- W) [
B.通过$_POST  u- d8 Z# C$ |
C.通过$_REQUEST6 \) J- t7 o! }$ d
D.通过全局变量
: q. o5 N: e. v  mE.以上都不对
0 \2 T8 {9 ~; K+ T: U2 y; [- q6 r6 @3 X* E

$ ]! q+ b7 m/ P: N9 U2.哪个函数能让服务器输出如下header?3 w* m) p0 E$ E) Q% o0 q: ?

; p2 w2 M# I, S" z3 Dset-Cookie: foo=bar;
$ b2 n9 O1 i# ?! F, L' F: y, G2 `' t9 B- q
答案:_______________& J6 f5 z2 ^" n* ?
6 D2 o5 b. s3 J0 j/ w1 F% O. C

! [- F7 |6 v9 R3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
  |  {9 H' i, p- g5 E, V
% B+ ?, o' g6 c- |4 y6 H% BA.通过HTTP_REMOTE_COOKIE访问0 l6 P" d1 R8 W0 K- i1 _
B.不可能: p# c. i/ @% P' p1 h, @; [
C.在调用setcookie()时设置一个不同的域名% B& O0 q; z" k8 \
D.向浏览器发送额外的请求
7 f7 V8 G. G" ?$ [9 n, e4 yE.使用Javascript,把cookie包含在URL中发送* A: V& [3 F; S* G
9 _9 E/ |& k9 V7 }0 l8 p9 w

% c: U! m7 v- \  M4.index.php脚本如何访问表单元素email的值?(双选)
3 c! B& t0 R% u
) r* f+ b9 ^7 g' I3 k) ?6 v<form action="index.php" method="post">
: t7 e) C: _; {2 y<input type="text" name="email"/>; ^0 R/ Q6 K7 V
</form>
+ h) ]* a# u" q9 {
( H$ b0 |& f9 e9 L" v. H& zA.$_GET[‘email’]$ A: \9 E1 k4 i9 n$ u( S8 M
B.$_POST[‘email’]
) S3 b1 o# x' xC.$_SESSION[‘text’]& M: W3 b- v0 y  ?5 q1 s+ X  N5 R
D.$_REQUEST[‘email’]6 e0 F! Q( A  Q0 H8 K
E.$_POST[‘text’]) C9 _  N) W3 S% c8 a) Y, g

3 ^8 L& G' p9 y  U/ i) W- P: Z- R: e" M/ }7 S! U
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长8 F  {1 @! E" S7 }$ T! P3 F
B.没有变化
  c2 g, |0 w! X" B2 ?" t6 n  qC.在浏览器上打印该字符串时,尖括号是可见的
+ B. P2 y  W9 B. x) f  b/ TD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见" _6 Y4 j; R2 d7 `8 Y6 p
E.由于调用了htmlentities(),字符串会被销毁
( y! B, r! f& o3 n0 |: ]3 k% R) `! [6 o: o  p
7 F0 _) n, ]7 Z" _4 g. ?4 b+ v
6.如果不给cookie设置过期时间会怎么样?) ^: e: T0 G0 b0 o9 F9 ^4 l
# v  r: `- n7 |
A.立刻过期
8 B6 u$ F( P3 AB.永不过期
* D% a( j1 H8 hC.cookie无法设置, p# j4 A! O% Q  p- o
D.在浏览器会话结束时过期
# f9 W. Y1 C+ }% J. ]+ j# aE.只在脚本没有产生服务器端session的情况下过期- m* }. A+ `; Y% Z( o7 ^6 n
( d/ D) R! p) _4 e# T# u/ L

' V9 U. R- G$ U+ M( u, @  C; L* Y7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
) z' ~, i8 a, v+ `B.Array
3 o2 T. I( `, o! K; t& I; Y$ HC.一个提示
7 t, A) p( J6 s* m  UD.phpgreat
3 n# w% Z4 t  }0 `) R/ V/ TE.greatphp- X' m; C& T; G7 Y, r
8 \" u8 `; ?# w+ x& m! \9 K$ @

5 l" _) L5 W: |5 }7 ]8 I' a  q# Q/ o8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?& {: i$ r& b* l% A" q0 q0 A
' p  @  N! l9 x$ K9 n' p  h8 }4 l
A.这两个是明文传输,之后的信息加密传输
) s+ H4 q$ P6 P* ~6 L7 e. O, {B.加密传输
0 X6 O( t. b4 L9 b) [C.URL明文传输,查询字串加密传输
0 u* U2 |- l+ Z, L6 q/ oD.URL加密传输,查询字串明文传输1 L+ j* ?% H5 p. T# @
E.为确保加密,查询字串将转换为header,夹在POST信息中传输# C/ t! w1 i+ B. Z  j$ b/ H! [& F' \
' _  s7 @# P! G5 f% ?7 Q0 ~
) K- A8 N* Q- W
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
; Q) ?5 ^2 s% P, H. a
2 G$ V6 k+ X. O9 i; h! iA.它们组成一个数组,存储在超级全局变量数组中
% G0 x, j' y* ]* L1 z' u: R& jB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
2 J% b. \3 S( E/ ^# n' _C.第二个元素将覆盖第一个元素) o5 y9 E" _& v! T% t
D.第二个元素将自动被重命名8 G+ f" r4 t8 x- @9 D
E.PHP输出一个警告
# p% \* ^% V* m$ ], \) T+ W, r$ U' S5 ?$ g
6 I7 M, P7 i5 b. n( `
10.如何把数组存储在cookie里?* H5 Q, m' u4 D% W, V% _
) z5 Y2 M) W6 d; Y; x
A.给cookie名添加一对方括号[]9 j% i; v5 R# g6 v- J# k
B.使用implode函数
' ~6 i  Z) y2 q: jC.不可能,因为有容量限制
$ P; V- c  x+ W: M- q3 D! W6 j9 d& vD.使用serialize函数
2 ?' s4 f9 B/ t+ ZE.给cookie名添加ARRAY关键词
* w3 r2 `" U$ G3 w" A6 B% x0 w4 [
3 `, w3 B3 S& v- O3 e' ]# i6 d! I" @0 e+ g2 d8 o
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
8 R' C% R5 u5 J+ P: PB.12345678904 }0 _- @0 X, [/ v& P( P. @& \
C.0123456789! F8 E3 q/ J, G2 v3 N
D.什么都没有" F2 W) l' c6 l4 q: |
E.一个提示- j5 _3 C+ A2 ?/ I5 B+ v

2 B" @4 _2 x7 k3 R/ D& v! b
5 X: Q# k# h7 W+ E5 h12.默认情况下,PHP把会话(session)数据存储在______里。; d! ?, P( S: X& ^

1 j/ w  P  o5 [7 i" [) uA.文件系统
; m9 l; r: v8 v# k9 u) ?1 p1 FB.数据库
' L0 C; t% P6 Y8 B+ m! s) TC.虚拟内容. v: p3 h1 @7 @$ K
D.共享内存
/ j$ V9 f6 G. a( z$ Q1 J9 I, |2 yE.以上都不是
' V$ ~* @1 M- i7 N4 y
' w, t/ U/ [$ i1 n8 s/ g; N: F1 d0 q, \
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
. j& ]7 W4 h! g* r. s: ?. x( V7 y4 ^% x. ?# C" h
A.浏览器的程序出问题了. r% z) Q8 k# s! D. ^1 \
B.客户端的时区设置不正确
6 U/ N$ z6 u9 m" O3 \7 A& Z1 e( yC.用户的杀毒软件阻止了所有安全的cookie
& V" _1 ^) k3 g  {; j& VD.浏览器被设置为阻止任何cookie# J3 m& x, Y+ ^( I
E.cookie里使用了非法的字符4 ~" I2 e! ?1 O9 V7 A

/ b$ y/ d. @& @
5 B, e, R7 T- o8 ?5 g14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?' N! A) d& F: x" k0 ]9 F
* b9 E. _* N6 l* O
A.1440秒后% p. v( b  h, t3 y! L
B.在session.gc_maxlifetime设置的时间过了后
! ^) j8 Y/ G. b& G/ G! c  [C.除非手动删除,否则永不过期
. B# `- O# B" ]2 P0 fD.除非浏览器重启,否则永不过期
: O% f0 e/ }" x' p9 l( [1 zE.以上都不对
1 A. e  Y" b+ H) r" v& D0 d
+ R6 R( _: D% f0 u- r, N2 T- a) b) r8 k
15.哪个函数能把换行转换成HTML标签<br />?' r2 \( h9 u  d% [
2 a: |6 C6 a: D! u" s
答案:____________
, Y  Y& D* K. Z8 ]4 }8 U. p$ j8 R. f
" _8 F7 Q& K: B, B
9 {! I. ~. I. c5 i/ W8 x$ e; X
答案速查0 P$ m5 w: `/ u3 j0 Y0 [+ ^) A$ \  J
1:E$ m. `5 [6 s; }0 T* D) K5 |6 w! Z
2:setcookie/setrawcookie7 l2 }1 D% S& P+ p8 K3 S
3:B
/ i8 D% _0 i7 @( g" p/ U4:BD
5 _3 E3 E/ [' E) m! X& }2 n5:BD5 s$ [# E' b: l% ?( o$ n% {; N
6:D3 A. E) W) v0 p5 E
7:A
- D# ^  E0 K9 ~* N# z4 g" d. B5 l8:B- ?3 s7 X, D7 }( I& j( \1 T# @6 A
9:C( s2 B  R, v! X: `$ r
10:B# A" o- \/ G! d; m+ D
11:E# p2 u* z% x2 {* d6 _- `. Q6 i7 Y
12:A: e1 V; L4 p9 c1 t) X% \' L0 N
13:BD3 f% s6 X. M! O: s
14:B9 x2 w3 A" W' D" j$ j
15:nl2br
% z" i3 I% R: L8 r* F# K
+ J4 X3 p1 l6 R3 l) Y! X) c( L0 D
5 v6 [7 O. H7 c6 U
答案详解, A1 c9 k+ x: c) l$ S  t  C5 t

6 N8 _5 i  O* f/ X) i1 f" d1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
8 B" ?5 Q4 k9 Q) e
9 M. Z: {( Q& @" x, e, D2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。# K& J2 V- u& H# [
7 d! Y4 }$ C) Y
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
( b# k% H+ Q: }! ?9 R/ |2 E* s. H: X4 l4 @; p9 A" t, Y$ i
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
5 l9 M) p: @4 |0 D1 D5 q* p5 M
" l. J5 S# D0 g* \: K5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
3 w" d! V& d1 P# W$ k4 S: J! U% U, w6 x% l* c6 ?
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。1 b  n9 l7 l) q+ ?6 {

; T; ]1 K5 M- G; d8 G. Z7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。, O" ^6 ]) j) ~! R5 v& P( i
! V" L( c( G  K$ H" e( M
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
% d# D" Q! x) ]2 @1 N
+ b- T  A! f  P3 T9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
' w+ l, c: r; ~2 G! H, B! |( J, x) u  F# A" b+ H* C8 d( O: }% Q$ A: U
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
! V! H9 T2 ^5 j  e  ]% @0 u" K% ]/ x, ]% U' L
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。$ T/ J8 @! Q" V7 U* p) r+ D& ?
4 Y) p, A6 r4 p" L8 w" ]8 l
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。  J5 y) l  g8 @  S) k
$ [  X8 ~8 ^1 L% \) l
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
& Z& }/ C; d  g, ^8 q, P
2 {& `1 K+ J' t$ C5 D) _$ d" H14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
; s8 X7 Y2 f) |. b5 c
$ G* D  ~7 c" ^" Y( x; S$ [15.函数nl2br能实现这个功能。

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