返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
8 }% }: R. S6 w与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。: N( l0 L4 p7 ^) V6 Q
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
, I  @: A' u1 H3 b( i9 H  E/ f) P- Q: F, d3 _6 A/ q

% u: N6 R+ q4 R7 y9 d问题
. ^) N( [8 ~6 z& l3 i# |' `. C6 L8 c" |2 e
1.如何访问会话变量(session)?
& i; }! ?. h9 z- p/ H+ ?- b9 q2 z$ J0 I
A.通过$_GET3 O, c! n9 b6 x2 ~
B.通过$_POST
4 O& A* `# h4 k5 x/ \) ^! i* UC.通过$_REQUEST" Z8 F+ V& X) e. q( ]  t/ c
D.通过全局变量
* T) N# c9 K0 u) {8 o5 {E.以上都不对
% h( Q4 b) u5 ?6 b
% V# o; ?3 k2 k0 Q9 W. g+ u7 m4 `* g' T/ U8 g; D4 {
2.哪个函数能让服务器输出如下header?
; e9 p3 x$ w# x3 C* h+ p, t0 @4 i- ~6 A
  L! J2 ?' f5 t6 p% |6 N  Fset-Cookie: foo=bar;  S7 H, T2 Y- w  w

' n5 J7 r2 u% j答案:_______________
& d2 Z' \& x( q  E& X- c
2 }/ |4 n  h# R7 |6 R9 {
5 x( X6 u7 L# i$ [3 y3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
1 z# P* g" X3 j( a6 F3 S2 v; A3 V4 L1 f' [! k2 Y; L  Z! o
A.通过HTTP_REMOTE_COOKIE访问3 k# ]/ D4 U5 h' T
B.不可能
0 w$ V" p6 m) U4 o: G4 T7 pC.在调用setcookie()时设置一个不同的域名9 X- w: Q  l, B0 J
D.向浏览器发送额外的请求+ D: |& y, d9 j: o2 t0 V4 X+ l
E.使用Javascript,把cookie包含在URL中发送
1 f& }! r, f* g. B4 Z5 v9 h- \1 X9 g% ?9 T% x

) Z; c8 ?3 q0 j" j' r4.index.php脚本如何访问表单元素email的值?(双选)6 ~3 f- m+ Z" c4 \& Q; U3 D9 f

! ]" }. m) F7 O0 z2 Q<form action="index.php" method="post">
# y8 B  G$ o& W<input type="text" name="email"/>/ S* t7 S) u6 `
</form>
! v) q0 ^' n5 S
0 S( @3 Y& v  }( m4 }, AA.$_GET[‘email’]
" Q. Y- |- f. q5 [# J# `B.$_POST[‘email’]( O2 x( O# E# K+ U( P  c
C.$_SESSION[‘text’]
) R- X; K9 ?7 {2 {D.$_REQUEST[‘email’]
& [$ \$ N3 Z$ IE.$_POST[‘text’]& @1 p" ~7 x' [. x# L# {
! d  Q$ b! I7 l; A) \) T

* J  x  L9 T" K  E, l! h5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长5 `* @  }# V8 u6 i7 T
B.没有变化  n: c1 n# Y% }
C.在浏览器上打印该字符串时,尖括号是可见的
% H8 v8 _+ m) OD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见7 |+ f+ r/ n3 T' w$ N7 @
E.由于调用了htmlentities(),字符串会被销毁
  j1 o" ?+ m! `& e! n5 j8 u5 s+ A8 B) {; [' [4 W' H

4 e2 q7 q2 X& E( j  \5 y0 K, j6.如果不给cookie设置过期时间会怎么样?
: C0 K' i' Y" x$ J! U
8 W" U% }& B) s/ }7 GA.立刻过期  Q2 l7 c4 @" w; R: T
B.永不过期  G% _3 K) I! ]
C.cookie无法设置/ O+ C& D3 I# D% P6 [4 K4 {, |
D.在浏览器会话结束时过期
: l7 L! h$ a: jE.只在脚本没有产生服务器端session的情况下过期1 N$ C  ]5 K$ z! h

