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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。0 ?' y' `) b! V, }8 Y
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
. @; T  J" Q4 m) F一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
1 u% K5 c- W) h% x2 E+ z$ W2 ?* {" H" H& Z
" p5 I3 L, I9 z* w9 D8 \) ]4 X
问题
/ H! X& ^+ L7 g+ h7 p: ^! i# o' r$ u0 U! [8 u# P
1.如何访问会话变量(session)?
3 t: C' s6 g5 I$ P- N: |* f. o7 n# n
A.通过$_GET
9 n, @# z. O; a: _; e4 P6 \B.通过$_POST
; C$ E  B  P% D/ \- u& u* ^- dC.通过$_REQUEST
! ?9 {; r* r2 q* }7 CD.通过全局变量
9 f' i* M, r& w, |. aE.以上都不对
6 L) @% d6 ^( r8 e2 S) ?) v4 o7 f+ i+ g: o4 x
2 W$ P' }1 T! P# z9 T
2.哪个函数能让服务器输出如下header?$ M6 E* Z* E& Q% H' J. O! ?8 i
  E2 `; M3 u% v! w% w
set-Cookie: foo=bar;
( B, k3 q3 b# @. ~1 H' M/ f! a" t0 |" [5 ?# S/ k6 D2 R
答案:_______________3 w2 T6 y  w" E/ _
. W4 t, K' l/ @& N" ?& a

8 B. ]2 S+ d+ v! K7 ~$ X) u6 h3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
/ y% `9 j; B9 V9 f- u) l% o+ k& x6 Y# S$ F. b$ A6 u
A.通过HTTP_REMOTE_COOKIE访问+ D8 {1 y# a8 q5 D
B.不可能
8 f2 E9 p; k7 |% TC.在调用setcookie()时设置一个不同的域名
# Y; o2 e# D5 t$ D( F1 tD.向浏览器发送额外的请求
/ Q# O! A# _8 L. o5 k2 [4 PE.使用Javascript,把cookie包含在URL中发送
1 s  p* f- R- C  f
* k, l, T1 R6 M0 I3 {3 a; w- x& c  v$ T: ?0 E
4.index.php脚本如何访问表单元素email的值?(双选)* t1 _4 u9 k7 |4 N+ w8 S" ^

# m& ?7 L* L) a; p% ^* k+ f<form action="index.php" method="post">
) N( ]6 W6 k* I/ K8 u' D<input type="text" name="email"/>
8 h3 U3 p" P! t# e& n7 \</form>/ g2 R  p# K* p

0 Z- f) M  i& v' WA.$_GET[‘email’]
7 a* {6 Q: J3 L$ I' [0 GB.$_POST[‘email’]
' }! T  y+ ]8 @8 `+ zC.$_SESSION[‘text’]! |! l! O# F8 u) }0 R
D.$_REQUEST[‘email’]; X+ S) T+ }$ P0 z; X3 X7 f! u' Z2 Q; X
E.$_POST[‘text’]  s" h) z$ f0 K! Y) ~

! r3 c" c: U$ f4 D: U- r
5 y9 r% @/ [* d6 `( X5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长  O! z% f% a; t0 q  Q4 L0 e
B.没有变化
: [3 q) ^' W3 |C.在浏览器上打印该字符串时,尖括号是可见的
0 P: x  u5 `9 K" U6 F; e0 Z4 WD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
/ S4 L; \+ d5 T% }E.由于调用了htmlentities(),字符串会被销毁
& d$ t9 P2 x7 {
" R( x& t( X! N! P2 d5 p4 _0 B. h$ P) p* H
6.如果不给cookie设置过期时间会怎么样?
% S$ l2 j, w( ^; H# a
, m/ H' T/ v/ `5 H/ eA.立刻过期# L  `  n. f. O1 E" _' G4 b
B.永不过期
9 o* J6 k$ V3 a& H: n( OC.cookie无法设置
0 x% y, @6 A( ^% iD.在浏览器会话结束时过期
2 Z) w* q" h0 h, c3 Y6 b) o- aE.只在脚本没有产生服务器端session的情况下过期
1 @' F6 R7 R' V3 _7 o% c- o" I. k$ `+ b7 t2 J$ ?; U2 l

- `/ D& m  W) `& N' k7 B9 n7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有) v0 z5 f8 N( O9 m7 x% k% t
B.Array. ?1 P; f4 V2 R
C.一个提示" m- ?. ~; Y7 Z
D.phpgreat
8 p) M0 }- h1 D: GE.greatphp0 f% \4 T2 O" d0 w2 z  i
! S, v. y. q& ]

