返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。$ }& O2 p+ [4 P$ v
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
% U1 u8 V: l, L. R# X一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
: V8 N5 I: m, t: ^4 c5 v
8 k$ A( i! \+ k! D5 ?8 t* {: a( [, _* H: u
问题/ e# b( d; K7 O1 `; Q* V5 P

' t) M) \  C+ c1.如何访问会话变量(session)?
$ z3 U/ L1 o  a2 g) T; z9 B, r: ^% @0 j
A.通过$_GET
1 {/ J  H" W2 T) D. C9 u# ZB.通过$_POST
7 [) O! k9 i" ?9 Z# _, ]C.通过$_REQUEST
& X9 L/ j. s4 p/ ?, f& Q, {D.通过全局变量
! G) h9 \: Z: a5 Y7 @5 U* yE.以上都不对
8 M0 A$ j1 u3 }. r' H& e1 z. [
3 t0 N3 Y0 Y& I9 |4 D4 @4 j( |
1 Y$ q& `. c) a  m% e# `7 x4 O2.哪个函数能让服务器输出如下header?
8 ]4 e: }: V) ~  j4 G6 C2 [6 g6 U! T% B8 G
set-Cookie: foo=bar;
3 R" }1 f3 d6 x2 z' y) X# k/ v
4 Y& Z9 @3 z5 x( U7 t答案:_______________% ]+ ~  x! E3 q4 W' R
* B7 j5 I( T, h9 i- c% F

- B. e& t- k+ n0 T- p$ P0 h3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- a" e( Q7 N' u; v3 O; t
$ W- ?3 ^: [0 a6 K# D1 R; v2 KA.通过HTTP_REMOTE_COOKIE访问
# I( w# p9 }  C/ RB.不可能
4 i; P( f) S. @* q3 [% Q3 lC.在调用setcookie()时设置一个不同的域名
9 W( b! b6 r7 Z; c6 T0 ]% \D.向浏览器发送额外的请求
# a* u8 c, ?% H% O7 bE.使用Javascript,把cookie包含在URL中发送0 b' {3 m, S( z- `5 L* e
8 z3 Y: P. o) e/ G7 ?. b1 l
  }0 }% n  M3 M6 ~0 w
4.index.php脚本如何访问表单元素email的值?(双选)
- [6 u7 \% K$ y- G- a. y4 v5 t
7 X% s0 j' L9 y* E; g<form action="index.php" method="post">
6 U6 {- \, P6 M4 U6 U- D! K<input type="text" name="email"/>
9 F- P! d1 W% Z4 s</form>6 N* C7 w+ X" E! N1 \# O2 V8 W
; o; J; K  |4 O  o$ i
A.$_GET[‘email’]" s6 i2 r4 o7 L! d" E2 t+ I' {
B.$_POST[‘email’]5 l7 p3 K* S: t- W
C.$_SESSION[‘text’]8 t- z/ D& O! U! i% i
D.$_REQUEST[‘email’]
0 _: i8 W# A6 V1 d( VE.$_POST[‘text’]
& @6 N; b, A8 l9 p4 H" v4 h2 i- ]/ _+ ?5 o% c  q+ _

3 r# K8 E' E0 ~3 u+ K; I( Z5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长5 K: ?" L3 A' p7 Q# n# c. S
B.没有变化  [/ S, `# F/ ^+ s9 Q$ D7 S  d
C.在浏览器上打印该字符串时,尖括号是可见的
) M" U$ O6 A" B" LD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见* D8 {& e) V' H8 q5 |
E.由于调用了htmlentities(),字符串会被销毁
3 H1 ~' B5 a9 j  C" W& [; j0 Q# J0 a& e  {2 l. S0 Z6 J; P5 `

' x& Z. U. s& ~4 n4 i9 N7 B: f' T6.如果不给cookie设置过期时间会怎么样?" J+ G) y$ D+ P# s
0 u1 l2 T; k! P" B6 B. I$ {
A.立刻过期1 M0 Q. B+ }1 n, J7 `
B.永不过期! g" X" B0 i' N' Z
C.cookie无法设置& U0 x! K3 |$ V, i" z$ E
D.在浏览器会话结束时过期* C, ]5 g1 i# ~
E.只在脚本没有产生服务器端session的情况下过期
! x$ j( v0 ?+ o6 y; _5 _
) U8 Q% x$ N& E9 @# C$ H
1 z6 d8 x: z0 i7 v1 ^" r, u7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
  d  {% `' Z9 rB.Array4 T, ]9 N2 K  q9 ]3 g6 F, v8 D& d
C.一个提示
) p) H' m/ O8 N, j0 q1 t; LD.phpgreat: a3 b. v- o& s
E.greatphp
; M5 ^& e  i6 \$ ]7 R* i) I3 U( s- V; K  a; C8 n  c" e1 C

4 P# E! ?7 q  l+ {. n8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
) t4 l/ H: t: }7 Y5 C! g. ^
6 [" _( a% E6 F6 i; @A.这两个是明文传输,之后的信息加密传输5 y8 ^* R" l6 W& v0 a+ e0 t3 y' p
B.加密传输
6 @0 N3 r% H6 y! \; TC.URL明文传输,查询字串加密传输
$ s8 h) h) j7 `" m- q+ f5 vD.URL加密传输,查询字串明文传输/ h- s; b& v- [
E.为确保加密,查询字串将转换为header,夹在POST信息中传输2 t7 ?0 ^' a' `

