返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。* Y& L1 E( p) l
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。8 ^2 t+ }) O: o+ ?& G- L
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。" y  C" t: g3 Y

- {+ f; [" b' V) x2 \% S9 V. i* @2 {5 k  E% ?
问题2 G0 D) [2 r) |' O

+ s$ i4 Y6 ^7 `# v" i) [1.如何访问会话变量(session)?8 J- r5 j8 I& |- J5 z! r1 w) o
( @3 S. H4 |/ R3 L; f/ ], u
A.通过$_GET
$ F" T: f" X+ gB.通过$_POST0 ^/ D( w. Y1 o* H7 `! Q; U) h5 L
C.通过$_REQUEST+ I& w& u' {4 V* u( V
D.通过全局变量
, \' i4 O3 x9 g: V4 dE.以上都不对
. P+ {. ~- x3 X1 S* Q7 f" k3 h! ~. F+ l: q5 ?4 P9 C% h

' O6 i7 K6 K, \* \" ~2.哪个函数能让服务器输出如下header?7 y7 Z0 S. b! c0 o

' k9 m. A/ T: E! P6 p& c" {0 F5 Yset-Cookie: foo=bar;
# }0 T% g7 Q6 g1 d1 M, p( e# }" w  z+ b
答案:_______________. R( A5 B& {! q& ^0 S. A1 Y
; {% K) M3 h6 e
, |. f! U2 @; u0 z
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
* g6 @% ~. d  c3 N) G
6 G3 ~3 |" g9 n) D1 N5 SA.通过HTTP_REMOTE_COOKIE访问4 o4 u, L# W: Q
B.不可能
2 c; y4 P* }2 h3 M0 k+ BC.在调用setcookie()时设置一个不同的域名
( K9 v( J" o- ]. d3 ~. sD.向浏览器发送额外的请求
, D% z3 B/ [+ J1 ?; yE.使用Javascript,把cookie包含在URL中发送+ I" E4 O& b( B& L% @8 n; O
) D$ M& k% s, _2 u% a8 b, D
1 C& x. l0 b% W0 V/ _$ o
4.index.php脚本如何访问表单元素email的值?(双选)  U; Z. t; ?3 |8 Y7 Q! m- e
% l4 Z! a% d, l- [
<form action="index.php" method="post">, r  @( w3 T& Q; |5 t
<input type="text" name="email"/>6 b, h3 s8 K1 [( T6 l2 I3 e
</form>
4 W7 E7 R# T! x* i
- H; s) f9 m8 j3 {A.$_GET[‘email’], {8 Z/ M8 f; r
B.$_POST[‘email’]( H- s0 T- `9 y) {$ `
C.$_SESSION[‘text’]2 n; I# H5 s+ I' N
D.$_REQUEST[‘email’]/ E5 ]! G( n3 Y* d
E.$_POST[‘text’]
0 r, T. Q, \/ ]! g3 R, j3 Z! r6 W
% n5 ]- P( W7 _2 x7 Z9 Y  Y% H: z% }( T
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
, Q2 `' J: z+ J7 kB.没有变化
( ~- X$ u& V  l' l  k1 p, t1 SC.在浏览器上打印该字符串时,尖括号是可见的# G3 }  }  F! b* r' c
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
  a0 l& F" X9 w3 h8 W( ?E.由于调用了htmlentities(),字符串会被销毁) J1 u4 I0 q& B" c
8 q- u- X5 k6 l/ Y- \$ e. v) Q- H/ U

' g' H8 s, C6 Z5 \6.如果不给cookie设置过期时间会怎么样?
" r, w3 E' D, H1 u& y; Q4 g1 y' P, {6 U* p5 o5 a9 F
A.立刻过期
; p5 `# ~# N: U  f! `$ ^B.永不过期
+ z" P. M: z' B  oC.cookie无法设置7 L1 B5 G* J/ ?9 b& A( M2 ^% Y6 H2 P. y/ |
D.在浏览器会话结束时过期- V  B" C, h& T8 Z! a: `
E.只在脚本没有产生服务器端session的情况下过期
6 |$ Y4 P, ]* @* V- ?  ]- c
9 t3 ~6 A) d$ {" y
9 W  @: j% U6 U, L3 K7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有8 g( d: h1 |/ K( C. M5 B' J- a
B.Array
# W; I1 |; Q* e" c9 |C.一个提示
; Z( u5 i; `: {D.phpgreat! @; G$ f7 l. O5 o* w, e; O9 z
E.greatphp
/ d2 B! \1 x3 ~- V! U. A: F! t7 E* v* k7 u; J8 i
2 p) @% h& @' d' P8 S0 k; W' j, [% t
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
9 ~9 a- a( s+ T- }6 Q& g! [# [# m8 Y6 g4 \" B" k; X
A.这两个是明文传输,之后的信息加密传输
( e4 U+ D. B$ V+ c7 \2 r  }2 {- d! R5 DB.加密传输
' [# ?2 d( z3 F3 s7 b' cC.URL明文传输,查询字串加密传输- k. a7 G- W2 U; A5 `+ c
D.URL加密传输,查询字串明文传输+ b# y" L" G: \, o" |3 X
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
7 O$ e! N4 t1 q
( {, {, [) x, e
7 |+ r2 r4 O( x9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?8 D0 o2 o. a7 P, }
" V) Y; v7 A3 ]+ w2 Y
A.它们组成一个数组,存储在超级全局变量数组中6 P- i+ g& F, c2 x1 Z. T0 R
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中: i  B  X$ k% j) b7 L6 N. A
C.第二个元素将覆盖第一个元素
: u" L/ [" Q, M  p! vD.第二个元素将自动被重命名" `/ v4 y. U2 `9 G
E.PHP输出一个警告
7 l" U# g/ L" x& Y
# T0 d$ G0 u- j9 @' m# c) k5 Y7 H% f% O" [2 [
10.如何把数组存储在cookie里?- ^5 m- E6 C3 f* x1 g

  f* ]% s3 b% ]' ?! P# cA.给cookie名添加一对方括号[]
3 [- g0 d6 D5 m' JB.使用implode函数
; z2 [1 ~# A  S6 J/ U8 }) p- h  `C.不可能,因为有容量限制2 b5 C. J$ f( u9 a0 w; B
D.使用serialize函数. W: U6 O+ Q  h' \" p) v0 i4 Q
E.给cookie名添加ARRAY关键词/ h$ n# v% j; F2 u, `6 K0 A5 K0 N) i4 V

1 v9 k1 Z/ \0 L4 R
7 X( O& Q; s$ s& s* W, N' w* A11.以下脚本输出什么?

  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% l# r+ K2 [( Q' I! g
B.1234567890
7 z) h! V; B. m- Y0 dC.0123456789$ Y* i5 Q8 l3 H3 `3 \; e
D.什么都没有* x0 z2 [8 i: N7 N6 _/ ~/ t* T
E.一个提示
& Q) D" [3 c5 _0 o  w8 B  H, \" q" ^. w" W4 K$ Z

; p2 a# ~$ E4 d7 N9 B* m8 r) S: F12.默认情况下,PHP把会话(session)数据存储在______里。
9 M+ R2 z6 f2 I+ [  s) s4 {; {" W# @5 P/ Y
A.文件系统
* b% _7 X* o5 X: N7 ~, E* EB.数据库" R2 E% z: Y. ~- P2 E; d9 O
C.虚拟内容+ l- Z! t; ]% h3 H: D1 b0 z6 r
D.共享内存
" ~6 ^7 ]6 z  m+ [E.以上都不是$ W0 C  {8 z1 J# T4 v1 |0 l
2 _: D1 I+ J- o; e* f1 l1 \7 k

/ P. ?% }& R1 W, A/ f# [* w4 o13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
% @% v9 L3 g* T2 V
1 f' i% {$ \7 @1 }A.浏览器的程序出问题了
1 |# r: Y" H& IB.客户端的时区设置不正确3 j/ S7 E& J3 i
C.用户的杀毒软件阻止了所有安全的cookie
3 s0 q6 K7 i; D$ SD.浏览器被设置为阻止任何cookie3 m  m0 Z. g& T) s7 c, ]
E.cookie里使用了非法的字符+ k# S8 {: z5 j# @" @% Z2 \) B

; z' y; l7 t; J! L# U8 x3 A5 [' B" Y9 L
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?! f8 N0 ^2 v& l6 Q1 `

2 A: K5 f- [& R  H/ l* sA.1440秒后5 G2 ]7 P' {* N  W0 Z
B.在session.gc_maxlifetime设置的时间过了后3 |3 ~3 I$ X2 O
C.除非手动删除,否则永不过期2 K$ S8 \9 |# x
D.除非浏览器重启,否则永不过期  M8 \; X! e7 z6 \. H& F2 S
E.以上都不对
/ U9 y; H8 j) A2 Q( i" b9 F5 E
4 a7 M+ i  m( M
) Q/ j( A! f% {& d- G  }# `15.哪个函数能把换行转换成HTML标签<br />?
; O/ G5 L0 D$ t) J- J
2 Q: ~  x4 E0 l& j2 B% ]答案:____________4 `5 I; r6 k% F+ y! I9 l7 \  L
4 {$ Q$ @7 @- E

$ ^, Z. k" ?( l, N- b0 }, I2 k$ `' o2 S
答案速查# Y8 z' m8 B6 k+ Y. p9 L$ X
1:E
! a6 D/ k8 P/ \% _4 q" M# K% V+ D2:setcookie/setrawcookie
4 C2 {4 z- _, y* D: E) u3:B
' W( x$ x- t: i, f4:BD4 O) e& n5 R( N  q8 M+ o' f
5:BD" }3 s6 m6 L0 E9 s
6:D0 L4 K( @! K8 }
7:A  D. x3 H7 r0 h6 b: ^1 y$ @
8:B& i: u7 }# F1 {: I1 @
9:C) ?! G& g3 j. m$ s: S# k$ T3 Z
10:B9 p. o  e+ ~: ^! d! f/ P1 ~
11:E
' B. B# R% G  ]- n- c12:A
; w; C; N: g" w6 C8 H13:BD2 D" ~# V* ^0 B$ R3 e  m
14:B' M# n5 C# }! X2 z# C6 l! G
15:nl2br
+ x% u1 g  O: L$ ]9 [; F: A# n/ J/ r; U9 k. ^- \. w
& t! c! C5 T; D- I5 W' v5 y

, Z  Q9 E( o& [" B答案详解
9 x+ ~. N& q& }7 ^+ N- _, I# ]& ?; G$ N
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。; X" D- m& T/ {3 v
) N% j& W; J% E5 G$ {, Z
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。' S' ^& Y; S. r; e/ ]

7 m' Q7 z8 c6 x3 b& z3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。& ^% r' z  M2 H7 t- T
  y# s+ z, \& F2 y7 d$ y
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。6 \) @: X) c5 ~$ H; G; M3 J9 h3 s
0 e9 g) Q8 H8 I
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
) e9 l1 W" f& a$ Y6 z) Z# }+ S- A$ a! ~) c' Y" A
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
8 y7 `  s2 U: E; M! {: S5 z5 x6 [. N( a7 F8 O
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
/ a& {3 ]$ [& g8 v2 B7 o' Q# ]! @; l6 x
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。6 x8 i4 [8 P2 T" ?
9 J# @; u( i* j
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
, @3 |$ _" b+ e, e( t" C. @/ f# b( O6 Z0 ^+ R* ~
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
2 R# k5 t- a5 X" s  u
7 F* m# f% i9 Y  B. Y11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
# i$ a, n5 K( r/ p# E7 X$ G( b7 n
( G$ M6 N" D% J; p, E8 W12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。: j7 ~* L6 S* ~1 v- v5 }. \
. K& P! h: j+ ^( z0 \2 j) d& U* P
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
5 Z* d- P" B, k# P
5 o& \; N+ n2 i" x. E9 n/ {9 {14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。0 }7 B+ l; e( G% E1 {
( \" g' M# K9 @" ]  s3 V
15.函数nl2br能实现这个功能。

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