返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。+ t2 N/ m' l) A
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。- U. e1 w* M- r; d/ P
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
  G! H9 h) b+ o" j- |3 v( P# l9 W9 I% P1 {/ W% \; A2 p

& P, L$ }( q( w/ w3 |% E* P/ u问题" f9 i  M0 x, h5 }8 |, d# m5 o9 K7 p

; n: g$ B4 z; \( f, P6 N# [1.如何访问会话变量(session)?
' o! G: b8 x1 }) P' H; L. c9 N# [6 m! [' X* p3 y8 U( B
A.通过$_GET
: j  t7 ~& Q4 ^9 oB.通过$_POST
+ h: K3 B7 f: u3 b! iC.通过$_REQUEST$ l7 @: h5 u+ G9 X4 w' @# c
D.通过全局变量2 J, D8 x- f3 M4 V1 T) {# f# C% j* h
E.以上都不对
$ ^- A% Z* |' j. p& J8 g9 R0 o; I* L3 r

; U, A7 L% a, ~' E, _. M1 Q; U9 Y2.哪个函数能让服务器输出如下header?
0 D/ b' p" \' v$ x! Z
& J# S+ V( F  H' pset-Cookie: foo=bar;
, R' Z! m8 z: ^! ]
7 w* l, Z/ {- W6 a' ]3 ?答案:_______________
: }# K" @4 \! F' K5 ], i9 i
: p: {* \0 `0 C# Q0 W! D1 j$ f
& k8 ~+ R  T! A3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?2 W5 _" l1 K# c1 E, W, D
% {" G7 j9 E# |0 Y' M  b% `
A.通过HTTP_REMOTE_COOKIE访问
  k6 ?8 t+ i7 F% jB.不可能# }1 `0 j: F+ ], l2 B6 X
C.在调用setcookie()时设置一个不同的域名
! C+ ]" v+ ?. `* o8 U3 BD.向浏览器发送额外的请求
6 y7 I0 f2 L% F# i1 ~E.使用Javascript,把cookie包含在URL中发送  d& J+ T. U0 v% E; A: I
/ C% e# K- `6 f1 d! a, {

! y6 U/ x* Y& h+ u4.index.php脚本如何访问表单元素email的值?(双选)
1 g' D: K6 t; g7 @4 r1 d' p  }  ^+ \$ ^9 ~
<form action="index.php" method="post">/ W) `; `) l. w! U( L
<input type="text" name="email"/>
1 Q  b  u7 P1 u" ^</form>
. a' `: {/ M- x5 _/ W+ n, @. f
* R2 U# a. m- C$ P: w( IA.$_GET[‘email’]
; @; h1 L8 L- [/ g! F1 kB.$_POST[‘email’], @6 z' |! o5 `# M# o8 A! t- Y
C.$_SESSION[‘text’]7 x  f5 w4 o" \, p0 z% F  c6 ^
D.$_REQUEST[‘email’]
- j: [9 ~5 ^- o* aE.$_POST[‘text’]5 i! K  d3 f$ V0 |6 k

) j! X: e+ p$ t; b" k9 X+ F! M. l' w4 X3 v7 b0 g$ x. J
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
- ]. T9 g2 U# l  r( vB.没有变化6 J# ~+ Q; Q6 |' o( A2 ]1 ]8 I
C.在浏览器上打印该字符串时,尖括号是可见的
7 }* V# E. K- r, ^D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见4 b. X8 C! G7 M2 v+ }+ \" e
E.由于调用了htmlentities(),字符串会被销毁
4 G- H, s  f; w! E! M8 u" O
+ o) u4 M- @3 W  t8 Z, k3 a
8 q2 t5 ~) i- \7 i9 O6.如果不给cookie设置过期时间会怎么样?9 U8 h! q2 ]' S6 k* X
5 L$ ^' a- N: w
A.立刻过期
- Y/ F# D# v) Q' G# ?8 X1 r' Z! |B.永不过期
" s. j! ~4 ~& u: T+ u" A1 g& P( zC.cookie无法设置
, q3 F% m# @/ @9 sD.在浏览器会话结束时过期# f% y$ l3 ?  V: T- R
E.只在脚本没有产生服务器端session的情况下过期
% v8 {: p7 A* f" e& _& n* _8 c4 |- w7 J  _
) X3 I) j; m5 j$ @, G. X
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.什么都没有
! O- r0 _7 Z# ?' X5 P6 W6 g3 [B.Array6 E# v# Q) W+ |8 k% H
C.一个提示
$ q$ f2 A: Y3 U6 r$ Q, Z, [D.phpgreat' o# ?$ ^3 ?9 p8 {0 W+ n* |1 w0 Y
E.greatphp
$ m% i0 c+ a1 i3 o' q  |: w
/ ?+ V0 u* ~: d. p" S) P$ |8 L" D$ A; w% y7 T
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?8 z( M1 ], j' ^# J

) a+ I$ G! i6 M3 w$ J% A2 DA.这两个是明文传输,之后的信息加密传输4 p- ]$ x! g5 z2 x7 z
B.加密传输
& |: Q( L; F* t9 ^8 Z1 @% A; `C.URL明文传输,查询字串加密传输# t) E9 o; c- N& m* e, w; r* M% \
D.URL加密传输,查询字串明文传输& o& k( {+ _7 y: c* F+ ^
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
, m7 f% S( G# k/ e7 z2 z% @6 z2 O- d* H. d1 S# G* P: D/ ~2 g
! w$ @( r& o. Z: D0 p$ y% A% w5 `
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?$ {# ?' c$ z/ B1 f8 X  X6 S! a. S

4 e0 O* e1 Z' uA.它们组成一个数组,存储在超级全局变量数组中
# l& {  ~: c# M& b% HB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中: z- v5 _8 x1 \; x" \! H1 ?& D
C.第二个元素将覆盖第一个元素
1 t! O6 A1 m. |2 o+ |) A1 vD.第二个元素将自动被重命名4 n5 a4 ^  H9 I7 u& D5 }
E.PHP输出一个警告# L: ]% F, s' S, @. V- R/ j5 w

