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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
! Q6 `1 m, N0 b& M与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
, c* Q0 L6 |) a& P- c' d" z/ g0 Q一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。! b% p8 s6 y& ?9 X
; b5 X& }9 n8 {) x0 T7 R

. ]0 s* G& l4 s8 }9 ~0 a8 u问题/ I& c  j, X' q9 ^( ~4 y

) p! _; j1 j$ l/ a* e) ?1.如何访问会话变量(session)?4 o3 J, V! |( [0 a+ k" C
  [2 ]0 }9 L1 @- q+ ~
A.通过$_GET
8 `2 B/ e9 _' J" c7 uB.通过$_POST3 H9 N/ Z' h1 W4 E* [0 s7 V( Z+ f
C.通过$_REQUEST
: [) f; b2 f: a; g- t, e% t# _D.通过全局变量; M' t3 L; o0 z! j% R  o
E.以上都不对: z, j. D8 R5 `9 d' F* m; G  Q7 d
/ A/ {- o1 y  {; d7 L
6 Z9 S0 a! t! J& j) y- G
2.哪个函数能让服务器输出如下header?
2 \1 r" @% s( P! n# V  V* x% F+ V$ ^0 I1 a
set-Cookie: foo=bar;* u0 C" t1 B# C
& u7 I  H) n. P4 C& n
答案:_______________6 R4 g2 Q/ Q# a/ _" E9 L" W  Y

  \0 n+ J+ r# Y+ T$ z7 F' i; Q* T4 g+ r5 x
2 C! |. [( ~6 B8 p& n( I$ B7 Z% k3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?8 a& D8 A7 Q5 ]4 u( t" ^, W: k
% S" q: g8 @# \" K3 b- j
A.通过HTTP_REMOTE_COOKIE访问% k; w% r3 M" P# p/ t
B.不可能$ t' w+ t; i+ e6 s
C.在调用setcookie()时设置一个不同的域名+ Q0 n* Z# ~5 G% N
D.向浏览器发送额外的请求
; }! T2 R2 x" ]( A2 m) |$ C$ vE.使用Javascript,把cookie包含在URL中发送+ l# w: i4 Y0 y# o: K* k0 t
2 u  T( S2 }) ^0 d5 E* R

' r& [+ b7 T& W9 J0 d4.index.php脚本如何访问表单元素email的值?(双选)2 U" l4 \6 M8 h% h- R4 x

4 j  @/ D3 C) b. K5 |5 O! h1 u. L<form action="index.php" method="post">
* I5 M. v8 x0 K7 L9 V9 t9 m<input type="text" name="email"/>
5 k6 Y: Q# P; e3 F, \</form>6 V0 R  n  J2 b5 K7 A
9 b" E9 j  z7 j0 }8 r* X
A.$_GET[‘email’]# }# g; u4 q  h3 U5 \, c4 u
B.$_POST[‘email’]
! \+ z; I' ~% e$ u* n, gC.$_SESSION[‘text’]7 A+ D5 ]4 o/ [* l
D.$_REQUEST[‘email’]* X) l$ t7 b% x; V
E.$_POST[‘text’]
9 h- I5 Y0 B+ y& U% F
; G/ ~7 b+ f2 Q0 B  y8 G/ Q( @# g. v" E6 [! S
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长. f" R$ J  s/ q2 Y
B.没有变化* D; s+ E+ Z* Y- Q8 p5 I  A
C.在浏览器上打印该字符串时,尖括号是可见的
; Z1 J- K' @0 P  f3 nD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见! }! ~2 b% L, b& Z1 e/ o8 L' o
E.由于调用了htmlentities(),字符串会被销毁
5 S: R! T3 j& ~5 W4 n- e- C+ G* K0 R" w3 i) \

) ~. G6 T# o( G+ C/ f6.如果不给cookie设置过期时间会怎么样?. |: K. f5 \3 y) m! O$ S  h

; j9 f- R/ ]# |" @A.立刻过期
$ O$ k0 D) o& |" DB.永不过期
1 n" c  K; Y' K) h: xC.cookie无法设置, x- b. u: ]) p/ }3 d' u  \
D.在浏览器会话结束时过期
% K! h+ |# t  S7 q6 _# ZE.只在脚本没有产生服务器端session的情况下过期& J8 s" Y, f% A
2 t1 p4 D% T( x& n( ?# ]
1 V( s' F  `& b
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.什么都没有" V2 a9 l+ |  y* L( j5 V  z* C* P" V" L
B.Array
7 N" Q6 s+ U1 X- ?2 {C.一个提示4 N# D( r. q% r- R$ H. O4 o
D.phpgreat; Z' l2 L! u, i
E.greatphp
! k- _. m8 A- R2 `$ @) ~# ^& C. U% J- e$ t9 m; F' K1 ]

7 m0 L( J8 O! b6 a, {6 H- K8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?3 R- M/ ?, z  y$ R. {. h& t* [5 Y
) E/ T6 z) z, Z- D; o' s
A.这两个是明文传输,之后的信息加密传输# {5 d) \) ~) F/ _: D
B.加密传输
7 b' E! G- o$ M# Z3 }7 AC.URL明文传输,查询字串加密传输
0 M# Z( T* n; Y* Q  {# i9 T3 cD.URL加密传输,查询字串明文传输3 n- d3 r! M) A) e' P' f. n# q
E.为确保加密,查询字串将转换为header,夹在POST信息中传输/ l6 w, L( I! k9 O

% e* ^/ |' a+ e& v: F/ R% u
9 ]2 n; d) c9 M# ?7 q9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?# h" S9 {$ B+ ^7 ~4 h# n+ e
8 @6 k4 S$ \- e
A.它们组成一个数组,存储在超级全局变量数组中) g) h- u3 _5 f* S% Y4 k4 D
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中5 Q! K$ `" ]) G: Q% R5 p) F" y, @
C.第二个元素将覆盖第一个元素1 n7 n! P# [; K  v
D.第二个元素将自动被重命名
/ {& h- I" d! Z! F, p0 j- u  L  P7 ^E.PHP输出一个警告
, S6 c& ]! F9 W2 T/ ?& D+ ?, ~1 ?# K+ ^0 g) I. e7 M

7 S6 I% s3 e# @  k10.如何把数组存储在cookie里?
3 ^- ?1 u8 w3 z% d# O
3 p9 L" A% P/ mA.给cookie名添加一对方括号[]8 L: z( c7 I& X. Y  d0 X) \2 H% T/ `
B.使用implode函数
5 L0 {- @5 I2 W3 v/ H6 yC.不可能,因为有容量限制
4 }2 m8 V) h. e5 P: J6 y% L1 l4 u9 AD.使用serialize函数
3 g2 }6 n; t% R  b6 B% oE.给cookie名添加ARRAY关键词
5 S4 t, ]2 Q5 C7 P7 ^& [
! n9 m6 c: K- d$ a' o* n, i  N# R( {: T& z
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
; \' ^$ ]5 v$ ^3 R% o# gB.1234567890
1 @5 ], \  P' r# H5 X, gC.0123456789
3 K  t& R. S& }D.什么都没有1 s/ S3 {( X5 h
E.一个提示
, S4 F/ l  o9 m7 h6 L. q( {
6 T2 z% B9 \: y9 o( X
5 X# e" u5 g2 p4 N, \, m12.默认情况下,PHP把会话(session)数据存储在______里。. d0 q1 i' U1 Z: h: t' ]

6 U" F/ L$ G# v6 h7 o7 sA.文件系统  C1 b7 U  _% G9 Q, U
B.数据库
+ o' |0 [5 {, pC.虚拟内容6 w* @1 G6 |5 V1 h# f) M& a
D.共享内存& N6 t# F) b5 p' c0 t
E.以上都不是
2 @9 d3 E$ m+ _- I, C( ?7 d6 k" I' v; F- V& \. W% H

' s& o( T. Q3 m% A6 [8 ?/ v2 W! ]! x13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)' W) G9 K1 Q. u7 _, B( o
1 h* l" d1 A! t; Q$ F, r7 c: ]
A.浏览器的程序出问题了- N2 l( D2 n' J" J  [
B.客户端的时区设置不正确
/ ]% x4 a  j! T( M! vC.用户的杀毒软件阻止了所有安全的cookie$ ?1 a) ~/ R- V
D.浏览器被设置为阻止任何cookie
! [# e; t. I7 i+ p) ?) z# d3 V4 IE.cookie里使用了非法的字符, }  \$ ?4 u4 O2 T5 F( O

! L7 V+ ?; O' G* R# M9 U- j* T
: m: O" x# B& i8 |9 f$ a; M. u; F) C; M14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
0 R/ D* d; Q% F* V5 s5 c6 T: l9 G7 ]2 A, o& J% \* v4 D
A.1440秒后
/ s6 X1 F" }: g: I) p' e7 mB.在session.gc_maxlifetime设置的时间过了后2 e, r) r8 C; O5 P
C.除非手动删除,否则永不过期
/ c* l$ k9 w3 b7 q4 Q- FD.除非浏览器重启,否则永不过期+ w4 N0 k7 Z+ `0 w5 ^' T3 q8 z  A2 n
E.以上都不对, i4 A8 G8 T- ~7 h1 L

2 S- T/ y) s6 ^( I& `# b, F$ J/ `" z9 a. u% s/ G
15.哪个函数能把换行转换成HTML标签<br />?
" E+ Z# \, R) [1 j/ q$ f- D9 s& L- q" |
答案:____________
4 Y* C/ X# e7 c' y1 O  S5 I0 g! [( m4 s* O+ f  v% X
# f/ E4 k. N. }3 i4 w4 Q
8 j. O5 J3 F7 g2 W* l
答案速查
7 v* f( ?9 c4 E0 v: K1 g1:E
# H* {# x; R! F2:setcookie/setrawcookie" r; g7 s& N& m6 E/ S# p
3:B% I% {& p& d% g9 u4 ]
4:BD
9 z$ D/ s' |& p9 d. H- ]+ V2 ?/ D5:BD6 V3 c1 Y/ ?) _9 k
6:D
  g( b; `- K. r3 Z( w5 {7:A0 g0 ]; ?: s* f0 x2 [1 b" ]
8:B3 F7 g  O" A! t2 @( M0 m& }
9:C
1 `7 y0 `4 ~0 Q' X2 R10:B* e5 W6 j1 s. m& H9 R1 c% T
11:E
+ k5 E% D' K* a/ N12:A/ t5 b3 v4 B$ [( _
13:BD4 [5 e8 _5 J3 T9 X. @
14:B
# G: ~/ G$ {/ s( d15:nl2br, c, z! ?' P0 p+ i; F% Y4 p" \
% b+ o! N  z) I0 U/ ^% p' I
! e, F7 I6 q2 X) t7 S4 p
1 o) h; T/ i; G( `
答案详解# a' e: p# Z+ T! Z/ h, v

$ |) Z1 o- [9 d% h! |* \1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。3 h0 u9 a' J7 U7 }2 F/ r" Y/ Q
8 ?% b* A  R& e  @. A" K% B
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
) y1 c0 T3 `. q% W/ j5 y
; @. w& M# p  K7 c; H! L4 N3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
) }* g, n( m3 c5 ^( M! C/ J, p# M
, u5 j, j; Z& m: c, ^( e4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。. A; V* ^* P9 Z5 _' y) H3 F& ?
- K8 U1 t  o* x, y: `* g, V( Z
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
- J1 k. ^( S8 {4 z& \, }
. t$ I1 x  B5 H1 q6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。* g: I8 W  W) D7 F* x" t

8 y8 S7 }3 ?+ K3 {, t7 |7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。- z, j4 F( g3 i) P- s
& j( H) R, N5 W/ Y2 R( U, e
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。2 h1 D2 o# G: z9 m8 C+ p

3 p& \+ Q1 N( X3 i+ {6 n1 g8 R9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。1 y$ T0 G, x+ U" L5 E0 B) l! V

4 F; R& `& a% i# q* R2 O4 q! m! ]10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。# X) O+ Z5 j5 r/ c+ v

% H9 R9 Z2 u  ]: ]2 u11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。( f7 u7 }6 m+ e6 ~! w
2 h" b0 X  x/ O* g4 b& v) a: O& j9 `
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
  e% y1 e7 m) |* F, Q/ G0 r* T% @; G# y
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。, C. s1 G" u. H6 p8 E5 F4 V, X

1 Z& a/ x, z  l9 e  c14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。' Z+ }7 f5 S% n; e* A
8 B1 @! l7 T: Z4 I5 V7 X* f
15.函数nl2br能实现这个功能。

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