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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。$ Q) P$ o. i3 Q. Y. L
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。& i: J. }6 [& y7 j. g# E7 R
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。, e9 b) c+ g9 y/ s( h+ M5 D

5 n) `' Z! j* d5 _9 I- j" {2 H- m6 m0 o
问题  \  p3 K' h; `: b$ m. O! W

4 @! ?$ h2 X# K* Z5 ?1.如何访问会话变量(session)?6 a* d- d" _8 a2 H
/ x1 z1 l3 [3 s$ [' `
A.通过$_GET; @7 }% ^  j1 W1 G
B.通过$_POST
( X$ ]0 r) L4 Z0 nC.通过$_REQUEST( [0 ]0 x5 x5 V( l. M
D.通过全局变量. ~% j# @# N" }" ]1 x
E.以上都不对4 D/ N+ d2 @4 A) ~
+ e" x9 T5 v- R& J' Z* Z

. `$ D; L# u* V# {8 W6 E8 ?2.哪个函数能让服务器输出如下header?
  ?  t, k% N1 _
, x5 ^! N- Y7 v+ \set-Cookie: foo=bar;! a8 t- z$ V7 b- J  I; M
! P) W1 ^. ^5 G4 p. W" z$ |
答案:_______________
( F& o5 q6 v8 e5 V1 G+ c& @
8 U* i2 j! g! J% k/ P; X% p, e' U! I5 M3 D
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
* d- q1 @: C* L8 ~( T4 V( ]
( `3 b4 J$ D# {% I! Z) X0 rA.通过HTTP_REMOTE_COOKIE访问. W1 |( |# f* N, S$ `6 d+ P8 k
B.不可能- `: \6 y1 T8 q- t
C.在调用setcookie()时设置一个不同的域名  [  d; h8 x0 c2 d3 s  e
D.向浏览器发送额外的请求( \& f9 w/ s' S' x. {5 y& Y
E.使用Javascript,把cookie包含在URL中发送
; Q% |! B+ Z! V- @
' G$ E! ?! @! r) w
. E1 l% a9 D$ _. t0 X; B6 Z( `4.index.php脚本如何访问表单元素email的值?(双选)5 e4 `7 d8 U( n. z7 e: o
% I! j3 E3 T6 {' I. n8 A. u, {
<form action="index.php" method="post">
! y1 P# B' N& ?# V& d( D<input type="text" name="email"/>
  E6 Y3 l/ d# z0 e. _* W</form>
7 m+ b! q6 O) |
' ~1 G% Y/ d5 n5 _2 J' s( X3 jA.$_GET[‘email’], R" F4 E7 V9 d" f/ X6 X. J: t
B.$_POST[‘email’]( }: r$ O4 v+ ^& ^, _  h* V
C.$_SESSION[‘text’]
3 o: Y( R. y+ J" S( R" pD.$_REQUEST[‘email’]1 a. \, ?) m/ t: r7 h- k$ Z
E.$_POST[‘text’]
$ C0 O/ L# R! @! N2 `4 [, u0 v& n# B/ q5 \5 p/ D0 M$ D# _

8 E* T5 F: F9 {' g' y+ `5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长5 G' R8 g) |- U5 F2 K# t
B.没有变化
( Q% P% G0 N1 [  I- x3 U( VC.在浏览器上打印该字符串时,尖括号是可见的" U" F& u  p* s/ A6 \# ^1 _
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见" h+ A4 _1 [/ R: K; T% N
E.由于调用了htmlentities(),字符串会被销毁
1 n- Y1 R( J2 h5 s9 n; ^# J! `
4 G, G, T9 S- z3 J" W& z
* g8 O. N- r5 @. w& G3 x6.如果不给cookie设置过期时间会怎么样?
& f  U" W! c4 E! l& J
: G, J( O* r5 ]. E# [A.立刻过期+ V3 o  L! }$ X( _6 M7 i7 m8 u- N
B.永不过期! F# i! f5 F# V" p' ?+ x' g
C.cookie无法设置
2 X; ]% ?/ K8 N0 j! K3 j% ^D.在浏览器会话结束时过期! @( s; W- d4 Z' s  G
E.只在脚本没有产生服务器端session的情况下过期0 n, ^4 }( Q  J8 g
# O" ?, E0 p) l) n' c% U9 P; x

& d: x/ M# i3 r6 b9 k# L8 I7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
/ ]! p% G) d  t  T4 Y3 JB.Array' \" C- K. S. P/ x6 v
C.一个提示8 x" x8 q8 D0 {) o/ H. x; w
D.phpgreat
1 M8 V3 F! [0 Q# E- l0 eE.greatphp+ V- a1 M+ l6 [/ ~: g- \
! ?* W* U. v- Q
5 J7 {3 @) n' D
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
' N& C- Z. Z9 i* w; A& z2 R6 J$ m( p
- U# X% r' J8 H4 \A.这两个是明文传输,之后的信息加密传输
9 V* w" c) @. C4 E$ tB.加密传输
- Z& U$ S  B( zC.URL明文传输,查询字串加密传输0 U, a$ z5 Z6 ?. W. @. s
D.URL加密传输,查询字串明文传输# P8 S& d5 |4 M' B! @
E.为确保加密,查询字串将转换为header,夹在POST信息中传输! i0 F! I4 f5 V9 l
! N5 V/ S0 e$ X5 ?9 {8 X# e

# S+ U! C& t% e6 Q9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
, h" }; V# S' O+ ]: i- ~
( [) |  i+ s; ]A.它们组成一个数组,存储在超级全局变量数组中
3 S$ I, J% Z7 t% |/ vB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
  `& x7 n- y+ bC.第二个元素将覆盖第一个元素
  ]' c2 T7 M* @; z% |D.第二个元素将自动被重命名
" E3 ^1 P% e0 w- q) @9 G8 uE.PHP输出一个警告: L2 [- O* ]* o/ o3 t" J
6 ^3 F9 C) U  F+ |
3 r0 G/ X7 T' @/ n3 w+ h( D
10.如何把数组存储在cookie里?
3 e% f, W/ N  R& w- K% m9 U: ^$ Z0 V  I1 t2 q  C
A.给cookie名添加一对方括号[]6 |0 y: _+ f) J& ?; Q9 J$ F
B.使用implode函数
& y2 o! E3 l8 O: f: |  p* YC.不可能,因为有容量限制
9 u: u" t; C5 P* m! V9 @( E5 e: qD.使用serialize函数0 H, y* f* T' I& M; p
E.给cookie名添加ARRAY关键词5 e$ }, ~: I0 [! P, u& E5 D' Z

) m0 h, t! c4 c, c7 l, O* s7 n3 w: W" E- D. 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
* U' o6 |# x) I' r+ T5 }B.1234567890
9 K) v$ `0 e: L: S" `C.0123456789
$ `& H2 [4 Y8 V) j/ G" z" QD.什么都没有+ D: x& P& D% w) ]0 a* e8 v
E.一个提示/ U, a* C- o0 ]1 F1 _
8 y5 y4 M, z! t# t" L

  {) P3 c$ o9 M, h' w12.默认情况下,PHP把会话(session)数据存储在______里。
8 g- o! S. e: _0 L2 B; f9 d8 b. V- q( ~$ n( m9 f
A.文件系统
6 r! i- W& w% [. wB.数据库
, R8 Q3 s5 ^( {# n2 ?9 p. sC.虚拟内容' g/ P/ _. M" E& W1 D4 w! d
D.共享内存$ k0 n$ Y0 w* D  \1 ]  V
E.以上都不是
( K; ]+ v4 a1 a6 p
: u3 d3 u9 q9 x/ |! k: ^! m2 N( Y; r% @$ Z
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)9 X" v6 m- E; X  O7 G
* V9 @! u+ x/ a3 c6 |; z
A.浏览器的程序出问题了
! f/ k) |' x& PB.客户端的时区设置不正确1 x# a* C$ ~4 ?
C.用户的杀毒软件阻止了所有安全的cookie
9 k% b( ]) P( E: r  i, E& X6 z* ~: QD.浏览器被设置为阻止任何cookie
9 ?% Z2 D3 v( o; c. A- GE.cookie里使用了非法的字符5 ]! z2 M1 Q  N7 V

) b8 s: d" V1 m6 H/ h- n2 V/ a( ^
& F8 K2 o& [3 ]7 P" M7 {7 w14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
4 H8 h& f+ {3 q# h- }. E$ `3 Q0 B% X. h; k1 V; Z
A.1440秒后
% ?" d1 u+ v- A# _& x& ZB.在session.gc_maxlifetime设置的时间过了后
/ ?. ?8 O) G- K: D% @) {0 OC.除非手动删除,否则永不过期4 Y8 F/ c+ I4 q) `1 a
D.除非浏览器重启,否则永不过期
1 o! t" f7 N- o4 _E.以上都不对9 _8 b% r6 F- z! e5 A7 Z
! a) O& G) b3 \( u  J9 U% @
/ e2 ^0 j* C4 s  T6 c
15.哪个函数能把换行转换成HTML标签<br />?
, i" f! V3 o. V" q  d! N5 K( `( s8 D! D' }
答案:____________
, r* n" R' T( ]% z# i5 s; S) Y: y
. |% n! |8 C3 K2 q7 b3 ^1 L  q8 |( `% Z

) S0 g9 K5 w- U' |. T' @答案速查* ?: x! w/ p! |- M5 |$ _& M
1:E+ h3 H- y/ ^2 p; u1 g; {7 D3 i: h
2:setcookie/setrawcookie  o7 g( b) d2 d- e1 K
3:B
5 y4 ?* F+ Q' M# g& G4:BD9 j& @7 [8 ?# K" R
5:BD
( e# m1 B7 y7 D$ }# i6:D& i1 E+ U+ ?8 _
7:A
6 i! X$ Z( L/ T: M; G& v8:B
9 z2 a5 g3 S+ m1 R+ E9:C
* z( [# w  R( b- \" g10:B3 o7 t; j) p' O9 S: q/ Q5 ]
11:E* W, d6 ~6 r1 n3 R; j; L, b
12:A
* @& {& i2 D; d" l13:BD9 f" f4 \5 B; M5 L* i
14:B' G/ J! f# I6 n" V% Y) S; \
15:nl2br+ Z$ V' K% J% U( i0 ~! c

5 S; x+ ~) }" P. ]2 C% e: o
' A) E. Y" m* w6 B- s4 }
$ E- a, @1 T* }答案详解
  o* v- [  W% u3 ~7 @, U; n/ Y+ M' C' q5 z4 T
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
6 _; V9 e- I" s: m. k9 B+ b6 r9 V1 u; a7 U# P. C
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
- G5 C; [* a9 P8 x0 S" i9 Z1 x, B$ @1 Q$ ?( Q/ t
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。8 `6 {" l1 Y" g) x( [: ]7 T

! X! b; l8 C; w$ \% \! q0 B( `9 o4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
1 ^: T& b2 w) f3 z) a; h
9 @* g8 |8 N4 e9 u: h3 m5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。, U( f5 Z. W0 j7 c) P( V) |
" R' w0 h/ D0 c
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。4 ^9 L: n" s9 d* \* Q1 e+ c

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

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