' K) M4 ]9 H/ f+ h& H" R1 {* z# y4 n& l6 S
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
. k- t3 d% U3 T2 f# m4 t5 y, d3 A( j" r4 S+ H$ ~' u
A.它们组成一个数组,存储在超级全局变量数组中$ |( y5 f* p9 e" Z
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
1 j5 d2 v8 v! a( d9 e6 rC.第二个元素将覆盖第一个元素
! c* m5 D- I! h( x' C1 pD.第二个元素将自动被重命名- e: m! ?/ {$ |. a# j
E.PHP输出一个警告
. w. m! a* R- |1 \$ y  }) k( ]) _" @0 o1 Y: E, K5 `  H  ~4 E
3 ~  r% R4 F) f
10.如何把数组存储在cookie里?
  r6 x( D" O# A  p7 A# S/ x; t! R8 F' l3 D
A.给cookie名添加一对方括号[]6 A5 p7 m5 j+ \* A2 ~1 @
B.使用implode函数
* q0 \! Q  ]1 [5 ^C.不可能,因为有容量限制1 k* Q8 C- p6 k) j, ~2 ~  J
D.使用serialize函数, k. s, W: ~: R! S! G
E.给cookie名添加ARRAY关键词
3 L6 y3 k" ]/ g' _7 h( k3 G& |5 G, p1 N( u, z3 K
- l0 M  E/ z% e7 y) h
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! L6 Q" y& C7 G
B.1234567890' i4 I' c; I/ U  W+ `
C.0123456789
7 p4 S% s* e% S: q/ A9 ED.什么都没有# |  u. @$ u- H4 [
E.一个提示5 l- }% @* ^9 J
/ A% s/ |4 G3 E; K# x7 s7 w4 j

- S+ K7 C( ~. [' b' Q4 N! n9 R9 y12.默认情况下,PHP把会话(session)数据存储在______里。
* R0 G: k" m2 Y3 H( h1 B$ L! Q+ a  a6 G$ x  t7 J
A.文件系统
* C+ R1 S0 Z- R2 `3 Z# DB.数据库
, Q3 g- P6 G7 c$ ?C.虚拟内容- K# c9 K5 V& r
D.共享内存
2 h+ _: |1 E8 [. {) J: c) [9 nE.以上都不是) A& B8 b' K9 W
+ L% j1 s1 ^% S. m. X6 m

