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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
; s0 U1 w* v$ y  u, U4 }% L与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。6 |/ G- ^  c2 D9 ]
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
2 `6 j+ r' y2 y2 R6 N( t# d; U6 g; M0 |- J. P- C. F
- {/ ]  @6 G& Z; \. i: v/ ]
问题
3 I$ C+ e' _+ ]" a
" W% v9 l/ [' b. n& W0 E1.如何访问会话变量(session)?& |4 I  @8 O' r7 n+ l2 Z" \

" @  m0 ]8 T# X  t9 HA.通过$_GET
$ \8 Q7 V) p. i# w" G6 B* z& NB.通过$_POST: w- E/ \' n' `5 t: y) y
C.通过$_REQUEST
# t6 \/ F9 |/ iD.通过全局变量/ l- C7 T0 E! E8 J
E.以上都不对: R7 R4 p( K% H

7 e' P1 y+ \, u) R+ P1 u
6 t* B0 u1 H$ L% C2.哪个函数能让服务器输出如下header?
3 @9 |6 ]1 C! I1 A; N  h
/ d, \3 J& R, Y6 L; \set-Cookie: foo=bar;
1 E3 [- k" @2 q* ]/ i+ X( ^/ Z$ C9 g9 r% I" p3 L& _
答案:_______________0 x, y) C$ P3 |. ?2 R

