  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。: K0 Y6 ?0 O* ^* I
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。, M' ]% ], ?6 F {! w( s1 m9 Z6 H( @
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
0 g& f# s3 G* ]4 u
, a8 d- ]+ |& `
: \3 L$ W" s! {0 X问题
, \4 P+ ]* ~, Z3 y" w" [
$ u2 ^" r, W9 ^; P1.如何访问会话变量(session)?
D" y- W* v" U' h: ` c# P9 p
( x3 L( K( @ p0 N' YA.通过$_GET. G* Q1 W; t: U; Z8 y
B.通过$_POST
# Z p2 V; w0 z+ P0 B5 hC.通过$_REQUEST3 g8 a5 T0 m: ^6 v( _ G
D.通过全局变量$ g5 c3 s9 a% D# ?+ R* w
E.以上都不对
2 I: k/ S& P$ X& U$ K% G# ~4 Q; x c( d6 ~6 N7 g/ t+ C+ V
% l; N' c4 c, \. b% s8 X. L2.哪个函数能让服务器输出如下header?
S) y7 C/ N: k3 |0 K
8 M% w1 m6 S; Mset-Cookie: foo=bar;- A- q% {+ Y, C; t) g
9 E; Y) K% S0 B2 F答案:_______________
9 a3 l' z) K9 {6 t( l; ^$ V# ^# n8 F) ]# L( f1 B; w4 ^, D: i
: B- b o: N y0 M! F$ e9 s) h+ d3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?8 Y' d: e. l z4 @, C) d
0 j( J* T7 c0 v! Q1 H' s
A.通过HTTP_REMOTE_COOKIE访问
; Z& G. e( e9 D5 l$ k6 s/ eB.不可能
: t* T6 g9 R: B8 IC.在调用setcookie()时设置一个不同的域名
: _9 p! R& I7 N- F( e2 ZD.向浏览器发送额外的请求
# H% C, I' L9 m, K1 aE.使用Javascript,把cookie包含在URL中发送
& F0 _3 R7 o3 G# ?- w' u5 r# U6 v/ W6 A" p; g" I: T' x9 |, M
7 p$ ~0 w/ H4 v. m- d) c! a4.index.php脚本如何访问表单元素email的值?(双选)
' R2 M9 h( ]: j! R
, A1 r! n+ \4 d+ v# d+ \<form action="index.php" method="post">
+ a W6 V5 ^/ V<input type="text" name="email"/>
* f. Q/ b# j1 `! ]. [' h- @</form>
$ g e% u/ G& ]& X" w0 M- C6 u7 W+ b7 g {" Z
A.$_GET[‘email’]
% L$ ~6 c- U( v- Z: pB.$_POST[‘email’]
1 L/ |0 M1 X) e- zC.$_SESSION[‘text’]
4 |2 R" E8 N3 Y5 H( S3 }0 {+ GD.$_REQUEST[‘email’]2 S6 \6 L; ]5 B0 |/ Z. a |
E.$_POST[‘text’]
- p5 t1 L3 e8 Y, Q1 K9 R3 V; b$ I& D/ `6 o, X3 o7 N [! k5 C6 b
# s. u& `; |0 t2 Q! y5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长& y0 }! N$ `5 x& a8 y* i3 C
B.没有变化% |& @3 c9 F( I$ Y
C.在浏览器上打印该字符串时,尖括号是可见的
2 l) v( r* R6 x0 }& T) ^5 uD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
S) F5 X' |3 F. _4 A+ |! {E.由于调用了htmlentities(),字符串会被销毁6 B. Z1 p. u" Y. P
4 O5 a# w$ j: c7 M) o4 A
, n/ ^( ? h, o0 E9 o% M1 J8 Z
6.如果不给cookie设置过期时间会怎么样?# Y6 i1 F) { m5 Q, i* Z
% H' C0 S8 C6 _A.立刻过期
" A! u- F! P$ G2 ~& `8 X" pB.永不过期" S' ^+ ~. Y, e6 ^
C.cookie无法设置
. Y& o7 D* ]" gD.在浏览器会话结束时过期
' S! ~! D+ u& E, m6 u' z4 IE.只在脚本没有产生服务器端session的情况下过期% J- B0 _) U5 L% z) I7 k- k6 b4 |
4 N7 E# E* R b! t1 W& p& }: W/ |3 V& d% Q
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.什么都没有2 ^: `3 H9 ~+ [ Q. a
B.Array5 K% y' L& T7 f$ O% ^
C.一个提示
0 _0 J0 Y* y' I, P4 ~0 [D.phpgreat6 j! M6 F& z0 x, N
E.greatphp
& E, I: |* p* M+ i- T
7 ~! J( F; i( S1 S& ]- r8 Q
6 h7 b) v8 V1 m& l7 R8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?2 O5 {* F+ q1 E- P {
8 W( `' ]% x, a0 m8 MA.这两个是明文传输,之后的信息加密传输 j0 f5 C9 |' F0 D
B.加密传输
" V8 m4 F4 g# H6 k& R' N6 uC.URL明文传输,查询字串加密传输
: ^0 D1 u2 b2 q+ p' Q3 l- aD.URL加密传输,查询字串明文传输
. ?9 G1 {- h" R" n- sE.为确保加密,查询字串将转换为header,夹在POST信息中传输- |$ \8 k; O- h( O: l- g! ^2 q" ^
I# [& ]+ j0 M5 Y# h
: M+ P) C' h$ u1 w3 f$ _! |
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?4 ^0 y* G( w& p, G) D6 j% L& ]9 c
9 u; r2 `7 s4 R; r
A.它们组成一个数组,存储在超级全局变量数组中
/ @3 V5 M0 H% E8 eB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
2 y" l6 K+ `! b% k4 S- \* NC.第二个元素将覆盖第一个元素
: v9 I% X2 ~/ s* m `D.第二个元素将自动被重命名" X( ~6 R" K7 u4 ]1 ?/ m2 J5 h* ^
E.PHP输出一个警告! e' O! r" |, F
* @* u3 ]7 e9 ]: [
8 j. x5 |$ P) u+ }' j+ ~10.如何把数组存储在cookie里?) v$ Y) O9 r" i& D0 h- u T6 M
5 N0 g* ]8 z/ b' A2 H
A.给cookie名添加一对方括号[]
! |0 \# w7 I3 j& I: O- [* D eB.使用implode函数+ Q+ J% Q! X' t
C.不可能,因为有容量限制2 f" b+ x2 I2 b
D.使用serialize函数
+ V$ A4 e, J9 I+ t% E+ _E.给cookie名添加ARRAY关键词& y9 D/ g8 ]; H
) U" _' a$ _7 r* g2 q+ m
* ^# J! X' ~1 K2 |9 y$ Z11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910( C7 v/ A+ ^3 M, I% a+ s) l
B.1234567890
& t5 {8 F/ R( q4 ]# t6 vC.0123456789
3 @/ f* K! K4 z* P" q6 G- q( ED.什么都没有5 r8 {. o6 |2 w8 J
E.一个提示0 g! Z+ m! d5 v
; C5 u+ G7 h7 ~7 \' a& b3 J6 ?; ?. {' L6 t
12.默认情况下,PHP把会话(session)数据存储在______里。; y- `- M5 D9 T: ^, R5 ~; y
) G- ?' G5 d* O4 l8 W+ E# S
A.文件系统8 j5 E+ c0 S) `' M* I
B.数据库8 h2 ]0 _2 p1 L2 j; [2 a8 P* C
C.虚拟内容6 j& E1 M& J( N+ P. ^
D.共享内存
# V8 }2 t3 u) j2 |E.以上都不是& u1 F- i) ^; d5 [ M% J
- R, P0 a! T) L! x6 p% |
( { X7 I7 Q9 \- n' l
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)- [ T J+ Z! f2 G: s) H
3 I' y3 a' M/ ^! z" [- |A.浏览器的程序出问题了6 B8 V' J; o2 x0 H8 z
B.客户端的时区设置不正确- P+ J, p- [6 k8 o
C.用户的杀毒软件阻止了所有安全的cookie: f% r4 K7 v3 ]3 w
D.浏览器被设置为阻止任何cookie
& D0 s4 P3 }% b* UE.cookie里使用了非法的字符
* D! e" v6 _* B! N3 o1 a1 Z1 l: F' K" g& k6 _
1 A. S m% L3 n, z- T2 f
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?% i* X$ _5 h, S: B% z4 [0 r; H& j. G. M2 @
4 c0 @/ g! V8 R4 W" q% ~) B' } IA.1440秒后2 h6 x+ j% r2 B4 A* o' c
B.在session.gc_maxlifetime设置的时间过了后% p4 d$ O! U7 e! C; R* l
C.除非手动删除,否则永不过期
0 @9 B: w3 Z( }$ DD.除非浏览器重启,否则永不过期* s( H/ b; m+ W9 l: Q
E.以上都不对7 P6 e0 ]& `! ^* B
) M) P; `: a8 R
9 Q, R: }# `/ B15.哪个函数能把换行转换成HTML标签<br />?
# f6 d, o! u+ |9 G1 ]( o/ b1 z) T' `& @) u
答案:____________
; ]# t" X7 i0 j3 P' ]/ y# J/ ?% O/ q2 F! O0 R
7 \! ~6 s2 ~* `$ `
$ ?! u& W( ~% \" B2 Y答案速查
/ s! r( W/ B8 {% ^1:E
8 W- q4 \) `3 C) L8 U2:setcookie/setrawcookie
2 J$ ?# {& l" t {% H" u8 l3:B
3 `; J) t$ w% E3 c2 p. j% c6 k0 r4:BD+ U o4 B8 f( j' ^, u$ Y* Q5 t) j
5:BD+ I4 K0 B# O% r, K) h( Z
6:D1 N' z, W, N+ }
7:A' ^% j9 X6 _, h7 f f
8:B: S' W& u' @0 X& b1 p- ]
9:C2 Z m$ ?( Q% @, o
10:B
) M; i" ~ y: V5 N! n8 k" ]11:E
# x4 O% t; ?; p* X- R+ T6 F12:A
! m: ?! ~+ C3 i. i13:BD' n# i$ ?. c* q
14:B- u) s8 [* F, u7 N
15:nl2br
1 D3 z/ `. g# x( E7 ?. m
/ a9 K8 g6 l' U: B0 o/ o5 y. L* E f0 c/ R
8 Q5 J8 Q, u* o4 c6 _2 i
答案详解: f8 G. h& i) T9 K( C6 Z
% O* U; U* t5 m$ g4 y
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。! m0 o: e# k+ i% u5 G: A( k' D' M
4 ~8 v+ y9 s* P; G
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
( M4 n5 f# Q. `% d; K0 N6 X# k' ~+ }% w) Q' l/ ]8 `) D9 h
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
! s5 w& ~' l3 H: a- {" P8 ]# ?, J/ {' C+ v% T2 S7 u/ l, P; Y
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
* T. j/ P' i0 _) h6 r6 p" }' U* M. \* r% Q
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
3 w3 O" i5 v3 v8 h* ]2 ]' b8 Z6 h i6 W+ ^5 F) z' y
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
+ c _8 r# K) @8 h
/ ~$ Z2 }/ K' N7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。 t" g* Z. r5 U
# U3 ~! E4 { m' d3 i m& d/ h
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。$ o# s' @1 D: p
0 x: t7 w2 W3 b+ s5 u6 |9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
. s5 I) K( R! |, ^; Y
8 H- w5 J$ a1 s3 t2 {+ }3 i7 N10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。4 ]9 v" T( ~3 l
% o0 o. L1 L! [5 v9 W+ t11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
4 R% @5 J# A: g0 d5 @4 u5 C& T+ T2 R g" j
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
- t7 q9 e/ P$ o/ k/ L
- y Y( _1 g/ Y4 u, |) o" W13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
- }' d6 R4 S. t# P( `8 V0 c7 q1 N- }9 @! y$ z
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
3 t0 B2 Q% |8 O4 I4 u' H! k* H" V$ m
0 ?* n$ r) y. ~, A15.函数nl2br能实现这个功能。 |
|