|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。3 U) x. S! m5 c- f! o7 ^9 p+ j
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
0 s. a3 v+ `; U& w一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
. G5 V% d# L: s. r" b3 e; g
6 y; x6 p& |) {, U2 i
' r3 e) q) Z! V) l7 ]8 R. d p问题
- X( n& _3 a/ ^
s1 Y3 c- C& S2 y( K" p- K& p1.如何访问会话变量(session)?
. I* D" h L' i, I) I* U# W, v
* a" d2 h- f& OA.通过$_GET
* e& R {0 N% [3 O d! Y" JB.通过$_POST2 X! `$ ~/ o* w: X
C.通过$_REQUEST
& y H0 Z# N" aD.通过全局变量
- G/ p6 r' `( n5 O9 L$ }9 ]E.以上都不对1 O! W4 s% Q, I, W$ ]5 L
. H: a1 J% I2 d* a
2 G v. K0 F) X# J3 B$ d( \1 D; v2.哪个函数能让服务器输出如下header?
1 k$ ~( q5 C& U3 X* y/ B+ s' ]. f" M8 Y) W9 c+ z# h) M3 C
set-Cookie: foo=bar;3 {6 X, @7 _7 \+ K) h% ?. ]
2 e0 N' b+ u8 \- e2 ~答案:_______________
- A* X7 u9 M- r' w6 a
, P, ]0 u0 V {# o1 W+ b) w8 M3 w. t+ E
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?- m- E% J- l: ~: }: @8 U
) d8 j( x9 _. a: w% @. c/ K2 XA.通过HTTP_REMOTE_COOKIE访问/ K$ k. ~ y9 H. z e' Y4 c* ~
B.不可能( O& L! y* O4 E' k8 x
C.在调用setcookie()时设置一个不同的域名5 ~$ A5 _' z1 w9 J J) A* A9 g
D.向浏览器发送额外的请求
8 J1 F/ g7 C5 _1 R! Y/ D& OE.使用Javascript,把cookie包含在URL中发送
6 C0 q ~: p% J B1 i% O9 ]! Z1 `9 h7 x+ b- E3 c
2 M B: h {5 t" u" g
4.index.php脚本如何访问表单元素email的值?(双选)
- b. v1 ]5 L( ?* y4 J8 \9 }+ a) J# {( h
<form action="index.php" method="post">8 ~* ]4 A% w* W9 ~8 O% g
<input type="text" name="email"/>: R) Y5 N' R4 C
</form>) N+ l$ C3 C2 w) w2 A1 T! |
% P k+ c7 r' ^4 E% A: ~A.$_GET[‘email’]9 p4 ]* `/ ?# `) d2 P* w3 }
B.$_POST[‘email’]+ h1 h+ ?4 Q' k
C.$_SESSION[‘text’]. t' ?3 i6 Y+ C3 V6 K3 ~
D.$_REQUEST[‘email’]
& |% O' G, C% BE.$_POST[‘text’]
1 _1 T! j; w& A/ k4 ^
8 T" s( Z! V4 ~6 R
: `4 ]4 L4 i0 d$ u: D5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
" Q. K" J! L3 f8 jB.没有变化5 W1 N* d- j' |, }
C.在浏览器上打印该字符串时,尖括号是可见的! ]! p5 U# ]: g" n1 z
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
/ c8 {7 Z$ I! z2 a4 H. M7 mE.由于调用了htmlentities(),字符串会被销毁# C: |) n u! ~
9 `! n% X2 F: i I% N; z) o
+ u& b* p! A- ~; ?" T
6.如果不给cookie设置过期时间会怎么样?7 i. O; \ ?" A) ~3 L% _9 y, n
5 ] y6 Y. B$ X% g" u% U
A.立刻过期
& r) q& t9 j" q$ X* ZB.永不过期
% X- F8 D8 r0 |C.cookie无法设置
4 R# C) K9 Z. F8 b) s. pD.在浏览器会话结束时过期+ u5 S) H; t% O; _! ]' R
E.只在脚本没有产生服务器端session的情况下过期
$ ~* }: t7 J9 U2 [+ L8 R8 e/ h- h: A3 N5 N4 O4 }) m! u% T, Y* |, {
6 I9 r; i3 ?; {# R6 g* H7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
, u* J D, k: c1 y! `1 GB.Array# @, H7 n( R( k) E
C.一个提示/ x5 F' i% i/ Y, S
D.phpgreat' d, j# d. e- u) s3 w
E.greatphp
! Q! o& v/ m( a% w6 p* t" f8 e' }, ]/ v" Q* ?$ U
7 P* V$ X. O! ~+ j1 ]0 B/ U2 Z
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?- R( n( o+ \8 E2 y
- T3 L0 t, C5 L1 X. }5 H2 I: {A.这两个是明文传输,之后的信息加密传输
/ ?3 i5 F5 m3 z8 w+ g1 J+ KB.加密传输7 l3 j" E7 u* O+ }4 D
C.URL明文传输,查询字串加密传输( |. E; T8 h% e" R
D.URL加密传输,查询字串明文传输. I9 L7 D/ R* T
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
- k' g4 e% u9 T; _( M, \0 A( \' T: K9 p A q
& V) m" K, W! g" z9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?9 E$ ^* i) |9 m3 Q9 L9 [, M: f
* x* k' G* z( U) a/ d% I1 I0 }A.它们组成一个数组,存储在超级全局变量数组中+ N1 O& q0 |( S2 p# c* F- `
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中5 L* o; Z$ o9 E1 a+ j
C.第二个元素将覆盖第一个元素$ @& e1 W: E7 H, i1 ]3 I( x! b
D.第二个元素将自动被重命名
+ V" S+ z$ ?) P/ h9 v5 ~+ {% } I9 {$ pE.PHP输出一个警告
- W2 J& v+ m' D/ X6 S9 V" q( P2 ^' g' A2 F
5 w; ~5 z5 ?' [" E# b% d- ?" E
10.如何把数组存储在cookie里?
6 `$ f8 L+ l& ?) j4 z
) k1 h4 w6 ]9 S/ d" ZA.给cookie名添加一对方括号[]
% ?' ~7 i( Y3 J' U! W0 QB.使用implode函数
* b- j+ E; `; A' s8 j0 g0 SC.不可能,因为有容量限制
2 h! j4 @- J1 l: C2 I3 S; eD.使用serialize函数
' M0 x/ ?4 N+ V) Q9 I. Z X0 HE.给cookie名添加ARRAY关键词" y" x8 f$ l5 H+ t5 ]
- ~) t) W" v9 ~7 C8 z5 V$ e5 b( c9 b# W$ l: E- \
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789100 ^3 L* X0 _+ m+ K( D5 ~
B.1234567890
- o+ }. t+ k1 w4 BC.0123456789, R& j9 P$ C, v" } ]
D.什么都没有
5 N ^+ n* f! n& Y6 w% aE.一个提示
, ]/ S, k' k" A! a8 L9 g" Q5 b
2 l) ^0 |& D5 t* u& q0 y; K7 v- [) H: v d
12.默认情况下,PHP把会话(session)数据存储在______里。
/ k' `% w3 _( ?3 D, K6 {( {5 |# J, y- u( |( |0 |
A.文件系统
% m" {4 [) m4 o# z" E7 ?7 M- WB.数据库9 W& p; d" j) }; ]* o( X$ \) @8 j, T
C.虚拟内容
% W3 Y ]: H0 U& u- B9 n7 u, FD.共享内存) Q& I4 y" z1 ]3 x( a3 R
E.以上都不是
) X8 v/ p" i2 C8 `4 d4 n* v& {
8 B/ K" N& B2 l X* j: J/ x- q. R# n7 m J
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
" t7 _9 Y/ x. j* f- b- D9 y
- H( z$ _& T7 e* _A.浏览器的程序出问题了
* j6 \, D5 g/ H- K) }8 d3 g+ ~B.客户端的时区设置不正确, M+ z* O x0 {+ N
C.用户的杀毒软件阻止了所有安全的cookie9 W* t1 p; M5 @( {! j+ \. W! i& S
D.浏览器被设置为阻止任何cookie
3 i! [; M) x9 oE.cookie里使用了非法的字符
% `0 q {4 f5 t; l3 a+ d+ L, Q* D$ G& o) g# o
3 d$ h& l- H, b3 p& Z x' f B
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?! l [( ]2 Q1 b; t4 W! K$ T* h
. v2 {) e. F6 P) \5 J
A.1440秒后
2 P" R0 N3 W9 D! V6 Z W$ yB.在session.gc_maxlifetime设置的时间过了后
`, [9 g; t0 n% Q4 {, eC.除非手动删除,否则永不过期
: \5 |: X3 F) l3 p9 U+ k/ }D.除非浏览器重启,否则永不过期1 ?/ p1 N) i( L7 f+ `/ l* k
E.以上都不对
0 y# d5 s: z) V% Y* i4 y4 v) z/ t6 l+ o) W7 [ n
4 l5 l% Y) ^8 ~4 M# a$ Z9 j4 |15.哪个函数能把换行转换成HTML标签<br />?
) j! K, I) y1 |/ b7 F4 B/ Z) x* e3 d0 t" J
答案:____________
9 g+ }8 w* R3 {
L' y9 c( S% w o: e' ?4 j" K/ P# G) N. m% I7 _
8 K9 e3 K7 ]% l6 p/ p t9 \
答案速查: K! |, j) C, ]& z" W5 r
1:E1 |) B3 ]3 ?/ N
2:setcookie/setrawcookie
. @+ U; t% k3 {4 g/ x- ?- }$ _3:B/ L, O4 Z: F' z8 w! k( G& f6 K3 E
4:BD/ {$ [; o0 h1 N m8 m% k! o
5:BD
; x5 Q4 i2 E, e5 {! A6:D
7 o- p. z5 z0 S' m* @$ W) k3 D7:A2 F4 n' T+ P6 z% ?
8:B% w7 {8 K0 m9 y9 V8 w
9:C! q! K' _6 G/ j1 P( J( Q# Y
10:B
( H0 O" Z! h. G/ j11:E
) O C5 L" M, \# ]3 b+ V9 C12:A4 z+ g1 {) O3 d N. A9 Q' o
13:BD
4 X& a @% ~, i w) F0 D3 x9 t$ F14:B
: N/ `9 V5 G: r: B15:nl2br- y; b& h- r9 A: u9 t
9 I( m; h# v& _$ p
! B3 u5 b- }7 I. K3 m' j, `4 H; J! a8 s% s' b
答案详解+ m- P- t, g, X! ?' g; C
7 m/ U) U' E" D+ T2 i5 f% t/ ]2 M4 t
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。. ~* P$ V# m# M) {( O9 o% Z1 g
( m; t4 n7 F. p0 h& m K
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
! W" L8 S+ q1 e- c% P4 P( b- r4 J; A0 u! j
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。0 a5 R0 y8 P" }) @/ P
( f5 O# |3 h, S; i
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
k" t; ]+ i( F9 m4 l0 n+ J1 ?/ Q7 T9 l0 U3 S3 T
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
: q! l+ o/ {) c' }# U+ }9 s
4 O6 D" W: ]- \0 N4 `6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
# q+ g2 _7 k7 I% g: G" u* Y1 l" y# ^
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。: N" W- M0 O+ ]& _' {: @
) U, }+ a3 D$ Q: N8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
+ o& z6 s2 _6 _) S
7 v; ^5 r+ a& B) r* N9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
6 i+ d; _: d" u: [1 ?; J; V$ k6 P& d1 w/ ^9 X. v q
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。9 W3 u% h3 Z7 I! F2 _- K
: z+ m3 w3 O) w* Q
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
# ^( ?8 e" u5 x7 e# t2 A: b
" I& ?/ h& s0 Q12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
9 L& j& |; j1 g6 z) ?9 {; O! o" s1 e) A8 V, l! |, i1 t6 r
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。1 x5 t8 |( i0 u' a
2 V- H K/ z, s( ` o. p, D- A
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。6 |* Z6 M* d! ~& ]7 U% R$ u
" G1 G7 X6 O2 _! j8 C: q15.函数nl2br能实现这个功能。 |
|