3 j$ Z+ G  z9 c% U" ?- \6 N" \  F- j8 J( G
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.什么都没有
( n, I5 A. ^- c# p* U: JB.Array# B! l# K3 p+ L" @: Y, Y
C.一个提示
2 ?& u, f6 q3 l& B6 [5 W! UD.phpgreat% d$ s& _) u0 L) }9 I  Z
E.greatphp' T: E5 n! W6 N
7 H0 [# J! H" m* ^& X1 r+ E4 a# X

+ n+ r+ G) i8 v/ [8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?' M9 V9 g# l1 r5 W( j( e
. }4 s( n' h! s- Y# u
A.这两个是明文传输,之后的信息加密传输
6 f  T8 q5 v) G9 eB.加密传输# C0 Y" R5 b4 f  F4 J& d/ M# B% M" o* H
C.URL明文传输,查询字串加密传输
2 B) u& t3 y4 W" {' Y% E, V; lD.URL加密传输,查询字串明文传输, K; ]/ F& G  m& N
E.为确保加密,查询字串将转换为header,夹在POST信息中传输1 p) W8 e  j6 o, q# S, C

: \2 }. \. A! e  [9 U; N9 ~) P
, _9 I' P( R7 J# @8 Q& c9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
; Y1 @* u- j- T4 V8 ^1 b. p5 w2 Q; N" k: ?& w* f! n7 z
A.它们组成一个数组,存储在超级全局变量数组中
# S$ g& G5 b* fB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
2 V2 B- h& l. G) L% ZC.第二个元素将覆盖第一个元素
, x/ F! K: @3 ~+ @; ]( @3 O7 OD.第二个元素将自动被重命名. C  U% U6 j9 A# @- W2 |
E.PHP输出一个警告( @2 L/ X" O2 q2 S# }6 T
! q; q8 _" A0 f) S
2 I2 T: g# T) N9 x3 f$ K$ Q( c
10.如何把数组存储在cookie里?
) D& S- I* E9 X7 T$ h% e4 G/ U: R/ }# E  n; O# }* l
A.给cookie名添加一对方括号[]- ?+ {) m) T% A- x
B.使用implode函数
$ }+ \$ x. ?. _% J1 z9 ZC.不可能,因为有容量限制
+ A( E6 P0 P, RD.使用serialize函数" d4 u, K$ o! r  B+ K
E.给cookie名添加ARRAY关键词
- R- b" i6 k8 ^7 }* S' r) A/ [, s* A

/ Q! z; s6 v6 N* c( E: W. `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
' B- B/ f5 Y7 S4 ^! D3 S7 c3 rB.1234567890
" R8 k, y/ S' e# q4 j) _C.0123456789
0 p8 T/ E( @# v2 GD.什么都没有
( V. D, K' Q9 lE.一个提示
2 O/ \. S- _! f
: M% u) l% B2 Q/ v! h2 H
3 L: U8 c1 C8 Y6 I* U8 V. S12.默认情况下,PHP把会话(session)数据存储在______里。
/ ~7 L! z0 s$ j' ~3 d$ B$ h
% Z# G3 S+ `# mA.文件系统& d# X. O3 L) w6 ]! J6 c
B.数据库
5 r0 `1 Q' G) A+ p1 dC.虚拟内容2 d" U9 Q6 M8 q$ d  \) L
D.共享内存
0 }4 ]+ y% e9 c+ nE.以上都不是1 a  |! B+ F# E1 Q
2 x% B: ~1 U! e$ z; ~3 a

  C* a, X$ X+ @2 e) N0 Y5 i13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选); w  U* j' C- |$ e' M- }" ^) N5 H

0 w3 n2 Y$ e" f6 V+ u. BA.浏览器的程序出问题了8 U5 T' h* L- [5 x) |
B.客户端的时区设置不正确  u: U  t! z8 ?
C.用户的杀毒软件阻止了所有安全的cookie
4 f2 R! R4 q9 b) P: _4 L& cD.浏览器被设置为阻止任何cookie, j/ ^3 K( [. V% H# n6 h% T6 n
E.cookie里使用了非法的字符
/ X8 s: Z# y* P! T% R0 t) X7 d/ c+ W; ^5 x3 j0 H
: ]3 Y& y1 Z: P- q! s" P+ p5 u* H
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?& Q8 e( W5 _' V  l+ y( Q  s5 P8 c- E
8 r& x2 _; j& s# p. N) F' P4 A$ r
A.1440秒后; g$ A. \1 t: S9 K+ K
B.在session.gc_maxlifetime设置的时间过了后. B6 ]/ p; u0 g. f, b! p& [
C.除非手动删除,否则永不过期) C6 p$ A+ K. G8 _9 W" n  j
D.除非浏览器重启,否则永不过期
9 e( c: V- p% k# ]E.以上都不对" R: q/ S5 j8 v# N0 B% n! H

' t8 W' F* k! \! i! c
6 z$ V1 G; b1 p: s0 i$ k$ H15.哪个函数能把换行转换成HTML标签<br />?
7 g" a' S* j+ P' H7 |
9 _' [5 M2 ?: v# ^$ c2 Z答案:____________
9 P# B% ]! _4 `9 X, s: |5 e' q. s
2 B; U" D1 G" W$ I8 d+ c
1 ~' X9 R, r4 W
6 ~' m) Q2 i0 L答案速查5 R) z& _* L- Y) m# V
1:E" S0 t2 [" `& d9 \7 N8 q2 m# I* b
2:setcookie/setrawcookie% P1 U8 A' V% X
3:B
" ~7 r% C2 r% z8 X) b: l4:BD
+ {' e/ h" Z: O$ T7 r/ `; g5:BD, L+ O! o/ Y8 K; c# L$ E! N
6:D3 q( V, \: c* e- `# D3 V& Z1 p
7:A8 C/ N: r- S. n1 Q3 E. x
8:B
- S' Z7 t, d& x- z/ F9:C" v6 c* t4 `$ C* f+ X: K6 _
10:B; _  Y4 k4 i2 w4 t/ j
11:E
" f* O" }* q5 q9 \$ F) |* N" y: V12:A: O% g5 T5 s; C" V2 L# `0 S& g9 B
13:BD$ \, l& ^! ?4 F9 Z8 U
14:B1 x) f/ Z' ]7 @' C/ T7 Y$ i% D/ {
15:nl2br, ~9 z+ G( O- B. d- Q$ B3 [
8 S. E! ^, a/ ?2 l9 G7 w
6 e! K  R8 u5 j. t3 j
. t5 S1 W! n5 a; ^
答案详解
2 F! U9 _: O9 E- ]5 O& K& @. v$ _! h& p$ W, E/ A
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
* M7 K* I3 Z: ?9 n9 f6 \
# c/ T7 [0 }; |% J$ y2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。, m: T* \0 }/ X5 T# @# \
1 H& Q6 \- ^9 a+ e' b- j3 ^
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
) F0 ?1 L% ]( o  f+ E5 N
& _* d  N) V& q4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。+ z6 t1 T% K3 w# B& o

' L& ~5 j/ _3 H6 c* h0 i3 ~% L* T) i5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。" y& i/ g; C( |* l* Z, j/ K, \

5 f" @+ Z5 \5 q( c$ R6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。- Z8 b2 y) A6 Q: T$ p' a) U9 [' D

: H. @" u: m9 A" C* a3 V% @* j! k4 k7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
) p- d; q* i' V& g
$ y4 A% u+ z" b, k4 s+ ?( w8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
: x! |" }% P& G* X/ H6 n) j* F8 U
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
: o  n# l& D# Y4 e  _0 E5 U2 `
9 C0 V+ I# [; x' s6 r5 m# y+ V, A/ L10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
. v3 X2 _8 h4 y5 r$ ^& U9 l% h1 ]9 e5 [6 J1 r- \2 a2 `5 \# ?
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。& a2 m& _+ e" Z6 L% D. X* a/ X
0 F5 u1 T# `4 h$ h# O
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。+ O+ ?; U: [- u
- p5 e$ @/ |8 T3 w
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。% I1 G3 C8 a) u* ^
# R: c# r6 [4 L, L& a" s
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
, ^5 w7 F) o1 R& B: L
! [8 B- c2 P+ \5 n. F! |" O15.函数nl2br能实现这个功能。

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