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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
  e( \$ \: s, P6 o; ]* s# q1 G- [与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
7 Z$ _, c( |0 B, V% X7 X' ]8 W  `一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
- L9 {$ Q! T6 t9 |3 ^& b0 h0 }% Q8 R9 ~5 l1 `
9 ?3 Y  [; ?: z" c
问题' e4 Z4 N- }6 b

* N* L, Y. R. |5 ^1.如何访问会话变量(session)?
; S4 J4 L1 `/ g0 l; c% o9 M
5 S1 t  q, Y1 E7 Y6 H3 BA.通过$_GET
" g9 |( w& R- {& F7 w% BB.通过$_POST+ T# o# C( R; M$ G8 D, |7 u# Q
C.通过$_REQUEST
* E/ |! o, w, U9 x, qD.通过全局变量' g& H4 P3 A3 b: d" I4 T
E.以上都不对; x5 S! k+ u( f+ ~
1 \- {# M! G% [) X/ J2 j7 n

& T3 s) l: a/ M! w3 |: p2.哪个函数能让服务器输出如下header?8 \8 |* G0 i* I) D2 u- s8 F4 M
" B3 X7 A. X& }2 ^. a
set-Cookie: foo=bar;
- v. e$ z9 Z' g4 S
) z& T( w3 i( q/ f# _答案:_______________
- Y( r8 K, Z1 |- p, h/ ?- l* o# E' u' q( G  o

. E; u" }) V: }; }( E" G3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
* v1 q! f+ E/ z/ @2 g4 x# [2 Z! `* `9 C2 w) U+ J
A.通过HTTP_REMOTE_COOKIE访问5 o% D5 M  Z, T: R
B.不可能
5 ~$ C/ J7 [+ w2 V) ~  fC.在调用setcookie()时设置一个不同的域名8 |0 N/ p6 T$ w4 w3 I
D.向浏览器发送额外的请求" {8 ^2 {) o; S( X1 a+ R0 L0 w7 G# C
E.使用Javascript,把cookie包含在URL中发送8 T4 @' i7 r! r$ _# J2 N, E. z. z

  t. q' c- o& L
% K. E  W" l  H7 Z; Q4.index.php脚本如何访问表单元素email的值?(双选)9 _1 j" ], q! k" V. Z- ?8 J

6 Q4 a2 _) i5 R# ?; [/ {<form action="index.php" method="post">
+ F1 r+ i9 h9 }- \, K2 d" n<input type="text" name="email"/>6 V- U8 H7 ]/ v+ }! \
</form>
% y; s# r" D4 s  Q4 h: z* T
& v9 ~. e$ m3 Q3 M0 Q/ _A.$_GET[‘email’]
  P: X  j0 |3 e& a! O2 d  ?2 m" aB.$_POST[‘email’]
" ^) @( e6 h! u- RC.$_SESSION[‘text’]
& z% l$ r4 P/ P/ `3 \$ g8 I& MD.$_REQUEST[‘email’]
2 a# `! Q% e+ J! pE.$_POST[‘text’], A. A0 S  j( i, }& @9 P
( F! K2 F/ v8 Z# u
" l' `" m6 M4 _6 d" X& s
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长+ X7 z$ K/ @( R' W
B.没有变化% N: u& u. ?+ D( _8 k2 B
C.在浏览器上打印该字符串时,尖括号是可见的  a- y  ^6 _/ v. y
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见1 I$ R$ [+ u; ]! u( l
E.由于调用了htmlentities(),字符串会被销毁
3 j, u) J; M% T! t8 @. Z% X+ c  X. Q8 V4 S( a: @

$ B3 x. P% ^# e1 `# M6.如果不给cookie设置过期时间会怎么样?
0 n4 m2 c) h8 i7 x9 `; ?
4 f! B. m- {1 S" s) o$ nA.立刻过期, F) P9 t! ~; R8 `2 `! e
B.永不过期
5 j& B% W$ M, b+ ]4 q$ s' s: ^9 bC.cookie无法设置
/ q8 E7 i6 z% t# o  |. bD.在浏览器会话结束时过期
' U7 Y0 a: S, EE.只在脚本没有产生服务器端session的情况下过期
& A" F% e6 c& U- P) t% }7 \  E' F( b% b
  ^& ^/ n2 F6 p4 m3 K5 V. w3 w
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.什么都没有7 D+ E) s- V  `& H5 b9 n
B.Array5 N5 c0 U# e, x$ C
C.一个提示, u9 b+ p/ N. P) }
D.phpgreat
, n5 y4 D% }0 }2 J, T' `/ ME.greatphp
$ e1 L6 J+ V. R7 h% b/ ^7 |/ c5 ~. y& c1 X' s

