返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
0 G2 v, ?5 V& ^* @: M5 T与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
5 u) V1 |9 e8 j1 L一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
. E/ @6 }7 u0 r( x* A" l0 Z; a0 A' k: ]9 a2 E, b# N$ \4 D
. Y9 z7 M1 x( b
问题
" U4 k5 K& V: n3 j' ^& w& V9 A& U
1.如何访问会话变量(session)?# u: s: ?. _" X' R3 m) @

) y# x( o/ }: P2 l, H  AA.通过$_GET) I1 u$ J1 O; J( v) W4 q
B.通过$_POST
9 N. ~. B5 ]2 a* H' r* ZC.通过$_REQUEST
4 f4 V2 h0 J4 n; Y1 hD.通过全局变量
! g1 m7 g2 |! ]' |% I  ?4 u- AE.以上都不对1 F5 o( y7 g/ f9 B+ i% n) L/ q

8 W4 v/ o- _0 q9 r8 U. O7 w1 M) Y  \. m, o1 I5 Y& C
2.哪个函数能让服务器输出如下header?$ w* U, O# B6 Z, w8 @5 a- g
" g* p4 q  F+ W" _; R, q5 J9 j
set-Cookie: foo=bar;  K: B  J8 n4 D9 b0 ^( O1 X9 P

! J' S3 M9 A) O9 M) ?# r+ Y4 j# P' [答案:_______________
% v+ U- _/ W% d  D; ?/ l  T$ h! z3 V& H7 e7 S  }: ]$ S

# U: r2 Y; H- L& Q9 V* }3 c# v3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
9 A% G2 L' |, l* I; i' @6 C0 n4 A) l3 H9 Y" }2 h7 ]* a+ @1 L
A.通过HTTP_REMOTE_COOKIE访问
" k  x4 h1 V  \( y% MB.不可能0 |' H; s2 W# H  a- l# z4 X
C.在调用setcookie()时设置一个不同的域名$ q# X9 @/ b7 n6 P2 F9 b
D.向浏览器发送额外的请求
" K/ E5 U3 b, p3 PE.使用Javascript,把cookie包含在URL中发送
8 D: M9 @1 ^! }& s  b6 Y; Z# p+ J
* f+ Q$ R/ }$ D' U' q' `) o! m) Z" Z1 Z7 u; s
4.index.php脚本如何访问表单元素email的值?(双选). h% H/ A# ^% V. ]  ?

6 Q$ C6 [0 j6 J* ?% `/ J* d<form action="index.php" method="post">
8 S" {1 I0 b( o* V<input type="text" name="email"/>
6 g9 o- y' ]$ V</form>3 i' [' `9 e( ]  j
, T7 s# O6 ?7 W2 u" v
A.$_GET[‘email’], f, L- x$ u  `2 j
B.$_POST[‘email’]# M% u/ z1 }0 h! Q9 c- \7 d
C.$_SESSION[‘text’]( p" w+ |4 ]8 j  U. R# D; G
D.$_REQUEST[‘email’]# l' E5 R7 x8 S; W# j
E.$_POST[‘text’]1 @$ d9 T: I" T, l. I1 H% W; ~
1 @4 p5 M# _8 b1 K
, f  l4 P0 {4 F9 Y
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
( D7 `4 S, M9 y% |4 SB.没有变化
8 l& F) a% P, J9 mC.在浏览器上打印该字符串时,尖括号是可见的- \5 u) O3 x  ^& ]# y* \" ~5 r2 x
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
3 u7 J2 P" Z. b$ oE.由于调用了htmlentities(),字符串会被销毁
% H0 Y: V+ c% G8 u$ r& q& X
- u/ X: t& n* r. U8 Q% s
' f, p0 T7 E5 u' J4 `3 J6.如果不给cookie设置过期时间会怎么样?
! ]; o5 q/ X  y# X
7 c- h4 d3 O  z8 B- w& iA.立刻过期/ m8 B$ }0 A3 [0 T* w
B.永不过期
9 L; F" c! k* \7 e3 n! GC.cookie无法设置
! ~! @9 q. F( ]; k6 cD.在浏览器会话结束时过期
! a! [6 o$ f% I" [4 k8 CE.只在脚本没有产生服务器端session的情况下过期6 t7 V! r$ _" ~5 s% s% Z4 }4 ~8 O
: R" n! x; M' P4 ^

3 W4 o0 P0 X" {/ B  v3 ^" Q7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
, j, P/ U6 D) t+ c8 DB.Array( c' w5 s. h4 p3 b) P5 Q' J
C.一个提示
: R1 c2 m8 ^8 K- T5 WD.phpgreat
& b& D& U* L5 V) ?0 d  e1 S) bE.greatphp
4 z' h& Q8 k) o7 _% Z8 Z7 o8 ^4 l
% [) O! q9 [5 h# _6 y% X! d8 y) n% x7 v4 J/ D1 u; W1 k$ ~% _
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?- r( S, t8 ^* L; N9 V& \
1 `+ G6 R* ]! B
A.这两个是明文传输,之后的信息加密传输6 v5 r1 }& [) j' k: M
B.加密传输
: c' z, W. U/ I  T% v8 zC.URL明文传输,查询字串加密传输  G) K  K8 V0 x5 ?% p5 A
D.URL加密传输,查询字串明文传输" @: ~9 z4 c! k% r) m6 k* s
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
0 u) c- X# G, R: o$ @2 v2 B4 F+ ^

