  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14249
- 金币
- 2415
- 威望
- 1647
- 贡献
- 1363
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
& e% {2 s! `$ l1 W# {与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。5 T( d' u" B2 W8 W9 \
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
& A# `$ B! e' D: i" O
* H8 C% \& g" z) L
2 J: T( g% H& ~# b& w* Q& B( ?问题! @, Y6 L" h, S1 I
) k0 z& y8 Z7 Z! n2 [+ l( i
1.如何访问会话变量(session)?! ~: F) Q2 }3 L& n2 A3 t! f! U( b
6 X8 K7 h) I. o9 S: y: mA.通过$_GET& `2 ~7 t+ I6 q) g. d' I
B.通过$_POST
: C- T$ F4 D% dC.通过$_REQUEST
# }3 T. G( s) \D.通过全局变量; @& v" g5 j! X
E.以上都不对/ q* |! y3 z$ F; B4 g, B0 a- t
4 ^# Y" A8 a# T! C
: P5 N4 N8 B5 a$ D! k
2.哪个函数能让服务器输出如下header?
* `7 @$ l5 G5 O
5 b" [ v1 F' U+ {set-Cookie: foo=bar;9 ^+ K' ?' v! x7 k L
! u" J4 c; @# K& J; l
答案:_______________* k# q, v9 j4 J. \6 a
( s' ^0 w3 k2 q# i! ~ r
( \7 _- e) P8 Z7 a
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
6 ?( |- Y1 L8 Y& h
( u& h; @2 ?3 U- {& L# o+ JA.通过HTTP_REMOTE_COOKIE访问% m4 R+ h" a- p+ a$ ^) |
B.不可能
5 I4 x2 ?- D/ B xC.在调用setcookie()时设置一个不同的域名
! s/ b8 X F1 ?! `; L, Y( {D.向浏览器发送额外的请求
- O* P) z, ~ k0 N2 }, `! fE.使用Javascript,把cookie包含在URL中发送
( K. K G$ M7 a" k; ]4 f: Q
7 P4 `: T& I8 o
1 s b1 Q O6 r( X; I$ H" O4.index.php脚本如何访问表单元素email的值?(双选)
6 m* W5 C+ Q4 u, {0 g. h" {0 U# L }0 H' g
<form action="index.php" method="post">3 Q; T( G+ D& k4 E e2 l
<input type="text" name="email"/>, [6 V8 b- T. y" e; b! v5 G" v2 E
</form>
; F4 `# I0 D/ l7 N- b) p3 W3 V$ f/ m2 C( O( m! F: H
A.$_GET[‘email’]* Z* C5 s4 h9 T" T8 V/ r" u' L$ J
B.$_POST[‘email’]
' X* w" n& P# g/ l: f& ]C.$_SESSION[‘text’]' v" i3 G8 ]6 r$ W/ k
D.$_REQUEST[‘email’]
% n& J( D- n# K, }4 ?E.$_POST[‘text’]
' j/ ?% {* j }) K3 H4 E# @/ Q0 H% b0 b& |3 j- l
4 g+ ~8 ~! Q/ F
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
$ C$ z$ e' ^; |/ h: A2 }! CB.没有变化9 M) r4 |( e* p
C.在浏览器上打印该字符串时,尖括号是可见的$ P" v6 }% ~9 q
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见7 [' C F1 \! ]9 d, C' l0 m9 K
E.由于调用了htmlentities(),字符串会被销毁
+ R& D1 s7 \% H- u. w) X9 f$ D3 _: W, Z+ n
6 t- j4 P3 | J; i( Q& C
6.如果不给cookie设置过期时间会怎么样?
9 ]; l, c# q; b/ | r
Y! T1 m) g8 ?# R ^! s5 u' X+ p, xA.立刻过期
7 A0 M* X) ?8 \+ I- sB.永不过期
' @% ] e6 X9 l& wC.cookie无法设置
( X2 V# @/ K1 \$ i6 a6 O1 AD.在浏览器会话结束时过期' O2 Q. h6 S7 [' f) T! j. A# h
E.只在脚本没有产生服务器端session的情况下过期. x4 ?4 u0 l% q; \4 U- g8 P
) \$ v5 d( G4 ]' a N7 x5 }9 n6 M" h1 q4 C- w) @3 T
7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
4 V5 u( u# I2 \2 t$ |B.Array& z9 U1 r' u# T- |" B% G' C
C.一个提示
6 X* j/ X7 E0 BD.phpgreat
2 R: p9 G0 L: P$ Y- S0 k% S7 xE.greatphp
% d; y9 N5 y! i+ f: |& ?0 @+ c+ m4 x' P K
/ O$ i& ^! g7 _# h' m$ @
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?4 r. l4 U8 o" |; i
/ C% R/ K& W. `A.这两个是明文传输,之后的信息加密传输/ o |4 ]' s& A9 o! c
B.加密传输+ K; _3 |# n( N' N
C.URL明文传输,查询字串加密传输/ y" G+ y3 v* W; W
D.URL加密传输,查询字串明文传输' Y2 H w7 D& c; J7 R, B' T
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
( Y( ?9 N0 C% F/ ?( ~6 ~- H. [3 F( a
1 A4 C2 ]$ w2 E$ Q/ H; y4 o; ~) Z6 _$ L
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
7 A: @. k2 d1 P( q: T# O* B' q! k; k1 Y( R
A.它们组成一个数组,存储在超级全局变量数组中) c0 Z% D: d* z5 S% s7 z
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
6 e& d; h6 h4 `3 S$ d3 {' E* X& HC.第二个元素将覆盖第一个元素
; B0 C( x" P$ ~" CD.第二个元素将自动被重命名
) O" v, c$ M5 Z% h9 _2 F0 {E.PHP输出一个警告
0 l& g6 \, V9 n4 J) T* f7 W; c# d5 ]( x) ?9 U! b
8 F# w7 T9 R$ f+ [# W: M10.如何把数组存储在cookie里?. j/ Q3 {1 Z& x2 c
/ \/ n; L. L" h% n/ @# S/ \, }
A.给cookie名添加一对方括号[]$ k7 W' T9 q3 r
B.使用implode函数
" a( ~4 r+ x) M- O3 R$ g4 @C.不可能,因为有容量限制
! c2 m9 C: U' f8 [0 KD.使用serialize函数
$ d# O/ i6 z8 A) mE.给cookie名添加ARRAY关键词
# U5 J; B- \" A7 S- T
) C4 a/ \( z6 z# c# r: F9 Y6 Q- P% X; a5 G' t# {
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
$ a: h8 @; ~7 m( E/ N4 X8 GB.1234567890# W8 T) `8 d3 S& l
C.0123456789
. o7 B G. k ]5 m. i3 ]% e" KD.什么都没有
1 V7 V$ j- _: P; V9 J% OE.一个提示
, o6 C( s5 [9 R# @! j% _8 j2 W T' x8 i) J, p- u
8 w1 `; |0 y( A9 {1 q H4 Z12.默认情况下,PHP把会话(session)数据存储在______里。# c1 w* K6 U. f+ G# A
8 ?; X! I. t! e9 |A.文件系统
9 }- Q3 J. a& G0 h3 `1 KB.数据库
# g1 R3 n. m* E9 k6 S8 BC.虚拟内容' ~+ E6 l( E& }- `: {
D.共享内存' s# _0 v) x+ c0 ^" \
E.以上都不是) ]! n( o: l7 y2 ~! N7 N6 {
, [& m- D3 [$ [ g6 |( A' F% ?8 j" m3 g% u/ C& L6 E( ?
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
, ]$ H/ N9 U5 x6 I/ I7 J5 R- D$ K
p& j% A& \# [; DA.浏览器的程序出问题了 C9 _( N! Y; Y7 V% m
B.客户端的时区设置不正确( {4 e3 b& ~3 K$ q" J# L& _- U
C.用户的杀毒软件阻止了所有安全的cookie0 a* [4 v- y6 j. c2 a+ w3 l; h
D.浏览器被设置为阻止任何cookie
2 t" H! o7 e# q- j0 w( L6 t3 rE.cookie里使用了非法的字符+ z( o# a, n; _
" w: e" O! n. q1 u) D( T% I6 W, V |3 {% _. x
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收? G! i; `) H4 ]8 g
3 W8 k6 V/ }' [' iA.1440秒后
. @% k8 }) w* K) RB.在session.gc_maxlifetime设置的时间过了后: n; {2 ?" A" K1 I# {
C.除非手动删除,否则永不过期; u! _: h# V% f9 W2 S0 S' Z7 A
D.除非浏览器重启,否则永不过期' k: Y# s$ j& e8 \! i' D
E.以上都不对4 `9 T8 U/ C" g
8 ~7 f, F7 L4 A' c5 g
* N9 T- c2 A0 M4 l" }- Y15.哪个函数能把换行转换成HTML标签<br />?) K3 X4 l% K4 U0 Z: ?6 G* J% l
. X3 u( F" }( e/ v
答案:____________
' H6 h3 g: ^! F) Y( x. i( _- P" m
. h9 V- P4 h6 }- x5 t# {9 t2 p" d' n; I9 w2 m, M) R
答案速查
' K; n" v7 P: ], E0 X+ { X. P1:E
! y+ a' B' q4 B" }2 F: L2:setcookie/setrawcookie& Y* D* d( Z/ q2 o
3:B
) |0 ]8 l Q4 V$ {) W4:BD/ E6 ]) u/ W6 `9 c! Y2 j: \
5:BD
9 k& _) `4 L/ A J" P) M6:D
' ?2 h0 y' o8 K6 k ~& e7:A
, q/ z2 d- h+ g* o9 _& b8:B0 ~/ ~; S n! x- o- Q r0 i. F
9:C5 l) P6 @5 w" A% F+ a4 S3 V
10:B4 u6 q9 V6 j l
11:E
0 |6 k ^" x/ v5 n1 ~12:A4 Q+ X6 R; j. }7 }+ i5 S% P! D7 Y+ s
13:BD9 b8 d% ^2 W5 N
14:B
" y8 G4 I0 X, a1 ~- l: I15:nl2br, r; n [# f- a9 Z" ^
, N6 Y7 e. I: i5 s8 K1 e
. m2 Y$ E4 N( u, ~( F; Y! f F3 R5 }; }2 E
答案详解/ i6 t9 E4 B3 k4 H! B
% N8 }, s$ G* h" S7 e- z& M$ Y
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。6 }9 G; G4 i- |& E2 @/ [" ]: |
2 v7 h# `7 ]7 s
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。& R; j/ ~# y+ J- T) E, A7 \# T
/ D$ b& D1 j$ r6 ~9 E/ g
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。' d* ~( R, |$ y3 t; c4 [' Z: l
" m# t; w3 N( T9 i" n4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。6 U" M; f3 ], k' ?3 Y" D
$ y. |2 d, i7 u" f* }; [
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
6 E: ?4 E+ K2 }) {4 J. B- [, d
0 I& h6 m4 P, \- ]/ c/ N$ s% V6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。9 K$ |4 B* j% V4 n$ t& {1 i
+ z" E$ \: [6 M7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。& B, [9 `! I$ F+ V4 R9 E$ N
. h( b0 j" q1 }8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。6 y2 {9 C! e2 X5 z
: V' u$ P1 U% }, U/ K8 H
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
3 a5 p% W6 L( g: l1 ~* D
, B" q& S5 i' U10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。% ?5 \) b! {# e, v. D
- a! c4 S% Z4 ~0 l
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。 t* s% f% y7 [: [! W
. K$ Q( M8 L0 u12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。3 [+ z A s6 R! K8 ^
5 Z) J' J( z: X/ w, h13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。7 u! P$ j$ ?! i5 S* P
" v* q, d( ~: v- ?
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
: V2 C v1 {8 X. X) `6 J* X& V4 v' U% v; B
15.函数nl2br能实现这个功能。 |
|