; s9 P, N5 }( M! y8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?6 Z+ u$ D: Z* Q1 b  Q! I

' Z# T* k8 h6 y, fA.这两个是明文传输,之后的信息加密传输
/ a/ R; |/ g# j$ F8 Z+ pB.加密传输
5 |$ E' v% E7 ~C.URL明文传输,查询字串加密传输
7 i* ]# l" I- |) A0 GD.URL加密传输,查询字串明文传输
# P& a' {2 Z) ME.为确保加密,查询字串将转换为header,夹在POST信息中传输
+ u) T: k2 _/ ], Q& t; e9 ]* Q, h. O: S, o% I" [8 B- _+ Z. ~5 o
/ f8 u  z/ r# I8 @+ z
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
* \) D! M: G. U/ C, w! _- J, ^& [  v0 H3 A% w
A.它们组成一个数组,存储在超级全局变量数组中1 k$ ?  N0 z) U# L, K
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
  ~8 d% r4 V; y+ p$ }C.第二个元素将覆盖第一个元素; U9 ~" N! T) q3 B  v1 s) N  a
D.第二个元素将自动被重命名
! Y- I( X8 ~3 p+ z: |E.PHP输出一个警告
# _8 Z* X% _' R+ S/ q3 p0 N
5 i: y3 ~0 p$ o! M% [1 ]- a% t* z0 K
8 r7 K" I8 @; I  E5 |( R+ H10.如何把数组存储在cookie里?
+ o; n! T) n- b* K6 W2 \5 ^# n( A* {8 O1 E+ a8 }2 K& Q
A.给cookie名添加一对方括号[]
7 [" i; K; \% q7 ?4 \B.使用implode函数( o0 b# u  b2 {
C.不可能,因为有容量限制, t. U* F: ]( y& f5 C( C
D.使用serialize函数" q4 W) r2 Y$ b: n. E2 b: i, W
E.给cookie名添加ARRAY关键词
1 M7 T$ G6 c/ p2 ]& O. w' K5 r( r! e" a. p* r! T$ r; c
" }" D3 g% O7 g: J& Q
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
1 P  X) d! a$ U. J. k8 D0 d. rB.1234567890
6 l6 y, L! G% I" e9 C1 w$ ]+ e, |  T% @C.01234567896 N- T. I, e% Y
D.什么都没有+ W* j( f; L  K7 N/ ~4 R) k6 \3 l
E.一个提示/ ]( O) I% G6 Q+ G6 H% O

6 h7 l- ^& L" z( p- e5 O* z( J" V4 \# t: |( S
12.默认情况下,PHP把会话(session)数据存储在______里。
$ h8 u" R3 }, o- s/ \" E8 s6 k# H$ A0 k; ]& _
A.文件系统
3 j  u# ^( Z. J8 }9 yB.数据库, ?  K' r( t( C
C.虚拟内容
8 [; v" k  J' e% f" i# MD.共享内存
' O3 @, J; m0 \" {0 d- m% h$ kE.以上都不是* j+ d+ e5 r) D" h4 D

, R$ i6 O  s7 ~
, |/ h. x6 ~' E/ \% f13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
( g# b0 s- q  c8 V) v9 U- t6 X7 Y5 e! [0 l% L, J! X
A.浏览器的程序出问题了
7 a% z7 x+ \2 h$ m% R5 lB.客户端的时区设置不正确
2 H/ r" B: C5 y2 W5 z. `( p9 WC.用户的杀毒软件阻止了所有安全的cookie5 ^; b1 M* K& @2 d: r. a0 C7 Y
D.浏览器被设置为阻止任何cookie0 e! O% s5 g& b* t: C
E.cookie里使用了非法的字符
0 ]- ?" {0 I# L, }  P$ f2 l* H4 r! e$ N' O
( |0 M$ m+ a0 j) R. N1 Z
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
# H- s  A$ ^: C4 x$ h1 {6 ]0 h2 ]+ C' @6 G6 c- d" ]! }% q0 z
A.1440秒后/ y5 @: n& j: D5 ]5 V
B.在session.gc_maxlifetime设置的时间过了后4 {0 }2 d( i4 X2 i) E0 K$ z
C.除非手动删除,否则永不过期  X, \, B! _& \0 ^
D.除非浏览器重启,否则永不过期. G* w' W2 d1 H) e; }4 E; Y
E.以上都不对' M" `) z$ `! [3 u

