返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
+ ]* L4 Q: i& t" L与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
+ b/ m# L. B" N/ h一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。8 @# q% r% S7 U* ]+ d
- \2 S# i9 F% _* g5 M
4 N2 t6 D4 \, a+ ^; N2 ^
问题
: Q1 L% t: E' X1 b
7 k4 [! Z* _  r( Y6 u! H) T" a1.如何访问会话变量(session)?2 p0 d. `1 K/ I

" Q7 N* ]6 }3 x! DA.通过$_GET1 y2 ~8 u) ?' G; Z! E; n) y  w) g
B.通过$_POST* |6 J% j1 [! y7 R
C.通过$_REQUEST. A' P6 x' I) B1 r  |2 h* C
D.通过全局变量
/ b, h1 S; T: N* a* e- m9 wE.以上都不对
( K' Y/ H$ q' j" U8 ]  S7 O
* h" S$ M4 p7 D9 c3 e# {6 C5 y" F  d2 E; i% K" q: O' t
2.哪个函数能让服务器输出如下header?, v: G+ k+ G* a3 C- b9 X

) B3 z/ z; H6 s  V/ }set-Cookie: foo=bar;# N/ b. J9 }/ W* ]% H" e

6 J# {; D0 `( M答案:_______________
; ?2 ?3 G: c2 Q4 S3 i5 ~  m- X3 ^9 }8 _; h) @/ N, H  w" l5 u
0 B8 |3 c, w5 M! \
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?( Y8 p9 w2 Q5 A7 v- d. U
& t" N1 K3 y1 q& T3 y2 F0 T
A.通过HTTP_REMOTE_COOKIE访问5 l% ]- G, {, g/ v) U& l4 C
B.不可能
" z8 @, _8 V4 ~: r& U$ O. qC.在调用setcookie()时设置一个不同的域名2 @& d0 w3 @4 G  T" B
D.向浏览器发送额外的请求* _+ p( _! }/ b, f" |. Q: E
E.使用Javascript,把cookie包含在URL中发送' v0 {/ K1 n2 I7 ^) d& ^
. Q% B  d! i1 b$ q7 a( h3 P) A; n