5 ^* D0 `2 o3 }1 N7 T3 Y; D13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)1 V6 V" F: e) m2 T7 b
7 G) g  O1 S( u* \% T& q( d
A.浏览器的程序出问题了
$ U/ B* K5 @5 I# [6 JB.客户端的时区设置不正确
. T, X3 Z  V9 u0 Y& kC.用户的杀毒软件阻止了所有安全的cookie/ N  s: b: @$ S/ p/ [% f& w2 H
D.浏览器被设置为阻止任何cookie
3 N5 U' u7 x; D8 V* FE.cookie里使用了非法的字符% {  D, Y/ [4 N! J
* D8 J7 s" s+ j% z/ O0 Y/ |

; p* q2 e: l/ X4 I% T; L* [: L1 ~14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
' U3 i8 ~' l/ \" J9 J) p4 L: H2 |# E+ `4 E- q6 P9 L
A.1440秒后/ G- k9 f+ n9 o
B.在session.gc_maxlifetime设置的时间过了后/ [/ U! `  Q" ~
C.除非手动删除,否则永不过期
# Z/ V2 `6 S% RD.除非浏览器重启,否则永不过期
) S( I- }* V: J( N2 X* I6 JE.以上都不对
" u* `9 ?4 B+ c& H6 K2 y! K+ R" O
/ W  s; ?% C. X5 d* y8 |( I9 \
5 [" I/ @6 Z% g7 e' x15.哪个函数能把换行转换成HTML标签<br />?+ L% |( a" h8 N) F

: o& Z/ {8 Y; W答案:____________' D; r( p/ G' `' N9 z  u

3 c. d! z# u1 ~" P* _! r. a) l; V0 q

/ y. ^' [; [7 @, j答案速查
# a4 r6 }! W0 U1:E
5 Z  A! u- U$ F; n$ d2 }2:setcookie/setrawcookie* T: M, W3 P+ |0 Z! G4 \9 T* {9 P
3:B
+ H! L; q" f3 R/ T4:BD
! L! I7 H" K" h# C5:BD" w) l% I! u4 ^7 Q
6:D) z, I: L4 c% }3 F. F
7:A
# r+ p* Q, v6 x8:B
7 m3 h0 R+ y9 R( T3 d9:C
6 }2 _! b7 `6 X9 h' Y, T2 k10:B
" H7 i' [& A4 ], C11:E
/ q8 }; t4 l/ {0 s12:A# q, v" w& u3 M4 s% _8 i
13:BD, x5 l# p( P7 l8 x  v
14:B# `  C& R& X5 g0 g. s* d; t- d
15:nl2br  D2 f  s9 n# S  y3 d- x
% A% n$ J5 w8 Y0 Q) t9 }& c4 O+ p0 j
% N/ p1 j  r# ?" o  @
) x% |+ O5 u) O- K$ F( M5 ^
答案详解
& T1 T: J" u3 W: x: L8 T" c, j, U6 F) `. W. e% B4 a
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。% s9 V- E7 }% }7 \2 u7 M1 r

& @5 V, \! T8 u7 z& ~2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。. `( Q0 v. Y; L7 j
: K$ e& N9 \/ E  }7 B2 O4 y
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
; k3 H- g' ?* m( v# T4 X! }# E) E
+ H& I0 t& f+ f" J$ Z% D7 n3 N9 Q9 W4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。  R+ A5 h! b& `
+ E& A- U0 N( V4 H& r5 E0 P6 U
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。" f/ ~4 U& L4 ?/ e7 P6 a, ]

5 y8 u7 n$ _9 H6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
8 ~, m9 t1 v/ H3 t9 @) ?) p6 d1 Z1 t& p6 {3 R3 ?3 Q8 X9 T
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。. g" H! F. J, w9 Y5 _3 T
9 j& C; J% O; w1 t7 L
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。; W# a) E5 h- a: x2 E  t

3 G4 }5 d3 z, a* {9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
2 ^# L/ g. z8 ~. e& F/ |- Y$ {; k+ ^8 E% i- T& J+ x
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。3 R0 A6 Y; ^* N, o, \

+ }; j( w: u8 W' `, x6 A9 D11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
% ~  `0 v( G" L3 F4 y
. N1 {, ]. G: b" n6 P12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
" r' ?5 B( r8 p* a. `8 ^# B+ d
$ ^9 S/ Z" H# [; Y+ s13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
7 k1 ?; J$ y! r' F, u1 G8 g8 z6 |/ J: J
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。- U* g. g5 ]" h. v9 F" t( W6 `

; I8 b% @5 ]" t; G- @15.函数nl2br能实现这个功能。

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