' Q, @, z0 v" h5 Z( l) \3 y# m
4 J/ o$ |) d4 u6 C, l+ S5 W15.哪个函数能把换行转换成HTML标签<br />?
7 [( }7 j3 }* [# ?) I! c
1 Y0 z: G! d6 K$ ^答案:____________' K0 v6 w* @0 O

$ b5 b2 `' `! F* \) ?# d3 }) h9 n7 E
) D' D1 P8 D. r) y7 a& D; w2 X2 c
答案速查
) m2 ~; q$ g) X1 G( G1 Z1:E
9 I% b) I) ~" m2 r4 `2:setcookie/setrawcookie' ?# p( t- u. s& J
3:B2 G7 ^8 w) F- C% q' \
4:BD5 X4 O- I! \3 p; `
5:BD* J% j$ ]/ N! O' m
6:D
: F5 o$ Q. A8 ~$ |" W+ a7 W0 P7:A
/ `+ `' `/ j! g# d! M8:B
4 @) j0 D) q3 u$ T9:C. i; H7 }" ?' {6 G( y
10:B. g4 W7 e; z7 g( F( W5 q% `
11:E
, z+ R7 P1 s% h4 w0 T1 ^12:A' \* p" @1 t* s/ [
13:BD8 I* V/ M/ u' O& t/ W
14:B' A- f, B) ~! M8 H8 G/ v
15:nl2br9 ?9 |% R! t! u! \+ g/ m! A

! `1 P3 C- ~( u, v8 H3 \1 d( h! {; X" U1 N

/ `; j/ N; B& y5 W答案详解/ m- f/ w' Z+ i- @
; g+ f, U# `/ n1 V9 [
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。+ C9 n: c  z' p' C
& t; I# W$ |; X# z5 j6 u$ ?7 G$ }
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
9 E6 ?" C1 H0 {3 L, i7 t9 H
& o* ?8 S& S# Z; Z! {/ E3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。6 K9 U$ f) t* G) ?3 t: \9 u% m) J! l

% @% f& v% P( @# e4 U& {( Y" W4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
/ D/ O" r" M/ n9 O' S# P* `8 z. o, S) b1 E5 d- b7 ^
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
. ?% T: A3 F7 W( i) j
8 @0 r' ~: f) `+ i% U! J; W+ h7 s6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。3 X3 H8 ^, W, k$ ?: k. X8 l

$ k& L) U, h: d# t7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
& T- C1 k. l+ u; a: h+ p6 ~  C2 B9 z$ b7 ?' D* r( V
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。: C: X5 \8 n! [9 [: b
7 x; _1 x6 a3 z* p  t
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
1 t# F9 o, A: S, |6 j9 W. M+ x" ^) V* L
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。) u6 x  N. i( ]' j

  Y0 J1 |: G0 V: o11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。* v$ F6 |# z  l) }! C9 |* \( u: c8 k
# F* c* M! }$ g% `; a% D
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
" k( ~. q. f7 k8 }. Z
8 K' [: B* J2 g) Z# e4 I) x7 |13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
% v" q( D# E+ Z9 T
6 Y+ Y$ a6 }# w( ~6 _. Z3 Y14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。3 A4 Y. p% p1 n7 N4 v% `
4 v3 h1 Z4 W( {
15.函数nl2br能实现这个功能。

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