! J0 `  L" r$ Q$ s) d  \) v9 B; K8 k# d2 n8 I. P; X' \1 Z* C
10.如何把数组存储在cookie里?
! Z/ x9 L, i' d/ U, z, |, q6 q) T
! M3 A! V8 C' Z* S4 F% j$ O, V# DA.给cookie名添加一对方括号[]
. G- n! A/ G- O4 R: e' f2 lB.使用implode函数7 {; C& m& ?* h. ?) D4 J. J
C.不可能,因为有容量限制
: b3 A' y6 I3 i5 RD.使用serialize函数
# G+ J# G: R5 P7 UE.给cookie名添加ARRAY关键词& i; `& s/ C5 S) I- t/ \7 s

9 p- @0 D8 y. Z/ g9 y
- [- o1 Z/ M6 J( M- A- h# R8 m11.以下脚本输出什么?

  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
. Q8 l1 S7 `) T: s& I; ~, Z/ k, xB.12345678909 ]) U5 ^1 r0 X/ Q' |0 C% w3 {1 k( q
C.0123456789- M! Z- g1 o2 p* |( u7 t4 |, }
D.什么都没有/ x9 X, Y5 i- W: O' _* D4 m4 q7 \
E.一个提示7 l' E- n& h  R; @% L3 r( M
6 k/ `1 c! Y! n" N  i/ N
8 x! G7 I$ J. }0 }8 r
12.默认情况下,PHP把会话(session)数据存储在______里。
2 {0 {& f- [# L7 ?! r/ c1 p
+ t! P3 [. {$ Q2 W# Y3 k6 R$ b4 OA.文件系统
& _9 ^4 P! H* Z8 GB.数据库) m' |/ Q7 M9 M) Y
C.虚拟内容" q( u8 N$ @' ?  u
D.共享内存
3 B, M3 c5 ?6 C: |) k+ dE.以上都不是# d4 r  g" e7 g: M, W* E: c. C
1 k1 N, v% n: m" d

. B( W( Y4 N9 P% d' D* Z/ @13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
" k. c: z$ L! @& A# u- u( F
# |* E( S2 I1 k6 G9 Q2 ?$ pA.浏览器的程序出问题了
# X  x+ W: o" [, P) m# dB.客户端的时区设置不正确
) R8 n9 p2 x) m4 N1 S% ~# s7 K% I  zC.用户的杀毒软件阻止了所有安全的cookie
# P; j! U6 N( Q& H" MD.浏览器被设置为阻止任何cookie1 [8 Y8 ~! L# Y. p
E.cookie里使用了非法的字符$ z+ I" P* M4 C: f6 ]! V
: i5 e3 N9 Z7 z6 a5 U3 P: Z: A5 H
- b% \7 T+ o9 f7 S: l
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
) V/ |& {% L- M
$ U5 A8 A: \: l8 B" V0 XA.1440秒后
8 f, I' F1 v0 q9 M4 h6 q5 JB.在session.gc_maxlifetime设置的时间过了后
: R; j" J  @& L2 r1 l, z9 eC.除非手动删除,否则永不过期6 ^; P3 P" g% {3 \: D7 l$ M  f
D.除非浏览器重启,否则永不过期% j8 x: G+ x9 {, L
E.以上都不对# R% i% w# e. B+ Q1 q8 J* f
$ L' @: k$ I2 s6 ^7 J

7 i) s4 Y1 q) [9 s% _$ [15.哪个函数能把换行转换成HTML标签<br />?1 \; S- ?5 x5 Q4 c$ M; Y* z) f0 {( y

3 v( F( ?) o. E% B+ }答案:____________
, U! W! a8 `* g. n7 y* K; b" M# R" H  E4 N

7 b" \1 l, c$ S2 g
7 s+ M8 d8 m% y答案速查9 g! i! C! o# h4 A
1:E
8 l' U+ i+ b# I& A  a) f! u2:setcookie/setrawcookie
7 J+ C4 Z" B/ T3:B4 g: U- ~+ N3 O4 M1 E
4:BD. {5 v" B, k4 I, q1 x% S
5:BD- [( w. T3 I; ^8 B0 d
6:D4 l% _7 ~9 t9 ?0 n& W" g
7:A
; L: q, _% I$ V# n8:B2 {4 J$ w, m/ z. P! k3 P
9:C9 a! H7 K7 u+ e4 ~
10:B* J& U# t3 D" t) X. H1 W# q
11:E
& h5 _3 @4 H. Q* s4 s) n12:A
, T! M4 O8 c1 m13:BD2 u# i- i! Q! z$ j( K" ?
14:B; P$ h# d( K, H/ N5 O" {0 m8 a
15:nl2br
7 w  n$ G4 x" k- B9 c& S" J+ B* \
  [) g7 j% i1 Q& f8 w- T
! C# }4 l, w4 Y+ N2 j- F# N- ?6 [- G# Y2 |/ R* v, [
答案详解" ^/ y9 g$ N8 c7 o* d- K
" W3 B" Y: H) i2 y
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。3 e- ?. Q. r  d& V, W
7 P7 K, R& r' V  r& W
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
: ~- p2 T2 t6 S, }4 [# n. r2 j& r5 q! X4 \9 R, ]. N( Y
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。6 N. d* w+ C, [: u8 G: A6 c

1 A% O+ X( n* T3 N( G+ B4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
7 i+ R- T# i  P/ q7 [0 V% y' l" l7 X9 J. ^: Z% x
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
. I" g6 m7 Y/ n8 j3 o1 Q
* r( \, @2 C  Y' m0 D; P, x6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。7 B) c+ w4 c4 ~2 B3 u
5 n1 B- R8 W  U+ x9 K0 k/ w
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
" T0 y) w! k7 K1 |
( x& l6 N) H# p8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
7 H6 ]. \4 B* P* P
# T1 J# {+ |& E5 d9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
* y6 Z4 s! f4 \; K
3 ?# n- _0 b8 u) _10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
! Z; W( u/ Q' k$ K& y* p. j
( L: f. O# |7 v% [+ {11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
, _5 ]9 d6 {8 s1 w' S# }  S* ?+ r1 @, o+ [' n
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。7 ~6 A7 B3 Y9 \7 d# X& s5 h

1 @* A$ h6 e# _& D. `0 F5 f13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
9 ~7 \$ E. H: h
& J+ N% |  P6 Q14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
: B# E* y& S* m$ ~3 d, e2 z. S2 N. x4 t1 C* {
15.函数nl2br能实现这个功能。

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