|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
5 F/ D' E1 T, F! x @与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。+ o% Z( R0 \" O1 c% J1 j0 U3 c
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
6 _9 \) E C! R
! y5 ` n0 l9 u; m/ R- M/ |' w R$ V, a
问题+ r: O# t4 G9 ^2 r4 B! c
# P* H# [' W7 h. ?
1.如何访问会话变量(session)?$ P% I o$ H0 o
( X d8 V; z! u+ s7 `' H# T
A.通过$_GET& ~$ W( r' p+ q7 Q, K
B.通过$_POST
8 w4 Q' B8 H6 V# I2 K* N5 rC.通过$_REQUEST
s- m: B& F7 h2 b; `7 h& oD.通过全局变量
/ M! Z: b0 C5 H# g7 b7 YE.以上都不对6 u9 h9 O2 [3 K% a0 H/ M
5 c! H6 g+ [9 C8 p! `! Z+ B) {9 Q! }& _9 U0 e2 k. x" A2 U8 Y
2.哪个函数能让服务器输出如下header?
" R" T* B1 P- U: {0 p) ~# Z: ~1 E) {5 i3 q* k: j' E c' C3 U
set-Cookie: foo=bar;
, _/ D3 V- O* P- e6 v! S$ ?5 t. L
0 `7 K$ X, J) h答案:_______________) Y& K0 o, l& B
h# |% E4 P- L/ C* `. r$ n
6 z. Y/ T3 M1 Y9 ]9 c" S$ X* h
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
0 n; g, \7 h6 l. @9 p# y5 H6 v9 q# Z
/ z1 @+ P. K7 jA.通过HTTP_REMOTE_COOKIE访问" L. l" F8 g" v4 E% r
B.不可能" O5 ?2 X8 s/ K- ~2 {
C.在调用setcookie()时设置一个不同的域名
, E+ L: T. Y& F7 J0 m ~1 ]7 b9 GD.向浏览器发送额外的请求' z" R9 O4 Z* u* z
E.使用Javascript,把cookie包含在URL中发送8 _5 T+ Y/ M, Y$ j1 H8 t3 z9 v
2 P6 m# l. g. I% R. z
7 }! V U* {0 E! B3 r l; Y d4.index.php脚本如何访问表单元素email的值?(双选)
: j r' |% z) ^7 o4 F
; J5 l5 a( h1 v/ v<form action="index.php" method="post">* ~& |9 w8 |, ]6 b& E
<input type="text" name="email"/>2 m5 }. q, s! j8 h9 U) t+ L1 P
</form>
/ F# w5 J- F5 V8 t( v% W9 q' W# Z3 U7 F2 F( ]1 P
A.$_GET[‘email’]2 ?$ }+ O, E9 J1 n5 \" Y" V8 H' k
B.$_POST[‘email’]9 l2 s8 d( F5 x, b; p8 o# j! w
C.$_SESSION[‘text’]3 K2 q: F, r' f! E
D.$_REQUEST[‘email’] z3 Q8 i8 ~( {
E.$_POST[‘text’]
5 V+ ?/ f% t& I" E; l4 E+ ^8 v+ t v. l. b* J
* ^+ Y2 @4 l5 Z% r p
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长 e, _* j) v8 o
B.没有变化
4 Z- |. H. M* n4 {& M3 ] }C.在浏览器上打印该字符串时,尖括号是可见的* P/ l4 w! e5 D: o
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
. v, D5 N k4 v/ m) M4 |E.由于调用了htmlentities(),字符串会被销毁8 {7 E: ~& x7 a: T6 M# X/ w; p% v8 q
3 `2 z0 W& L% D& N* h) G/ x+ {, a
- ~3 Y& K& F8 q9 A; `0 |+ N6.如果不给cookie设置过期时间会怎么样?; P3 n4 R2 z+ L+ A" E* K7 @) l
, c* `" d" b+ G, T4 a+ O
A.立刻过期
3 {1 x- ]+ s. H3 b0 K: gB.永不过期
3 f, v1 t% g' o" I8 j6 E5 ^C.cookie无法设置
" Q4 N4 } N9 N) D/ WD.在浏览器会话结束时过期
7 n* c* H* e: U n* y; k, qE.只在脚本没有产生服务器端session的情况下过期' ]6 j! d2 I0 _; V' w
/ O- [" v: L1 i P% U/ M& c$ `$ N8 x
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.什么都没有
: K _8 T* L' a6 e: w' D% g9 E. WB.Array
# {, [2 w1 i- V6 a a4 E( J4 o) w' V* l# XC.一个提示
. l1 U) u; e5 }" p7 S. ZD.phpgreat1 [ |1 c6 C# |/ W( y
E.greatphp
N; }/ Q5 ], W1 P8 `5 n6 X. c9 M! ?* E1 L1 Q. ^+ J- D
7 x% B0 e, U7 ~: n
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
* g/ l7 E: I4 Y# x/ E
7 y) ?, e- A' w" l, o: g8 FA.这两个是明文传输,之后的信息加密传输
3 @4 Y$ t0 B8 k W: sB.加密传输
% s. m4 }3 M4 F' C$ J0 n, D' oC.URL明文传输,查询字串加密传输
Y+ J" Z$ Z" e L; T' b6 [% hD.URL加密传输,查询字串明文传输
$ c6 P4 |9 z' W T" FE.为确保加密,查询字串将转换为header,夹在POST信息中传输
J$ R, S: h( i% p& c$ _9 E$ i. z, `* a$ n7 ]! B
, {! x! R4 }8 j% l; ]. F
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
0 x& j, q5 r6 m( u- j# V9 k6 O5 n0 i9 f
A.它们组成一个数组,存储在超级全局变量数组中
! L' d" _! s9 NB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中8 ? j& c/ W6 c- s% H) K
C.第二个元素将覆盖第一个元素! F3 B, b ~: T/ O
D.第二个元素将自动被重命名
- C1 [8 q# o: q; @E.PHP输出一个警告
! n7 n$ N) u+ _6 Y8 L
9 \+ M% Q }; A" Z/ s: e
% O: C1 l$ p# U' X& l! t10.如何把数组存储在cookie里?/ } D* @( p/ Y
* x& |% u' ]+ M& b2 u3 h m, ^
A.给cookie名添加一对方括号[], m/ |2 x: Y/ s
B.使用implode函数+ w% x- v) v0 U! N8 u z. T# [. j
C.不可能,因为有容量限制
+ G$ i, p! ^2 h+ V, [D.使用serialize函数6 {+ `, g, }2 `- w# A- a; j
E.给cookie名添加ARRAY关键词 F& O- g6 V1 d
* U N& H7 d/ ~- H
) s+ n7 `; e3 d& y6 m* U11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
) g- A; {8 E$ B3 y |B.1234567890( j( g! v8 R |8 q- r2 d+ @
C.0123456789
5 s4 D( _/ n; k+ KD.什么都没有
" ]7 j; |1 X' q. JE.一个提示
- ~* w" }$ |3 }. V1 l5 V# r( t8 b. @
. U( `" h3 k( C1 M. ~( c9 Q
12.默认情况下,PHP把会话(session)数据存储在______里。
`/ @/ F g; O& y2 {
' e' J3 Z" F+ ]A.文件系统
" m& o; R* l* Y- xB.数据库4 ?' r# S9 F! P( p; b( G/ V9 C
C.虚拟内容" `5 ]; d% Y7 Q
D.共享内存6 d" m3 y3 q; O! a2 K( b: w
E.以上都不是% |+ |7 S X+ }9 K& v0 ]+ P
* G' Q R" ]3 Z6 t8 V
9 V" s: w0 Q+ y7 b) r9 z9 C8 r13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)7 F. F) _1 j! C3 w$ O( {0 p
/ }# v& \# K4 N& k
A.浏览器的程序出问题了
. R2 q0 F& d# k3 t7 ZB.客户端的时区设置不正确7 K$ g3 v3 u/ P& f
C.用户的杀毒软件阻止了所有安全的cookie
+ `1 |( n; d1 }' j; }D.浏览器被设置为阻止任何cookie
1 A: b/ @. ?0 O: ]" P" B% a; U4 uE.cookie里使用了非法的字符
6 P/ [ y7 @( y! K: {4 U2 _- W& Z) Z; r6 D1 b! U
7 t, N4 r) I( C G
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
5 m4 ]' F/ g2 [ f5 _5 S5 B0 c; d+ y" O+ ~
A.1440秒后
' j; ~ s/ r+ rB.在session.gc_maxlifetime设置的时间过了后
6 Y% g- j& n. B0 O3 cC.除非手动删除,否则永不过期- Z: ]( M W6 |: Y. V
D.除非浏览器重启,否则永不过期7 X8 ^; b( a- B* z" B. l
E.以上都不对
0 L) e) C" @5 v
) w- Q& V3 O O3 z
2 a7 d- v1 B1 Y$ S' F15.哪个函数能把换行转换成HTML标签<br />?& z% H( @3 U- R
2 P2 G, I0 C7 i; q
答案:____________
0 V" ?0 @' F7 w" \; N& X$ O& V8 l, T) b5 u, N/ t
$ [3 z% k* O' r2 i6 u
5 M# S/ @8 O# x- }* K答案速查+ ?* u' w% W+ V! K
1:E
0 ^7 N2 M# A9 Z) o, U' J2:setcookie/setrawcookie* m& J6 [9 \( L6 Z( [, ]
3:B, x# g& q1 n: b' ^! L$ x$ @
4:BD
9 ^5 t+ L3 Z7 H/ G7 V$ D5:BD* D: H1 O) S' v7 C7 K
6:D, ?. j; T1 c$ O$ ~
7:A
6 D& J5 v7 l! H' w& w( \5 j# D ]8:B
+ Y7 }7 n/ i% r6 X9:C
% [" P4 f9 u7 [% j( s7 k, W4 ~10:B/ x! `' t, t, {8 h: c8 E1 D& H
11:E' U7 s; ` T8 `
12:A2 c0 d; z/ S# n% J; J4 f* i# g8 |
13:BD Y2 @* t" B6 [: u* [4 T
14:B
8 b% h) b4 H2 J15:nl2br
: S7 ]% g6 c: x9 ? z8 J
5 W4 _% X7 X* Q/ }. ^1 R: a
+ ]8 `9 q/ o4 v B; r* H5 G- I0 r7 _% O: E- ?0 r. K% k0 [
答案详解
. D. ~) z+ @1 c; b- [% |* Q
5 s3 ~8 q2 u9 P' q1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。( Y+ f/ E8 z# a6 Q" |! _" b
7 s+ i8 ]4 y: M7 k2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
7 O: Z4 N: z N
% }; G+ `* O) d# ^0 b1 ~3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
0 ]' F9 h% R6 S* j1 R" z$ b! q/ j3 k, K9 y: J/ E" x8 V' l3 i
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
! K* v' m8 M7 d$ W6 _4 j' M5 |6 ^3 n6 Q5 R& j5 Q2 p3 Q; v! m
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
" l- Q3 @+ X2 j( t0 j6 g, S
: u: p- O7 h+ Z& o# L# ^6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。# X. K8 K2 i7 Q. y# j
# Y4 B1 R. T+ s$ P* P
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
$ U5 w3 ?2 T2 Q& | ?% Z0 k
7 U* M v# n, K1 Y0 T& c8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。+ t2 q! F. G2 _3 J. }' w- Q/ j
8 m! x# a/ \ h- K/ ^2 N, F/ Z
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
9 b' Y$ R' \ g; U, c$ Q: b# _
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。 l* A% B1 S1 Q3 c& M/ A3 K* D
/ R8 B2 Y& r; e& l: e11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。9 f0 X7 [) E, F, K) Z0 D; P, p" u
1 A. ]/ `2 l; {* \12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。/ `2 K A9 ~5 Y
8 P5 F& H8 r. b13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
! A# w+ c+ J" b3 w3 u, J* n8 Z( U6 U( I, S5 M( O% a
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。0 d) C: {1 e1 a: \% @) C* X' x
! P- h8 C' x0 `% X5 }
15.函数nl2br能实现这个功能。 |
|