返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
" k5 K+ r8 Q; |1 ^8 p. ?与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
9 v7 t4 t/ S, E" k/ r5 A一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。9 H% l/ x8 U+ k- h' ^6 o

* k5 ]- C! v- C# U& D
1 ]8 `+ A/ W8 p! N, b. F/ @问题
+ n" U, i0 m/ h  b' R6 A8 _: H) |; g; f8 g8 T1 v$ s4 m
1.如何访问会话变量(session)?( e/ g4 J0 ~0 I& w9 r9 {& A6 G

  t- G# F/ O. Z% x( RA.通过$_GET
+ J( g6 A# b' d" |* K& qB.通过$_POST
7 J4 O, V% b& D# R+ m( pC.通过$_REQUEST( }: e7 v5 L1 W# g0 T# f
D.通过全局变量* t; j4 V: V5 c9 v, _% C1 I0 r5 |1 u
E.以上都不对
8 D3 r6 ~0 d1 z4 \- f) k! m9 P8 @( A- Y8 v5 G. k. ~) S

" D- j4 s1 \" V1 f0 G: F2.哪个函数能让服务器输出如下header?
! l) B9 N+ P, P) |( v# o; y& _7 n" K4 x! F6 n
set-Cookie: foo=bar;
7 E) e$ B" `$ i( D: w- u5 Z  c5 ^1 }, w" B' Z0 J
答案:_______________- f2 W9 X2 `, r; S, ^& A
+ o. m+ f2 }# O1 u

% N6 F( e& k. i& u' U3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
& U$ h& T, V& k% I. y6 q
9 P6 t; N! s1 W3 @  i, p: x) k0 |A.通过HTTP_REMOTE_COOKIE访问
* z# o9 S" u8 c4 p" y/ e/ D4 fB.不可能  W5 r4 N0 x9 {% z9 n6 W
C.在调用setcookie()时设置一个不同的域名
) m; ]: V- A0 v* T5 D* L; p& L/ JD.向浏览器发送额外的请求
' H, C( ]5 K+ VE.使用Javascript,把cookie包含在URL中发送
& A/ W8 P2 s8 j+ j* g
8 a* Z/ M$ G' ^: g4 \0 B8 D" m/ a( H" N0 ?
4.index.php脚本如何访问表单元素email的值?(双选)- ^8 p6 b* t) B: Z* a  ]1 k% }

5 q6 o/ H5 ^  x/ {* T: p+ X4 M<form action="index.php" method="post">3 f9 T5 c& y* L; o/ M- Q/ n$ {
<input type="text" name="email"/>
/ z2 A5 M) E3 U, ]5 v( h; P3 h" o</form>
8 B( A: ]) e' D" s
+ ]" P- ?1 h4 H& kA.$_GET[‘email’]4 I$ V: X3 M% E9 A6 Z
B.$_POST[‘email’]
5 P5 z# m9 |6 J+ e4 wC.$_SESSION[‘text’]& [% i; E2 Z; }" \3 S! f" F6 x
D.$_REQUEST[‘email’]
, B: s" r6 y4 tE.$_POST[‘text’]
/ G; L; S( Y. R( `% ^( ?
9 \, F6 J' |9 N1 J8 D7 {# w
$ ^1 d2 ^# |" K5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长: H, n* a7 T" w! I
B.没有变化
' k$ |  @( h) }1 X7 D" n, Q, @C.在浏览器上打印该字符串时,尖括号是可见的
& c# r2 R* a* m5 o  _D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见% T$ h! Z7 H3 @1 }) C4 |
E.由于调用了htmlentities(),字符串会被销毁
0 ^* H' v$ L. j! p3 n$ m0 v" W1 w: {. L# M
2 k2 }0 U& R. f+ c
6.如果不给cookie设置过期时间会怎么样?1 G# d; q6 |8 U$ C, l- S, z
+ B* y1 n5 r+ Y" n
A.立刻过期  ?% \/ t& W% i! [; h9 C; S. S: ^
B.永不过期
" j5 O4 J" ^/ [5 i9 n; ?8 ]. _C.cookie无法设置
+ m1 m, [' B: ~D.在浏览器会话结束时过期
: Q, u( d4 g+ X& R. v' xE.只在脚本没有产生服务器端session的情况下过期" B* ~3 x, D) t  N1 R" e8 W

; @) E# l5 D* z: v( Q
' ?. T, d: {: f% Q& @; ]! y) k7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有- G9 t9 U& Y) ?5 {& y
B.Array" d* U/ V* l: ]0 T
C.一个提示
$ ~4 S1 u: E7 D8 \3 {D.phpgreat4 n, F+ |! B" J" Y. G
E.greatphp& [- o& v; I* V
- p8 h! f2 N7 ?
' O; N# a8 f/ u( x8 ^. Z
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?3 j7 l* F9 ^( b$ Q6 D

) w: F$ x2 W3 zA.这两个是明文传输,之后的信息加密传输0 \$ \6 o  i# |! W- Y: m
B.加密传输
) f: G1 [6 ~+ @# G) UC.URL明文传输,查询字串加密传输
% {+ A& E( J( x9 x1 MD.URL加密传输,查询字串明文传输% U) E, }2 n; J# v- L
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
' N+ C- Z$ ?8 s5 z1 U% q- u
4 R: a' [% l( d- Q8 ]. Y# S5 h, U! ~. y6 o* S
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
  M7 T& |  }0 n$ G* E  Q7 [+ s$ G- d' C2 C4 p
A.它们组成一个数组,存储在超级全局变量数组中
' }  @! y$ H" I: O, |! i2 @B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中: ]* j3 E7 P# V# \% V$ W8 E) c# t
C.第二个元素将覆盖第一个元素
4 l# M# O# t: k& ~  {( oD.第二个元素将自动被重命名" Q: r, H' Z( X0 z. j: g
E.PHP输出一个警告
1 [, O/ f8 d1 r4 O
9 C/ D4 R, K! J$ ~
6 D8 D0 u2 @6 G* H10.如何把数组存储在cookie里?
* T: \: r) A9 G  G  q* V6 G# m, F# O! t: B# \
A.给cookie名添加一对方括号[]4 B0 Y! d; M  B* \* K! P
B.使用implode函数* C: u$ V' d9 M# X% g
C.不可能,因为有容量限制1 L. M2 U# D( p' }7 R' n
D.使用serialize函数
% i$ Y, D' Z6 w4 G. rE.给cookie名添加ARRAY关键词
0 _0 l2 c3 r/ e  m: z" W" P
# l8 [, H0 N% a. N
% X9 M" o6 z" R1 U9 p: q  L11.以下脚本输出什么?

  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
6 Q  y6 Z" s/ V2 I' a6 F# R$ ]B.1234567890
! X0 u& m) w' k' ^9 e% bC.0123456789
8 b2 {) x- U8 L* K9 O4 `6 bD.什么都没有
% f' H4 Z/ ]: ^$ y9 ?0 {E.一个提示
& J7 [/ {; V, B) t: C" }" ^* l" t; I8 ]3 I, F3 A
4 s1 M3 n2 Q% \. ~3 u& U' M- L
12.默认情况下,PHP把会话(session)数据存储在______里。
& A2 N( a- o' C6 T% |' P+ T; ~4 o# E4 H  g
A.文件系统( A4 _; V( X9 I
B.数据库
  t0 ?  T0 ?% Z$ |# y* CC.虚拟内容6 B9 N6 p. c) |3 j0 u" I
D.共享内存
4 G, m  y# C; o; ?* |! H& VE.以上都不是& U1 \* j/ y2 p. j

- T7 y5 }7 J0 L' R7 l
8 n% ?$ u4 @& D( x1 x6 d/ q. k) ]13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
+ c6 h0 V$ t: B5 `% N! W) C  m  H9 ]1 g2 A9 W* ]$ [) c
A.浏览器的程序出问题了/ G& }- a8 p- r- U$ @
B.客户端的时区设置不正确+ Y! W0 T% R  b9 F
C.用户的杀毒软件阻止了所有安全的cookie4 R% l5 d( T% w; h" f. }; j
D.浏览器被设置为阻止任何cookie
3 ]7 C3 j0 s3 P+ @6 A/ ME.cookie里使用了非法的字符
/ {/ }; ?1 A9 H' L% L- G; U
5 Z, V) p/ z/ e8 o4 g
. `$ c' B2 g- t. t7 l: U6 b: X14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
5 I1 c6 `! R  e' F8 w( Z
+ |9 D' A3 F/ ~! Y7 `A.1440秒后
8 X0 ^$ m- n" V, Z* a6 K3 [B.在session.gc_maxlifetime设置的时间过了后1 a5 O6 }3 r7 D+ }/ o
C.除非手动删除,否则永不过期3 m: ~2 V$ ]% a
D.除非浏览器重启,否则永不过期
! p4 i$ u  V1 m" L, rE.以上都不对
2 i# W  B0 e/ o1 r3 o, U! Y
  Y$ d0 W: Q+ k( L6 r3 ]% s( ^4 F5 ?" i* u, A: u
15.哪个函数能把换行转换成HTML标签<br />?
8 |  Z4 d1 n. Q+ J* _
7 V, }- L+ I6 |) r* r5 _答案:____________
& h0 ]% `4 w/ I3 E6 r7 K
' F$ ~2 J/ X* E9 @1 c7 a$ W( i, g9 b/ x9 |4 A4 J7 d  R8 x
# ]: T& S8 D7 f
答案速查
5 x6 D! S8 O1 M7 h5 m0 `1 ~1:E6 [) @, d/ x5 ^% M+ j
2:setcookie/setrawcookie# d5 }! l: ^' t2 x* p
3:B9 o9 Q/ b' L$ A1 d. q
4:BD
% @- x; d4 w5 y- o5:BD
, l1 }! Z0 t4 x6:D
7 M  ^. X9 c; T% W0 t- `7:A
5 X! I1 a  L5 v8:B
) R) s$ y, ^3 V) h$ k5 k6 q- i9:C, Y; b/ U. X+ @4 c" H
10:B
# n: u7 X, N/ f( V1 v. C  i% Y6 R11:E
! h9 Z: R* z' k; f# G) A12:A0 i6 o& F+ k* g! y% \* R
13:BD
2 b- t7 H8 a+ p$ e3 w14:B  F7 N% Q' u- L- Z( R, z) x
15:nl2br
$ b" k2 O" B3 T# d: E# }
$ l" O2 y% |" [; Y1 r' |; K6 l& E3 U$ I
; L; m; v1 e2 z, m
答案详解
7 r$ e" t0 o2 W  _+ k3 o. c+ ]( P# @
+ h/ R) b6 e/ |  }1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。& s$ V: j- b. e" g' O
& p" q. J9 |- j: j3 l# X0 K
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
5 u, t! \2 F' j
8 {" c, e; A; x: L/ C" ~9 K- s8 U. M3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
! O/ F) c. ], S8 J9 _2 Q
3 r3 f' z4 c& S1 J7 k- n4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
7 Y2 u; }9 L/ o5 I% f$ U
' O8 z5 M8 P" w! h" Z5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
; @3 H8 @6 D$ T- x! Y$ |# z
% |, o$ M- ?9 c  f" J; |1 g6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
  d/ j7 e% \0 D/ I  C$ i# s9 {" ?% R$ h: W; o& z! v- ~
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
  J; X+ l4 C) g: T/ g+ m6 o& f4 v( i% h7 s. Z
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
+ S  c  U7 T# P
1 ]: ?" L: g  [! ^) k% C$ S9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。# U; X; ^# l" y, X4 X

2 u& X, q1 N1 W; k8 C10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
) ^; E# `2 G) K9 _* R& J1 m$ [, Z4 g+ {4 I
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。( z8 v( G) X" g/ }7 m; b
. W* f$ D; z  G2 F" T7 `: b& S
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。' h: Z( J2 ~1 ]! X; m

; \) X. h; P; F* B! u& K13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。2 I& I: ]9 A6 i# `
' l7 }7 L$ R# ]9 H6 q" q
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
- l* p  b6 Q) E% ?  v2 {/ g% o2 H9 t2 ]' ]. G: l
15.函数nl2br能实现这个功能。

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