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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。, {, e+ X8 P# l' @; z; k4 {& T6 J
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
4 }9 Q4 E$ {+ D# a5 p一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。8 i$ |: ]! _0 D6 }

; F* f- z  K1 s) }; d) \# v2 T* x- T+ D+ p# q7 l( D
问题+ j, Q' V9 Y+ ~: w9 G5 v3 B8 A

& R2 j1 _' H* E) c! L  E# M1.如何访问会话变量(session)?- u) n9 \0 s9 k  c& E% V: c

: k$ b( F( T" ]5 \" v& AA.通过$_GET7 M1 a  j+ T  t5 {- n, s
B.通过$_POST
9 g! p, z3 F' w; v4 KC.通过$_REQUEST5 R, ~* J- n" k$ u
D.通过全局变量
/ T3 `2 C; G* B. [5 C+ [+ s! iE.以上都不对, E, }( }( D8 x& S
! Z/ G; q4 r$ `- Q* \" F) N
! f& Z0 {/ G# K% I
2.哪个函数能让服务器输出如下header?) o+ L# I. C7 a8 t' G
$ ]) Q; L. ?: e9 }9 M" [: u$ a
set-Cookie: foo=bar;
( c6 Q% g; Y8 v  j( R+ j# N
) P9 q" y4 y8 r1 m4 b0 v( q答案:_______________% s, e4 z" {( }! [, [% ]8 V
+ h; t0 T, ?5 n

2 X* {! y' J2 F3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?# z  [" q" |' W' x# T5 t8 V3 C
& Q; p! k" n+ {* W" f: f
A.通过HTTP_REMOTE_COOKIE访问
4 u+ R4 J- ?7 d! FB.不可能
& s$ D! J7 a) p9 [C.在调用setcookie()时设置一个不同的域名
: m* A& F6 @" }! qD.向浏览器发送额外的请求
: Y4 ?/ m8 a- _8 o  A2 O+ \0 @$ mE.使用Javascript,把cookie包含在URL中发送! Q0 g' c4 ?5 |, W1 c1 h
9 R# @! V6 e) A, ~! G9 C
) a$ Z  V3 f" s: X; e7 W. y# `+ `
4.index.php脚本如何访问表单元素email的值?(双选)7 J1 q0 o* M+ y( w- y$ ~7 w4 ~* }

2 ^/ s- e/ E' D/ H* W9 `<form action="index.php" method="post">
. W! l& p7 U: q, `9 G! @/ s<input type="text" name="email"/>: }8 h& ?& v. n  v- H* B0 `
</form>, Y' Q3 p: L5 @

! v4 _( ]+ H3 G& L0 E( `A.$_GET[‘email’]4 ?6 `" i- b  A2 I7 x( N; W% K$ l* w
B.$_POST[‘email’]* {* Q* \5 p& r2 q
C.$_SESSION[‘text’]8 Z/ h. z2 Z3 |6 M: O
D.$_REQUEST[‘email’]
4 ~' t6 R3 C! b# A8 c+ f/ G5 Y6 S4 oE.$_POST[‘text’]1 f  n; k& j5 k; M- a, }3 @
0 `8 o+ o+ i6 _5 ~
2 j4 n" J) |6 b: e/ o* F, \
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
$ m: \  a' }5 _; MB.没有变化* b  S/ j* a2 [5 e* |
C.在浏览器上打印该字符串时,尖括号是可见的
* ^- E" M* A* z6 u- SD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见" j: u7 p/ ~7 n4 C7 X
E.由于调用了htmlentities(),字符串会被销毁
0 G( m( [& L9 d& e; x& d1 w9 R3 H; k* _+ @9 G' d  F
( h' m: Z* ^- e2 S( F$ g
6.如果不给cookie设置过期时间会怎么样?; W7 V  C& x' B( F/ r

! i% ?$ H3 m, X* gA.立刻过期
7 i: q' ~0 E( l  h+ ~9 s: ~" WB.永不过期+ }5 a! I6 u+ i/ n, x! N* Y. _9 I
C.cookie无法设置
4 j0 t1 ~' g6 x% h: H. e. f; D, KD.在浏览器会话结束时过期
9 b; d9 [0 h0 n# B3 WE.只在脚本没有产生服务器端session的情况下过期9 n" J8 a4 {. g
3 R0 z! b' G0 T0 c
' L8 Z: ~5 r( 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$ G) z7 ]' z; }B.Array
3 |( y2 I+ h1 z5 w$ tC.一个提示
3 z, q& h0 _' b+ M" q+ oD.phpgreat
% V8 G3 C( L5 ^" k! iE.greatphp& r  ~2 e3 k* w; \
5 {6 L7 q3 }. @; [' k8 ^( L

6 x& h( j! A9 n! d$ h8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?; S8 k/ p% F; w: ~" b+ Q" |0 E

! r; |' a. b9 b6 K/ j4 J- ~0 aA.这两个是明文传输,之后的信息加密传输( Q* h0 F$ f* L
B.加密传输
& ]/ i7 w3 Q3 j- s$ m7 i  HC.URL明文传输,查询字串加密传输7 q  J" N9 U% ?: T
D.URL加密传输,查询字串明文传输
1 X) M6 ]6 s! Z0 M* U" Y. E$ C* YE.为确保加密,查询字串将转换为header,夹在POST信息中传输
1 P9 G3 B, E& q6 d$ ^( T2 C/ {- }7 F( G) z" l1 \; q& C% p
3 d9 Q' I, x0 g% m! c) E
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
, c* ~3 N% |% O$ N6 w- C* K+ d+ o5 n! {! q. [: x
A.它们组成一个数组,存储在超级全局变量数组中
2 c# C% K/ |7 EB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 M- l; @9 \; R9 n& R* e# g8 u: tC.第二个元素将覆盖第一个元素
: ~1 p, K5 m+ m5 t- HD.第二个元素将自动被重命名
8 c+ C- n7 ?2 \E.PHP输出一个警告
. u6 P; }5 p  r' a. l2 B+ o9 w8 k; U0 n& t
( w0 Z) `# L& x
10.如何把数组存储在cookie里?4 H4 X9 ^" l' e5 O& ]
0 E4 ~, ~" Z. J9 N3 }8 k0 |
A.给cookie名添加一对方括号[]
! l7 p0 \! Y, Q! S( j: D0 PB.使用implode函数% }' O1 u- n" B0 ~0 z
C.不可能,因为有容量限制
! d. u. \! S9 A( }) m- TD.使用serialize函数& Z$ K. O) {) N9 N  U& a
E.给cookie名添加ARRAY关键词1 ~/ i- |6 L9 t  A2 l- w
/ d+ a' U8 |) y, A
6 g  W+ u: Y4 J1 ?
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.123456789105 v- p" }, c* s
B.12345678906 u& Y  N6 _/ f8 g" G3 p2 r
C.01234567899 j& E  _& P; }% s& _, v
D.什么都没有3 R! U9 d# P1 e9 X$ C) S8 C5 ?( q
E.一个提示& y# Y" o% p( C$ y5 h6 U9 O
8 D# o) R! |9 E- |4 e0 H% Y) ^
! r2 `8 N7 a( {6 q
12.默认情况下,PHP把会话(session)数据存储在______里。$ @5 _% d  m$ R. z

: J! X6 ^/ }& V  t0 S3 MA.文件系统
7 S) g/ t& q9 iB.数据库
1 q, _8 O; R0 T1 q3 x* J/ pC.虚拟内容' d; t4 ]! R9 y; u6 M
D.共享内存
' |' P8 l# u, ^4 H; R$ wE.以上都不是% G. Q0 a+ v& X( i

8 _% P- N4 g: Y" J2 D- @2 K/ @+ l% p3 z, w/ k: r* i2 o* \2 i! v
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)/ A7 L- c+ t7 ]8 u; e8 l
5 U' Y  F* n! S. w4 w7 L/ J
A.浏览器的程序出问题了% R% W4 L' o/ C. j4 `
B.客户端的时区设置不正确6 r( w( o  z9 i8 ]* R4 R/ u- @( i( W0 W& t
C.用户的杀毒软件阻止了所有安全的cookie# c, d! W8 ~. ?8 e8 G2 E0 B/ a
D.浏览器被设置为阻止任何cookie4 Q+ @: [9 m3 @2 v" `
E.cookie里使用了非法的字符
' D, N8 z, o# u# }) {
. L# [; m, a1 W; T! M6 w2 ?* d) l9 K* g# `! d: F% b
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
" C2 a! |+ P! d1 e# P8 U* j) x( b- T3 I6 g# f8 s- u% Z
A.1440秒后
1 ]1 U* c. J' |4 qB.在session.gc_maxlifetime设置的时间过了后
& C0 L/ s! j# W. w% d1 |C.除非手动删除,否则永不过期/ C7 u4 H8 S# }" S# b% J
D.除非浏览器重启,否则永不过期
! H  {- Z0 t) [E.以上都不对; [: L/ b" J/ N7 j6 N" _+ }$ g1 u& z. v
5 X0 p6 J  a6 L. g3 W
- b5 |8 o# _9 ]3 a1 w
15.哪个函数能把换行转换成HTML标签<br />?; \# v+ W1 |( v4 O, S1 e

- D+ N1 T9 {$ z4 }2 `9 s- k答案:____________
& x1 A3 V; ]2 P1 F3 z; o; Q* ~& M, N4 T- J0 t
8 R% Y# c9 L. Q, }3 E, y

; u9 z$ \# H( `. m$ e" j* I答案速查
; o. u: l, l3 s1:E9 Z% e6 q1 n  C/ U
2:setcookie/setrawcookie0 x" O3 c. ]. P. Q) }/ ]6 y4 c
3:B9 r% J8 ^% \+ O
4:BD
( q# ~3 I, _. O5:BD6 J7 {( @1 u' w% h* f* k9 @! i+ e
6:D
/ \0 G. A% r  |7 t9 T7 o4 i" C* J7:A. ]7 Z, ~7 V$ R7 K# x
8:B0 i  I7 F9 _6 U. y' q: a: w) z9 X& k
9:C
2 C' S- u8 h6 L0 x! W9 z7 G10:B
7 v; W- d3 c" F' y: p4 E7 d11:E
  [# B  e- p$ L, U' z" k" v12:A
% W/ x2 h( |' A9 P" P13:BD
& h8 q) U4 q3 c4 I14:B
3 t, _/ ]% K1 c  t15:nl2br. ?+ L, h9 T9 Y1 R/ C$ T" v, Q
/ |( b3 V* X: X9 w5 i5 U$ k! \0 x

) r' }8 y4 R* ?
  P5 `# C3 G4 O8 y' v1 ?* h. f4 W4 x答案详解
2 C' S  x/ ^( C
% O* ?- `& |+ a+ W% v, a8 s  ~9 `1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
1 r( E2 ^* e5 V: V9 Y
# `3 V  l. s  v2 @9 D' @2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
+ Z8 R9 Y0 T/ k
/ |' \4 ]  e' e3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。  Y4 {- l4 Q1 ^" I# O- W/ d3 S8 T

/ F! S# N' n2 q8 K9 e/ t. v6 {4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。2 b  _- h) t* N& Y& j3 @* g; W9 a, q
  X  [+ [$ @9 \6 d6 T8 V" Z) K
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
% o- A  h& X: z6 Q8 L
4 \) B5 y3 f0 G3 H4 t0 O" C# X6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。/ O6 p  l4 D! |: U( K( L# ?7 i) C

( d  ~* j/ U% w1 C& {7 X  Q7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
3 d) W0 A5 s  a' l- w5 F6 M
; m: O% Q  `  j' I8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。3 b+ }* V# l/ @. ^2 F
7 m( t2 N; ]( u  D
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。3 M# T" Z* W$ t' V" {# I

- L5 q4 ~/ V7 v& J, x0 X8 h10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
+ o% G! f0 i. @3 j2 ^
4 t4 `1 `5 G) [6 M% r  n11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
( u  i5 d3 ?, B# L8 [0 D& P$ ^0 S! Z) {' a
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
% d. h+ V. U* T
  N8 Z9 T# ?! m( U, ?/ @13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。* n8 x, b0 n. ?4 ?( Z
6 ~! [" Z. I# O  y, c3 y5 Z1 @7 T
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
$ o/ _+ S" R# g3 M0 [. _; {# S/ y3 M) @! V: F
15.函数nl2br能实现这个功能。

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