; A% N, }. y0 z: y; C9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
7 S6 u  z; K4 r# f+ @5 O' J
$ V' l1 H" s0 l% [A.它们组成一个数组,存储在超级全局变量数组中
0 q9 D, I! F) v% E4 F2 wB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
9 ?: _5 v! _8 J: K4 vC.第二个元素将覆盖第一个元素
6 Y% ]6 z& ^' OD.第二个元素将自动被重命名
* z' C, b' G/ K9 ZE.PHP输出一个警告
( {% I% u+ O6 D' F, ]" `. v
" {/ e$ [6 x( ?% c2 u) a  T5 M9 p$ J) X) O. Q' t- _$ D$ f: F: g
10.如何把数组存储在cookie里?) u1 B+ g! r8 y7 b0 @8 u3 B, U# f* g
; r5 G% F$ `! `/ G# p$ P6 W9 D6 T0 x+ p
A.给cookie名添加一对方括号[]
3 a/ L- \; w3 l+ Y3 yB.使用implode函数5 x8 p1 Y# r) O/ t+ k8 e5 e# [8 t
C.不可能,因为有容量限制. ?  ^8 D! c3 p. P! k
D.使用serialize函数' D8 E4 p& ]6 }4 b3 F* }
E.给cookie名添加ARRAY关键词
0 b1 w  V- B1 R! w+ H7 m3 S8 T9 `1 [* T# N. k% g9 c2 b8 r, C: S
) j; x9 G. a" V
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.123456789104 X+ l+ b% f9 }# p; j1 W
B.1234567890" M6 ]5 O* }2 g/ W4 v$ V
C.0123456789, S2 A9 H' {; \, Z
D.什么都没有, l4 j  v9 S' P3 f/ t
E.一个提示. \2 x1 ]9 L" ~" q) v

' [2 y% p6 z: V& a9 x& T8 m4 E; Y7 o; {$ f8 y" a; G
12.默认情况下,PHP把会话(session)数据存储在______里。1 g; h, l: X' q' `& d/ g0 ?
  f3 y( i" a8 j6 R# r2 J- B
A.文件系统
9 L! {  _! C- }+ z" n4 TB.数据库3 z! @1 s3 U1 L  K0 A
C.虚拟内容
. e* S# V! D7 W- }% mD.共享内存
* C2 l0 w: V- o" tE.以上都不是- f- H& l- b: R0 r- z+ D

; D7 p% S0 g& Q2 H# t4 [+ G
( V" {) I1 d5 m6 G) N13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
& \5 ]+ ^8 m0 j  T# x4 |% m: m9 |
A.浏览器的程序出问题了3 w, K( f. B+ W
B.客户端的时区设置不正确
& c. ]$ }* w% z; ?3 V- o. KC.用户的杀毒软件阻止了所有安全的cookie; R+ g; k& b$ d+ C4 {: E
D.浏览器被设置为阻止任何cookie# e+ a8 y2 Y: h" Y9 n
E.cookie里使用了非法的字符7 e' r; a" Z7 v+ i- J
6 D$ X& {8 l6 D. `1 G/ m

  G# G( ?9 \+ Z5 Y" @+ O14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?2 p6 |4 f# U- d5 N2 j
, _5 a# \$ o! |; |& U+ |
A.1440秒后; P4 F# n1 d3 ]- o  u* b: X) v
B.在session.gc_maxlifetime设置的时间过了后9 w' N9 r' l- R% g& \
C.除非手动删除,否则永不过期
  e* |0 F! j: n9 x7 u8 rD.除非浏览器重启,否则永不过期0 W& C8 }4 V: n, Z) a3 q! s' w: ]
E.以上都不对$ s7 L3 q0 ^4 P+ m

  a5 j% C9 n# t% b- l1 \/ I1 L5 R  g/ n4 B3 `, B6 X
15.哪个函数能把换行转换成HTML标签<br />?
* N5 G( `* q& i8 j) V1 J/ ]4 s5 p' \
5 @2 ?5 z( c5 z5 S答案:____________
; s. S& |: y1 S: @) j" Z- {! D& J5 ]2 a" s
9 f5 ?+ M( F) p

# A& z% O) F, B* c7 @答案速查
1 J, Z, j5 ~( @! E; B! C1:E
9 [6 B2 _) F, x; E7 D4 @2:setcookie/setrawcookie5 w1 @1 B5 l  h
3:B
. S' x# X% e& Q  R# B  A4 n4:BD" t1 j$ H; n+ c5 U) B% U9 z; c
5:BD
9 L. K( }: D$ [2 G" I% f: ?% g6:D: V5 A: m& Q; _
7:A
+ |0 O* x; R/ R2 x* l2 L! I' J8:B/ w1 x$ G/ o* L! Z$ ?  f8 V0 K
9:C1 `; i9 I1 p. o% ~
10:B& f: D7 F4 a9 Q. T2 M
11:E) ]6 E7 d5 T- c7 `6 M" o, B
12:A8 Q% b) R3 x; K2 R; F2 g8 t! `. R7 c
13:BD
7 ~8 L1 T# C% P2 X( A, Z14:B
% h  E5 u8 _  C* z4 _15:nl2br4 _/ ?7 }. I# u# K; {
, u( O  i$ `" N) Z5 w1 S( o2 G6 ]3 Y

. F( P5 r. Y) D4 }
- v0 B& Z+ o9 g" y/ ?答案详解
! O4 ~9 N2 l" O. R3 g: S- u% B3 U, R6 B, B) j) [& k- i: S
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
( a2 ~% R" ?7 j$ M. ], y; T5 I( b  O  o" D. R5 a3 d
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。2 O3 \- x1 Q$ f* m5 w) I; b

) Y: M0 c9 K$ ?# L# T3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
  r3 i5 B/ g/ s" ^" f  [! j3 s; J* n9 N. ?
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
4 v* r$ w! T7 O, ~
  W4 j9 Y# y: Y* ?5 l0 o5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。2 c% U9 [! q2 y8 [0 l

; c/ O1 h2 H4 S9 s6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。, i/ a, x( j- m6 d

8 o  k+ v8 M  ~" v2 S8 N" W, u" S7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。6 D# C& ^) k8 T6 `/ v) Z0 K
1 q" [6 y% Z# t
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
3 h0 H9 x- y+ z$ ?7 M% u
. l2 s3 L! j, f9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
- ~& ]" F7 F9 c* o. [6 U
9 c6 l. ?. u, \10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。) w; V, u* I- H/ N2 h; i5 ^  h

. \! W% N) e& I7 g" D( @; Q3 p, }  e11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
/ _# `1 N) d0 D! i" ]
, H9 S, p9 l3 l, W12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
: U. ]4 ~. V3 o4 p* p
+ P% F& _9 r) p; L" H& y6 t& f4 g" s. n  Y13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。) Q- D7 l) q/ b$ l7 ~% N, ]

5 v) ^6 ?2 w8 ]/ F: u( D1 e14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
6 a* J' F/ K6 S( z) Q; B5 s- @7 g2 s) L- Q6 o& Y  s
15.函数nl2br能实现这个功能。

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