. J2 Y  T, u3 [" W( z  B! b1 q8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?) B- x- O5 Q" [# \; k8 {: f

2 t& p. |& K8 V: ?A.这两个是明文传输,之后的信息加密传输
; s9 Q* v, n! M  Y$ IB.加密传输  L' U: v" [3 O0 W3 e; T9 D
C.URL明文传输,查询字串加密传输/ X. L0 F/ h6 U9 n7 j* H, [
D.URL加密传输,查询字串明文传输6 N/ R1 x2 S( O
E.为确保加密,查询字串将转换为header,夹在POST信息中传输' y$ d1 C- T4 J

  }8 n  u4 k" u4 t
. ?( z* d+ H6 r6 \+ j/ N9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
7 i+ b3 ]9 v3 h# {5 r6 ?9 U5 f- ]3 c, _6 P# Q- [
A.它们组成一个数组,存储在超级全局变量数组中
% r4 g+ Q! X$ i% D% M0 LB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
9 v% y2 S) k- yC.第二个元素将覆盖第一个元素
$ o; V* I. }! b; qD.第二个元素将自动被重命名
# _$ B, y0 ^" B) n% H6 F$ J( GE.PHP输出一个警告
3 {( H( p. i" @% ~0 T0 U" Z* J" V" I3 l7 l2 {

3 ^) M2 R: q( {$ p$ _/ U10.如何把数组存储在cookie里?% a: Y/ a2 x* ]( p$ C& G" ?2 H

; ?/ w4 |+ F# p5 y! [# D/ k& ?* rA.给cookie名添加一对方括号[]
% }- a  ]0 R& eB.使用implode函数
3 |9 ^6 `" k' o% e: t) XC.不可能,因为有容量限制
  F( P0 @' i2 y) dD.使用serialize函数
% F( G+ H# W  V# i" o+ AE.给cookie名添加ARRAY关键词
& `) f! W' W' G2 k9 z4 O# h% e

' v' G( C6 ]- I7 e: g11.以下脚本输出什么?

  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
4 I2 w  l# X' u* k6 GB.12345678900 K) Q: W6 V+ y; n
C.01234567895 N' C# |$ C7 }5 s- f1 I) O$ o. D
D.什么都没有
  [6 Z! Y& z& ]E.一个提示
" g3 }$ @) c5 b3 z0 R5 c  v5 H4 w, A5 W' |
; _% }5 w+ Q% _: C
12.默认情况下,PHP把会话(session)数据存储在______里。/ |5 D. X% P2 b/ {5 }/ b: O

+ x6 h1 l" b% Z- ?8 O1 zA.文件系统
; q* Z6 F  M! F* C- J/ w5 Z+ H5 UB.数据库& B/ H; B! Z) ~1 }6 e
C.虚拟内容
! u4 N4 o2 W! nD.共享内存! k: g9 Z0 H7 `, s6 r2 t3 \$ z; m( |
E.以上都不是
% P$ [8 g/ w* l+ x
% T: h! I. U, g2 f# J0 \+ w% C
8 T  y) Q. G- M- l; D% S# v) n5 ^13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
  m0 v; B( P4 d+ g& d7 v* x
% O4 _& P0 _7 ]# a$ BA.浏览器的程序出问题了$ t6 T! q0 p* W  G0 K
B.客户端的时区设置不正确4 v6 c1 J) v6 J# x$ n- }
C.用户的杀毒软件阻止了所有安全的cookie& V' f/ K' \9 _& ~
D.浏览器被设置为阻止任何cookie  K. G- ~; e6 O$ W9 g
E.cookie里使用了非法的字符& J7 j2 b5 _- K9 X! Z' Y5 B( O

$ `" _! y6 o# m4 t/ _( N. X+ k, o4 i# v' f8 z
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
5 L( h: S0 m( Z9 s: Y
5 g1 U" b, q6 K. M$ QA.1440秒后
5 J/ O8 K/ E/ s: i. ?" r6 J- A8 CB.在session.gc_maxlifetime设置的时间过了后% {+ q7 Q' k. V; p! g1 _
C.除非手动删除,否则永不过期
( {2 y9 \8 m- q5 Y' s. GD.除非浏览器重启,否则永不过期
9 ?! M2 k' m/ wE.以上都不对
$ b! t2 T# U% t& {9 V+ S! |* z) U; f2 a+ C! f
, n' Q/ w) }& S7 _0 J" q
15.哪个函数能把换行转换成HTML标签<br />?
2 f' N0 S/ ]/ C( ^& z
9 z5 Z) f' p, A2 f4 O) [5 M答案:____________( ?& C. ?- v, T( b

: s- M( O2 `0 [% Y- G" U
6 W( L% G* D9 d% C& A' m! r
' M, K1 B+ X7 |$ ^' G" [答案速查% b. L, [; @. V% ^1 X
1:E8 I! K0 k+ h4 s0 |  j+ K- B, w4 {8 q
2:setcookie/setrawcookie
1 B& `% k8 E& B4 ?% p2 J3:B4 I* x, M1 g6 k2 O& H! _
4:BD3 R$ {6 x$ |8 e, v1 u9 ?
5:BD! ]0 Z6 w: A' ^8 h$ K' {- d4 G1 {
6:D$ n/ E- H9 ]& b) U1 T. d# Q
7:A' n6 x5 B3 n8 i; E% E: c( f! {
8:B
, |+ x0 L& Q4 M# O& c9:C
1 R% f2 ]8 u  O. V10:B
" }  U  P2 ]. B  j$ ~3 S# r11:E- ]7 G3 t3 s$ T1 i/ b# b" E1 J' q
12:A
/ K, a, ?8 Z! ~/ P/ y- F( K13:BD4 u0 P1 y3 x: p! c
14:B
) `" L( x4 C! t, i  a' w15:nl2br# @* g$ x' K; n" e/ i7 b5 P# n

- u9 Z# A% _' D3 d- h: j/ f" m4 c
, S; C9 X+ W8 f: U( X
答案详解6 H! S  j; w' D% \/ ^1 j" n& {' p

8 }( \( B8 C, z6 B; V6 A1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。; L  x: c! U: N5 R
/ w' P( M9 V5 N2 u/ k2 D7 }* m
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。1 d5 o+ Q; {) b) ^# f" j

' g5 q( P0 N# Z" K8 i3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。9 j2 V( W  H! M4 t; O) k
, v/ _. ]& l5 n1 d/ p- T( B- J1 a3 f+ W
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。2 ^3 X2 C7 `' u

' S, W' f! C6 L, f* b' U5 F9 V7 Q; l: E5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
# `+ f  a4 x. z, F& e9 F1 _7 l' {4 _! o3 p
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
: K: Q, h+ D9 K6 [, L
4 z1 H  e/ [7 r1 i6 \" d7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
* v% @/ A  _6 n! f3 p4 n/ N6 L) C4 ?1 F! @+ _
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。& X8 J& H; o' `6 u$ E; A6 ~6 s; h
" H- b7 n# J, L7 Q: k# K
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。6 |" p& r: J+ u

/ ?4 g; `* z6 m" h0 X0 Q10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。8 A0 s- `! d2 `% j1 {7 O$ Z

; Z3 j. W1 x4 H% A11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
; k+ \6 S! i3 c. C; |0 s( D6 W2 b9 q' p+ S& }7 Y, L& B: ?; j
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
2 G, k; g9 S/ B' D/ t. `4 Q( k% g- X
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。7 {+ \2 X* g$ R' E. l! v. M

. ~  T! q) t% l  b14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。2 W% \2 o5 Q9 [& D5 ~. k

" u+ r+ ]8 X, T3 I9 a15.函数nl2br能实现这个功能。

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