- J5 X9 Q% S# y9 M  w/ r
3 Q% e2 W+ L8 O) o* j7 H3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
/ I3 _2 A: A' Z' N  F6 i& }- j% }: ?, @4 M; q- ^
A.通过HTTP_REMOTE_COOKIE访问  W. J/ `& {% O& k. ^# g9 V3 s
B.不可能0 v2 V. v1 _" J) G) J$ ^/ Z5 x
C.在调用setcookie()时设置一个不同的域名9 ?( R2 x) I9 f& c/ ^
D.向浏览器发送额外的请求6 D  A# h# r! q4 j+ D, ?+ P" O$ K! w
E.使用Javascript,把cookie包含在URL中发送5 V: w, W+ p' U+ R
3 v8 X$ c) n! c& q* S

) |" {5 Z" b; W# w6 k! x, v4.index.php脚本如何访问表单元素email的值?(双选), \  Q7 v0 B# H7 V

& P; ^. Q5 G; l3 z) }: `<form action="index.php" method="post">% P( d6 }, u' x) ~: [
<input type="text" name="email"/>
% j4 E0 v+ y6 y2 ^8 S# N</form>
0 y1 C2 l$ \! a! _+ A, _5 i& P4 C: e- A. A
A.$_GET[‘email’]
2 b; V+ [- S4 ]- pB.$_POST[‘email’]- l, ]) {2 n) D
C.$_SESSION[‘text’]% L8 J4 V6 {) r7 l: c) d0 G
D.$_REQUEST[‘email’]
$ j2 I+ Q0 l8 @+ JE.$_POST[‘text’], r" l0 }- ~2 F# P- d, f
) ?# _5 u0 K! O
( Q, H# R8 ^6 ~% n) U/ d; S
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
' z; W3 M4 W, X3 n; _: L2 z1 l4 L6 qB.没有变化7 R" }/ f7 U; i/ g6 I% G
C.在浏览器上打印该字符串时,尖括号是可见的
$ o9 D# j6 s$ p& h, T0 e! ?" `D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见* B7 Z% u& {1 @( a; [1 l
E.由于调用了htmlentities(),字符串会被销毁! x* x& g* ~5 Z* y

2 q9 S2 v/ _. o1 o- ^
' e3 ~# I9 f' v; t0 X" B6.如果不给cookie设置过期时间会怎么样?
6 |' Z( ]) m: s
; v- _" X- T6 z3 u% C( T+ NA.立刻过期9 D# ^3 k. C! l$ ]7 n
B.永不过期, V- s+ `  I( C/ i( s; Q; ^; |: T" r
C.cookie无法设置
& F+ C0 Y( Z+ J$ |' z3 [D.在浏览器会话结束时过期3 N0 s& R# c2 R+ c7 `# M: O  \8 t) `
E.只在脚本没有产生服务器端session的情况下过期
/ Z% I3 {. H+ \: _2 x4 \$ m+ j* ^$ e
9 x$ W  j8 O, s6 K9 W6 J+ z2 F# P0 S* n* x+ 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.什么都没有
# Y4 S: E) Z2 e; x+ h, t7 eB.Array
3 E/ M7 L& j$ l$ O7 M) FC.一个提示# _! u# Z  U( T) s8 G# \" W7 b
D.phpgreat& G# G- b$ k2 q9 y3 \" a
E.greatphp5 [$ `; C& B, L3 @
' i7 m0 G7 K1 V' I9 o
8 U8 {$ ]# F1 e2 ?- e
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
8 B- k) i+ w+ E8 I; n( I, j5 ^, K0 b2 z8 C: K- D  K
A.这两个是明文传输,之后的信息加密传输
# k4 m# v+ C5 q" u. sB.加密传输' v: \: _& t& k) n
C.URL明文传输,查询字串加密传输
. j  i" O3 _/ T9 }4 E8 r4 aD.URL加密传输,查询字串明文传输* {& n; }4 G9 m( `2 O
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
; w' M' w7 M; S% L6 D1 z) e( ]7 X, S( c& l( b4 h

8 t8 ~/ R; y# f, i# C9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?5 Z3 ^* }# Q7 u7 C; ]

: l. T. b7 N, L" J7 p; ~A.它们组成一个数组,存储在超级全局变量数组中3 m- G4 x: ]: _6 e/ g8 |
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
9 Y7 e. _, D( o8 V9 a" xC.第二个元素将覆盖第一个元素( p/ ^" S( o% x, J/ C- R
D.第二个元素将自动被重命名
0 S& b; n! x" d. _E.PHP输出一个警告
3 x9 G* S0 h  ~9 y" c# r
' ^' e! j5 A! D6 _0 {" U
; k; L6 M, q3 J1 N  H; D10.如何把数组存储在cookie里?
$ R/ E8 o# c+ P- v2 M: N  A# a* M6 Y8 s# f
A.给cookie名添加一对方括号[]: B' y6 m: y7 a& U/ R
B.使用implode函数
! @4 _$ g2 D( R4 rC.不可能,因为有容量限制$ R9 k. i, O' J# j8 @2 h5 A) r
D.使用serialize函数1 c" I5 K: f: x
E.给cookie名添加ARRAY关键词
# ]' k/ c8 Q( K  `; _; p5 o
3 X  t! K7 T: K, w4 Z. i; d4 ~/ Q2 O/ T4 g1 R% g  Y! h% E
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
; K) `0 S+ {. M1 W) c1 Q4 J% tB.12345678905 a% k' s) \% Q
C.0123456789
7 O+ D5 o, M: A2 ?3 W4 jD.什么都没有5 s0 c( ?. H# V; v; `% m
E.一个提示% q: M2 e2 h7 k
* a7 T9 d4 m) y% B. _. I% y5 c

% S6 L# t" j0 X$ w# q12.默认情况下,PHP把会话(session)数据存储在______里。: r6 g; l0 o2 K/ @/ u

5 g! a6 [; C5 K/ u! k- DA.文件系统: o7 k0 S5 _6 Y1 m
B.数据库; L' o5 j" S* o9 A2 A5 a
C.虚拟内容& ]5 h6 o0 _& y, E6 e, i8 H
D.共享内存
4 e6 ]: p- y4 a& I1 lE.以上都不是2 D) n! H- v$ `
- L  N9 b1 l. N: h: @; W) _' u5 `
* n4 B2 c& T' D1 m
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
6 `9 }/ j2 M8 D+ B8 L
7 X/ D% l! z( W- P' a1 P* eA.浏览器的程序出问题了
! e7 }+ a" H# w' `6 y# u6 d  i9 {B.客户端的时区设置不正确
# i2 h) C0 v+ y8 m- m! [C.用户的杀毒软件阻止了所有安全的cookie; M, Y: i3 \* R% L' r
D.浏览器被设置为阻止任何cookie
' C. s" i6 D  j- M# s% |; SE.cookie里使用了非法的字符" R( [4 k) Q% v+ [
* S9 L5 j0 E% T8 E- K: Z4 b
8 [% C% y* c( k9 z( _/ N2 s& s
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
# L3 S& Z" g1 ~3 \7 v8 u7 r5 H, R6 ~1 n3 e2 l# s( q# t
A.1440秒后
# {' U$ e% b# q; o3 C+ H6 RB.在session.gc_maxlifetime设置的时间过了后
. W1 F9 D9 I& z0 b! J0 `3 |; |C.除非手动删除,否则永不过期0 o( y: b/ P0 ]& U# j3 j. S9 K
D.除非浏览器重启,否则永不过期" Q' l( j! H, E3 M
E.以上都不对
5 m" }' c1 t! Q0 i  j1 k+ c
* M; T% G1 m8 h( T. ^
& f3 X- A$ d0 R, d7 M8 f, k15.哪个函数能把换行转换成HTML标签<br />?
6 a  F- `2 ?. A% Y9 ?7 T3 z
+ h5 a* m% f& b2 ^, F. O答案:____________
1 j2 {" N. N  ]( f0 ^- W8 k
  f6 ]0 p/ q) h5 X: x, T2 F0 ]3 X4 I, W/ R
2 {( v8 p5 H/ R. P
答案速查
6 z& `* q3 L5 T* |  I1:E
8 I( K1 v. F; Z5 ^2:setcookie/setrawcookie; J: D1 L. z9 i2 [4 G
3:B
1 L% k# {7 H! e6 k) J* O. ?4:BD5 M9 _( B+ ^0 Y- q/ J% K. V6 R
5:BD
/ T5 R* A* F1 S% O6:D5 b8 l7 j! }2 Q" e' [
7:A. u1 v. @( d' g  Q  H1 i
8:B& `* d6 r$ i9 x. d7 r# W4 P; W
9:C
9 h* [0 m! `% |6 V10:B
6 ]0 P9 B5 C" w9 i3 f5 }# E- }8 o11:E$ i7 `$ h/ ~) s! r6 h+ Y) F
12:A5 C( k- E1 ?- r* L
13:BD
7 v) p. s0 {- |6 X14:B6 E! @4 S& U/ A+ A: ~' Y
15:nl2br
4 J2 ?8 O8 W8 a& j  ]. C. r8 c8 f: Y6 c! |; A( T
' e* K( y& @" y

; k& S& }- c+ B& o! k6 j: B( Q' F答案详解
, ?% x+ k( T! I3 r% }5 A
; k; E+ A( a# X* O1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。+ ~/ u0 f5 x8 G  q

) l' [3 Z, m$ f6 k9 S; N) r2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。0 v6 y& `% q' V: ~8 K; K

0 O' M* Y- f. Z' n& s0 E3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。& s: _: ^) }; h3 q$ k

9 m2 H& N- x) P4 I) ~4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。: Y/ j' Z7 f+ D0 K% m
7 C& [. {  K; ?5 R- v
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
$ _; T9 P& F+ h0 P" J# k! c. d7 {$ G2 v: [* Y! A0 O3 d& @
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。( e) a$ B. G  c  [
. P' i1 ^; y2 @+ X8 q" |
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。1 @" W% D  X" H2 a& w
, f9 _+ V  O4 d6 @- x% Z
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。' w; S6 M1 Q3 S" t1 F
0 P* o3 P: V4 ]" v! r  E3 N% r
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
( U7 [! P  ~1 i7 x. z  ^  F  r9 k4 m" Y
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。) l- K1 `  [: _

9 p0 U4 M4 y$ |11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
  a+ e" n- c5 K" U: J7 Z$ u$ A3 D. V
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
* P3 S6 [/ n' L/ f8 T
6 r. F; a9 C, K# z13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
5 H# Y, D" u5 V4 o
% E9 j. L2 _. X0 T% c( L14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
; J. j! m8 ~  A6 z$ I
1 i, r3 Y* D8 J% C0 I5 o& }15.函数nl2br能实现这个功能。

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