& z# W* N2 v9 H- B4.index.php脚本如何访问表单元素email的值?(双选)
/ _5 j$ ]" j- q, D. F% g3 v9 l; q4 E0 ^3 J) P
<form action="index.php" method="post">
2 f7 z/ y. w% n3 N<input type="text" name="email"/>  |" l( T- X9 [: _
</form>/ i+ o' n& E1 e! \* R
8 e# ?8 [6 j9 ]3 J
A.$_GET[‘email’]( A6 V/ Y3 ^% v! i
B.$_POST[‘email’]
% K1 a* A8 l6 b( K8 y( FC.$_SESSION[‘text’]
. ]2 O/ }' E/ {" YD.$_REQUEST[‘email’]2 {2 u) s, [1 x! o
E.$_POST[‘text’]
3 d5 `5 P+ j7 q, d
( C8 e* e7 O$ u/ j- i+ B$ A; p! a! _  D! @
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长# x) F1 d5 k6 F. T; u, d& V
B.没有变化# i, q( g+ {; b! d! A
C.在浏览器上打印该字符串时,尖括号是可见的+ [# b+ N$ y# u
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见7 T8 r' j  Z, w% w0 [2 ^
E.由于调用了htmlentities(),字符串会被销毁9 z$ _, r) Z, y9 C8 ^# ~* P8 f
8 R& ^9 |) p' `) ~* F
4 b1 C$ h( W: x6 H! O! L7 g* R2 F/ @2 R
6.如果不给cookie设置过期时间会怎么样?$ k8 x- f1 W/ t% e. m6 \

' v5 J" `/ z( _+ @3 f) IA.立刻过期' r  O$ s# T/ n( M4 F0 K. p% M
B.永不过期  _' j) F' w: U: p1 E
C.cookie无法设置! @( o; f- |! d
D.在浏览器会话结束时过期
+ L# g7 J& ], M- g6 DE.只在脚本没有产生服务器端session的情况下过期: Y. }* e- h+ U( B' O8 m

1 A5 n5 [: x2 r5 r4 R& Z6 y) u9 A7 |/ 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.什么都没有
+ Q* L" b* r# f; \3 mB.Array
# O- y& l; F+ P" UC.一个提示1 u( F+ e2 j, z; K0 \
D.phpgreat
+ K+ t3 {/ e' E+ xE.greatphp5 m, H$ P: I8 F2 M4 W. j0 u
) c$ b! X. o; X; v$ Z# l

" v3 O( g4 y5 b( `$ p: b8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
, c5 L' ]0 U  k! _) A' D5 W" a6 t5 X1 j
A.这两个是明文传输,之后的信息加密传输% y& Z3 \# S0 m- |4 y7 N5 A) c* b
B.加密传输
& r$ ?0 T* _! e# q& C/ ]C.URL明文传输,查询字串加密传输5 m/ O& a! h  |4 ~$ a
D.URL加密传输,查询字串明文传输# K, X5 i( e, _. d' {5 @" h' U; J
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
" C3 q5 o% w( k: A9 y( Q. P9 H: ?! A, I
2 b* e; d' e4 f- k3 r
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?% I) H! _1 d6 i3 R' s" k" J

7 x0 K; N9 @5 a2 w# ^, TA.它们组成一个数组,存储在超级全局变量数组中
+ t2 F7 q7 i  X6 O' d/ iB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中0 u; h4 j9 ~% v0 L3 G" @1 d& u
C.第二个元素将覆盖第一个元素5 t' E( R2 M1 H# }* l7 W, N
D.第二个元素将自动被重命名1 W# Y# b0 K7 x! m: h- e% A$ I; }
E.PHP输出一个警告
$ W9 o' c$ v' _* R) M" E
7 b: J. ?: a. r; |7 F& {- R9 I- J, p7 g
10.如何把数组存储在cookie里?2 {2 b# V/ F4 y8 \- s0 F
- Z% S, C- u' F" r0 }# v; F
A.给cookie名添加一对方括号[]
4 x" V2 r$ i$ m/ n. W& c7 w$ ]" yB.使用implode函数
- i; J- u. B3 s3 E2 ^& {' w" cC.不可能,因为有容量限制, @2 {. V8 G& b; E0 j
D.使用serialize函数
3 e& I  D% k2 A5 Y' ~3 p6 F9 `E.给cookie名添加ARRAY关键词
* V3 i0 y7 r2 n8 Y, K+ ]5 E% }# W) C! z. D: c. J! b

& t/ m0 }5 s  {2 o11.以下脚本输出什么?

  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
3 c  l- z- N% E# Q) g1 w  VB.1234567890" \1 `/ V/ Z& \; u
C.0123456789$ W; X- k; c5 x# R6 j3 \1 E  r
D.什么都没有
5 Q5 q" B+ c; t6 ?# ~E.一个提示8 O# o! e% j# j. O7 ~
9 F5 w5 v2 W6 N3 ?0 Y
$ W, U, l: R- B+ P+ W" {
12.默认情况下,PHP把会话(session)数据存储在______里。
$ J% o5 `2 L# f) ?* |6 P) a1 }
, U- W+ ]( _0 DA.文件系统9 w+ H' `/ ]5 A7 a
B.数据库
  t  C! r1 b6 @7 a( ?C.虚拟内容& ?2 b+ v5 z4 ?- ?$ f, X+ @
D.共享内存( N! X5 C( u* e1 O2 z3 ~0 C3 X
E.以上都不是
* r0 h) o/ u: i4 Z3 k+ Q- T2 r5 K, [* t: y6 T6 n: r8 k
8 _" u; o6 F) ?+ C# n. U0 E" w
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)  |6 K0 P6 M  v8 t

* i8 {% R) [" ~7 d5 V: qA.浏览器的程序出问题了
7 L9 {- S6 M( ]& F* [B.客户端的时区设置不正确+ y( ?6 q* |, H& g
C.用户的杀毒软件阻止了所有安全的cookie; s3 ]$ H3 w1 f' ?% ~, v8 t: Q
D.浏览器被设置为阻止任何cookie" Y5 e+ j2 T  I- t, q( h. Z
E.cookie里使用了非法的字符
5 O3 `4 D; Z% \8 S. p* j1 ~  H9 ?7 F. e7 ^/ n

% A0 L" U; K% k  J5 a3 L4 P3 `14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?8 P' s$ o/ m$ s5 s! E; v

* h- _. ?) ?+ ], J* ]# tA.1440秒后
$ x, }+ X0 N1 J" L4 HB.在session.gc_maxlifetime设置的时间过了后. G. d* \/ d* Q: o( E0 s8 j
C.除非手动删除,否则永不过期# r6 Z- U3 v' @' {' }: N
D.除非浏览器重启,否则永不过期! G- ^) X0 a; A# M6 R3 Q$ T
E.以上都不对
4 o( w+ S7 Z" a
7 n+ y/ m$ _0 Q( [8 L/ \; l
( s: q+ H0 T: N) r5 U  u& p15.哪个函数能把换行转换成HTML标签<br />?
  j- c) s, h. B9 {5 C) [- \3 A" j" [9 H: w  ^$ _
答案:____________
3 ]7 Q6 f) q' Q& @4 _7 |
- z3 g7 _8 q# f- r+ h$ Q
1 Q% C6 x  |7 I# e2 G3 c  n9 T4 q& S/ G  j6 A9 r+ G# m% U: D
答案速查; q# T8 n) g1 v+ t2 P" k7 J
1:E! |1 e( f5 i' p0 z5 s
2:setcookie/setrawcookie
* m& }1 L3 {4 X: e- v/ Z7 z3:B0 v8 r5 L6 V4 S
4:BD2 ~3 F5 ]6 R$ q" ~* i" ~  e
5:BD
$ o; n  B6 L/ ]6:D
& i! I1 O9 U( V3 B7 x8 w  k7 N3 p7:A1 @; ^+ m& L* Q' H- \! N
8:B% e: }+ {9 T7 B2 F; Q  F+ _: e
9:C
( G3 z8 J2 v- O' O. S10:B
2 v* X( N& g. }7 C3 v; G11:E
  F8 F0 `% q7 v12:A2 P, {9 J* @! i! I
13:BD
, D3 |3 d" v2 _14:B& v6 l8 w+ t. t' E* ~
15:nl2br
4 T$ P$ n3 V* p1 R6 P: _# W
/ v$ y! ~2 D* V/ {8 C) I7 [& _3 \. P+ r8 ]* I: u% r
, z( Z/ [) t* {
答案详解
8 P* w/ S( y! @. Y0 E$ i* Y8 s4 ^+ W( Y
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。$ z+ H! Y9 u$ b9 b
  M0 G' ^7 o7 _& ?
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
6 U1 \& D; V4 q6 I4 K3 _0 @1 b$ D" i8 o! v% G8 z/ D
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。' R7 G- h# _$ R$ D* E

/ F3 J" U+ @) T  q4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。( W4 E" l# J( L2 F

- E3 }9 z+ ?$ o- `" a3 i3 r5 t5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。; S9 l5 [% {2 W

- S0 L7 m5 r6 i/ L6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
# C; U& K5 e$ e2 K0 a3 \# H- o
) z! h" S& c1 |/ I9 e5 X8 w7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
: v' }9 o' Q+ S1 c& l8 g: W' D1 E! J* \4 R) r' Q4 S$ X
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。/ e/ T3 B! M0 p/ `! Z% o' p& j% r

7 |7 G' C; ]1 V9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。/ V; t9 N  g. i$ n0 O
; b7 D% C! z8 Z1 e
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。. ?7 X8 z# t) @+ s% B* Z

4 _0 M' L( X; t) I, W, d* ^11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
( Q; b9 y1 V- G* {5 @  U! u- z6 ~  |/ M3 o+ v( f  _/ f: h
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
3 W) {5 o3 N- i: e5 x" j, T
8 P1 @- t, d" N9 k; [13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
7 c" |" V) T& |, H5 k$ \0 r. t2 `+ C; J  c+ L2 s0 R
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
" b: L# C7 U. Q( y3 Y/ l# U# A/ N3 l9 ~+ h
15.函数nl2br能实现这个功能。

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