  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14197
- 金币
- 2389
- 威望
- 1647
- 贡献
- 1337
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。5 W; n$ `! f; }. o: h
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。 w. b/ ~3 X( j [, r: H& H2 x
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。0 q; P7 s2 N# C, V8 J
I2 |) v D) O4 V" [. _. x
- f- U, y; G& B1 g! ]
问题
# V9 V/ K/ s" g6 S" r. \
3 o$ E: V! |' K6 K/ D* f1.如何访问会话变量(session)?9 H+ u1 W2 g2 O- ]6 I3 K
: X* l. H( C$ H: n6 t7 Y- d1 ~A.通过$_GET
& S5 [+ l: \& P* mB.通过$_POST9 ~4 P7 d4 r! p* b* T2 m4 h
C.通过$_REQUEST
" s; h1 U' D; g" _, ND.通过全局变量
/ K" \3 V4 N7 \ X- yE.以上都不对' U% x4 u0 _; e3 C X. C
w: X0 B9 v: H7 O$ l
9 G4 \) M+ O+ \
2.哪个函数能让服务器输出如下header?
4 p/ G8 D! g9 o/ a+ l( L. w0 W
3 i. g1 u1 S- F' R$ ^set-Cookie: foo=bar;
1 {8 v" v2 P; W: L/ {1 y4 k' Z- I5 H9 H6 M5 f
+ E" W9 T* D/ U/ F: s答案:_______________
* ]( y6 f* B; E/ c7 P7 |" s7 C" c3 z6 D& c/ J+ _$ L0 m
. O+ b4 f+ T/ e
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?. Y$ Z3 ~- Y/ ^- A( _1 l) u
2 Q9 w6 W. z2 xA.通过HTTP_REMOTE_COOKIE访问6 S; t0 d+ w+ g- i
B.不可能
; h5 D2 c5 }3 l6 S5 x4 X) s+ N7 IC.在调用setcookie()时设置一个不同的域名
; @: @7 J# w9 q* MD.向浏览器发送额外的请求0 K# I" B3 S4 Q% {9 U; `
E.使用Javascript,把cookie包含在URL中发送
2 `- R( b7 N7 T- V* c+ M1 v# j0 }( V) }/ x) L8 L' o, q7 v
7 t M1 x. K# o, t5 V) Z* [( w4.index.php脚本如何访问表单元素email的值?(双选)
* u! m( A1 j y6 c' R
9 g$ P. b; t5 J* L. [<form action="index.php" method="post">
1 |3 P$ u G( M0 v* n$ V<input type="text" name="email"/>8 U) g6 v) a5 @" m+ `
</form>" }/ _' g, x3 e- I9 g! w) `+ x+ A
4 O" O& T" B }, i. w3 Q/ c4 E2 N+ {
A.$_GET[‘email’]7 `' }. I) n9 [
B.$_POST[‘email’] t6 c# k8 B2 G% n+ s# w
C.$_SESSION[‘text’]( B: |- M0 c5 X! S/ I
D.$_REQUEST[‘email’]8 r) z& M0 I: S% C+ m* R, v8 c9 d
E.$_POST[‘text’]
7 v; N. e6 p* j3 d: Z7 Y" Y$ X( Q+ v! [
( \( a2 V- U2 T; F) s6 ~
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
) y/ o. {8 n& ]7 j( oB.没有变化
) f( j' Q' l: @; B. CC.在浏览器上打印该字符串时,尖括号是可见的
* \3 B' V4 o' q2 q1 Y; RD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
9 g, D7 [; z& s; h' }E.由于调用了htmlentities(),字符串会被销毁1 o4 ~6 e2 O- E" J7 N6 p! v' ]
1 L% N4 p- E1 Z- g: a: k
" B, B% C8 f* g4 n3 X6.如果不给cookie设置过期时间会怎么样?7 ~1 |( t0 T" u6 Q
/ q4 w; L+ a7 y. ~. {/ sA.立刻过期
( ~/ ? z" D6 w% L' O+ ^B.永不过期3 K1 C0 d4 `; Y( B! K
C.cookie无法设置 g1 f1 Y& z" r1 _3 l2 ^
D.在浏览器会话结束时过期
8 U' b: Z0 D, h7 f7 N P# n1 _E.只在脚本没有产生服务器端session的情况下过期
" j0 M( c8 _2 x$ H" L4 r' H1 [
6 C; P* ]# r( T7 d- F- g9 @+ a8 w$ Q; }+ j# ?/ {# s' v
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.什么都没有- c7 A* ?; w) H" h) \% R7 f2 n6 n
B.Array* ?4 l0 T9 m( ?6 F! k# a$ K1 \, I
C.一个提示6 I- y% [& E" I1 d7 m4 ?
D.phpgreat/ c( x9 c9 h9 h) q2 T
E.greatphp2 J3 I' [" v- O5 Q. i! k
- W' E- l4 W, t: I" a- D
. `. v$ d. Z/ g& |4 x0 a9 l8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
' `6 e$ l( ?. s
* E) [/ x+ |6 UA.这两个是明文传输,之后的信息加密传输
; E: k0 e4 T7 P1 ^5 k, e/ pB.加密传输1 \7 X0 i; R+ p' ~( L7 @1 U
C.URL明文传输,查询字串加密传输8 T! m& ^) l# i5 h& U
D.URL加密传输,查询字串明文传输
: D, g# I% U' P& v8 }( WE.为确保加密,查询字串将转换为header,夹在POST信息中传输
% x8 e) y! K K' X. s
, X- K+ K* D! ]3 J* c5 X- a! C# A/ ~ V( y
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?- F, Z8 R. L, V$ B; f# H1 o# l
( |" L% H9 g$ p$ OA.它们组成一个数组,存储在超级全局变量数组中
# I* P/ T% P1 d1 Z3 J iB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
0 t- Q# i* v5 |' h6 r+ m+ hC.第二个元素将覆盖第一个元素5 A, w3 k- [! b6 d2 R! y U
D.第二个元素将自动被重命名
: V k+ S- ?0 `9 o! D/ fE.PHP输出一个警告
$ p* |: [ i: N9 p
- F- C$ m$ |+ g
/ U: ^9 N, W# W8 q5 k10.如何把数组存储在cookie里?+ _) m1 A( C2 y+ ]3 ]+ N7 l
/ I6 |; e' I' a* G3 B* Y. R+ \A.给cookie名添加一对方括号[]
) T# q: i* o6 fB.使用implode函数5 F; ]. c4 Z G* S L& O
C.不可能,因为有容量限制
- `0 p, l) B' x: |' tD.使用serialize函数
# c [/ y# O. V& d3 V+ u1 n8 rE.给cookie名添加ARRAY关键词
& z$ @" @: W' y+ \$ P( O: o
+ O" f1 ]( `- {6 K3 I3 T/ W
! b$ j6 s5 e1 h1 c6 O11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
- t. z1 P! n* hB.1234567890
' }- {; F" }& _4 KC.0123456789
: Z- R0 O9 k! R: iD.什么都没有
" X$ q4 D7 M! L1 O5 ]7 XE.一个提示# b0 n7 ~" U# @% W" E
, W0 \ K9 A/ l' i. T" a% f
0 ?' I- k/ x6 \- m5 K/ j E9 I
12.默认情况下,PHP把会话(session)数据存储在______里。
$ y/ N* R: r6 D' d$ c0 L' ~- x9 {5 V' l- ~# Q3 S" \% I
A.文件系统5 {$ A J1 O9 Y# N
B.数据库. w# _/ T1 u8 z
C.虚拟内容
% v7 P8 w" x3 y+ m' J5 W/ y9 k4 TD.共享内存
( N) q1 Q( P3 X# xE.以上都不是
: o) T% R0 u" f5 I& u0 S6 r- V3 {, [% c* m G
. O/ [+ G( `9 Y8 L# n3 m13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)8 s/ O4 K' a Z6 w# g/ z, N% t; o
' s& M S2 k' i& Q* E z) qA.浏览器的程序出问题了
, E4 N+ M4 t# \1 L$ v5 tB.客户端的时区设置不正确$ G" n% R/ b4 e# ?; c$ }% p
C.用户的杀毒软件阻止了所有安全的cookie
7 [+ s- w1 M( tD.浏览器被设置为阻止任何cookie; {1 {4 ]; t" o3 b& l! G
E.cookie里使用了非法的字符
* w* T5 g/ z7 S) k! I3 F0 E2 R0 @ |& Z) W8 E
/ }2 `9 q, N) m. X2 J3 A
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
0 n- j/ K* |$ Z) R/ |- O+ ?3 ?# _/ Q/ q1 w% B- y
A.1440秒后7 B" `$ [5 f9 a0 R* L, O; |
B.在session.gc_maxlifetime设置的时间过了后
# D" ^( r& p6 l/ D+ b8 oC.除非手动删除,否则永不过期
3 K( L/ Z, C! Z, }; @( |! _D.除非浏览器重启,否则永不过期# Q. K4 D; y* e9 ^) K
E.以上都不对
% {5 x) m# Y/ E) A
H+ d; ~: K- |! {; o& ^ Q; ~: B2 ^& w6 J z! \) S
15.哪个函数能把换行转换成HTML标签<br />?: A! i6 y2 G* A' {1 |2 i$ L
* C i4 J+ R1 R* x1 F答案:____________; Z% P5 P' F4 ^# H z) F
; _& ?' z6 o) G9 U- O6 H% [9 Y
' Q9 z9 V: ]: k, J" S9 h
8 P O# p2 h) d% m" T答案速查+ y! v5 U+ U- I+ v. ]7 j: r* s
1:E
3 f2 [4 Z! \4 i, s( H2:setcookie/setrawcookie
# o! f5 v* W( J( A/ E4 V* m3:B
( h3 I3 L( S5 Y+ m4:BD/ g/ z' e, b5 R( p
5:BD1 x* H3 @) L8 R( q
6:D
; P4 s0 f6 u7 R7:A/ T) A% F' P( A
8:B9 |* K' [ _6 n$ d+ P
9:C% ^) M+ i& H1 O& i
10:B/ N8 }/ ~4 a6 F. T
11:E
1 m2 W6 A8 X( P5 C' l12:A
, [) G1 g/ h# m9 R! ?% o13:BD
+ X/ O; `; `! R2 b14:B
0 U) l6 Y L$ y X15:nl2br
/ P, I! y) \; Q9 j4 `5 y* q9 ?
) m! r2 W+ T0 ], g2 O0 g1 n7 M9 }1 f% P/ ^3 K
0 A6 C/ j: O; A6 v! U; {3 }$ Y6 V答案详解
& w9 c# n$ t' o- x: i8 x3 Y$ U; j" {3 \; g: N
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
: r) h& t5 Q' ]; n. _5 ~) Y5 @# l
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
8 G6 Y1 B/ i. X w
& S( y6 X# k, K" C! {2 ?* n3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
8 ~7 o! g7 Y: G4 S/ I; W1 z( D2 N e+ P+ a
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
$ P- \7 [8 \' D7 H4 }
1 @7 k, j: |0 \3 R# S5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。# m9 _5 [& ]& |& V. e$ `+ {: v
( d5 D, E; B( O6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
6 ]6 a$ s9 e. A6 G2 H
! u" d+ c( Q2 Y7 Q3 v s7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。5 `9 f% C u( ^
8 C* Y5 E4 P3 I! c- h0 i8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
" u0 S% |- J& D2 R5 l+ a; r6 \. P' f- v r- n# a" i
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。2 L: |9 B# ^& }( f3 K
) G0 W5 S. O- r7 O2 n10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
& D- \- \0 _7 b$ d* s( P0 `7 V. e6 Q6 P1 o' h8 T- s7 F7 y
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
, m8 e& G1 C( n
6 [7 C5 ?! |, a! V12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
) F H% B* a/ p" t% @8 F4 G6 E& ]2 |) C2 G; I
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。8 s. Y9 B; e1 W6 m4 ]% U
7 G; S/ k7 q. q V
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。9 u4 K8 j4 M# H0 m2 g
8 M* m/ g& q2 ?% J6 O6 n
15.函数nl2br能实现这个功能。 |
|