|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14391
- 金币
- 2481
- 威望
- 1647
- 贡献
- 1429
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。' c. z, d; e: t2 _( D" \; s
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。& }, E8 A1 b' E2 Z |1 y. u5 `
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
1 J* S+ U, A( C6 R8 N1 p; h
. g' U5 z! z- ^) e& d4 B% B' c5 h5 T$ [/ @, T
问题
9 J2 F, j9 F: H5 b4 A& c% x1 A- ?5 G; N5 `3 k
1.如何访问会话变量(session)?: |: W1 o$ j ^! A0 i
# g z; m7 q* Q
A.通过$_GET
5 }5 H0 r$ ^2 I8 zB.通过$_POST
2 e! e: E2 j; r' YC.通过$_REQUEST
# C( T: I7 a( C( U9 V) aD.通过全局变量
8 }- I+ Q+ ?1 }4 }9 z5 T2 j& EE.以上都不对
+ w" W' J, }' z; m$ p# L3 g2 z- i; ~- z7 B- H' j
4 e' w' p+ @/ W2.哪个函数能让服务器输出如下header?6 t f4 e% ^6 |0 N6 `9 R
- [# |6 p$ a& Z. X8 o+ V
set-Cookie: foo=bar;5 N! m9 e, _9 I) _/ E5 [" j% @. ?
5 u9 y! l# L" t& x6 a) i, |8 m
答案:_______________2 a- g% J5 Z+ U( y \. t4 Y
2 ^$ u; s" B8 r2 w6 X2 X; c: d6 L+ ]8 z
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?3 N- O7 b4 t; m7 _0 G0 j0 B- Q( {
; j6 z: i( s( L! F+ b- X$ V* a
A.通过HTTP_REMOTE_COOKIE访问& U, t( I$ ?! T) I8 }
B.不可能4 ?# D0 o6 n- `" s
C.在调用setcookie()时设置一个不同的域名
1 t% V9 S- O6 e5 Q$ lD.向浏览器发送额外的请求
& b* p0 m+ _; H8 g' CE.使用Javascript,把cookie包含在URL中发送# A q* y: Q6 E- j( \/ j( A9 C! F
, Y5 U4 Z2 Q3 D3 v6 X9 }
) m) M7 v N" X; O Y
4.index.php脚本如何访问表单元素email的值?(双选)( O: }2 l/ M6 j
- |: T- l, z. n# ~7 R
<form action="index.php" method="post">
/ K1 x4 H& Z* v5 K<input type="text" name="email"/>
( |2 k( [2 |9 R* k</form>
1 ?0 Y V: @: ]4 _
, i5 p& l( o4 e- ~6 I }) C9 U2 KA.$_GET[‘email’]
4 D- C% Y; b3 |' sB.$_POST[‘email’]2 g0 U6 U! Y9 \# z5 C
C.$_SESSION[‘text’]) i5 j2 U) @5 A3 \2 \9 y7 g
D.$_REQUEST[‘email’]
3 y; g3 X3 N9 l/ p) ~8 A( C8 YE.$_POST[‘text’]3 {% H8 q3 t% o9 q, N1 p
) L: \2 V3 S M4 T4 k
( f1 ^9 m( F! y
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长$ G+ G0 R) V/ O& g6 e
B.没有变化# g# z# x! p: r3 I0 U2 C2 p$ z7 R
C.在浏览器上打印该字符串时,尖括号是可见的3 X' x+ y- @6 F3 _
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见4 }' I5 w* o% r- R
E.由于调用了htmlentities(),字符串会被销毁
7 n6 t* k1 U9 N( g. h8 W; _0 F
7 O$ A7 G2 g; p* ^* `2 b1 g9 q8 A) |
6.如果不给cookie设置过期时间会怎么样?+ e0 O6 ?3 E. ]; E+ b5 {& N
2 P e9 n1 c, g; J g" J
A.立刻过期
+ O5 P g' M8 q, v) s5 EB.永不过期
7 P1 ^3 U7 o9 H" [C.cookie无法设置1 W4 Y4 D( m7 u0 L
D.在浏览器会话结束时过期9 ~1 g3 Q+ J0 {3 X0 Y! A
E.只在脚本没有产生服务器端session的情况下过期
. M- h8 v J1 p% C1 i+ @0 ~5 R' l, U4 Q+ |9 u; R
- ]; T+ j: f! ^/ ]& N* j
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.什么都没有1 F: E# l9 Z S7 d5 |- q; @* \0 _0 _: I
B.Array. K5 U8 m8 S. A$ G& u
C.一个提示' \& P2 k5 p6 l" R; T4 f
D.phpgreat/ M8 i0 P* @$ W2 d; @# ]5 C" O4 `4 ~
E.greatphp
( m6 z, }$ P: N7 Q! {" f* j- X0 m% h3 ^0 a- }
) J* r( Q$ J8 V, y# S4 R
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
- N- w% K: @$ x/ v& B& P4 h* x! e' `
A.这两个是明文传输,之后的信息加密传输% `2 M- g- l' r K7 N
B.加密传输
! c: d! j, J* i: Z4 D; ?% v1 DC.URL明文传输,查询字串加密传输
# u, o$ }7 q" }- O: ~+ sD.URL加密传输,查询字串明文传输
2 I: v- x+ `) R# M$ CE.为确保加密,查询字串将转换为header,夹在POST信息中传输
7 P0 R j! a1 J' Q
) z, r/ p9 S3 r' i. y0 n6 k
5 h4 \) k Q7 ?0 T6 v* E" Y9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?, S; V/ } }* B2 I# E4 q
& |1 H( [/ ]% @A.它们组成一个数组,存储在超级全局变量数组中
: X; s% _0 R' ~- U7 }& J4 A) ^" ]B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中* D% z$ U. ?2 B
C.第二个元素将覆盖第一个元素
$ z" |" U! C, l# L! }" \7 kD.第二个元素将自动被重命名2 x2 S8 q' G: Q* ]) B
E.PHP输出一个警告
3 W+ I4 J. O2 R: |$ ~9 s- ]! d0 u* c" p$ a
. ^) g* i( s. b' Z10.如何把数组存储在cookie里?$ R+ Q {+ j6 Z% c6 y1 [. z2 R; n2 b$ g
5 C9 r1 ?- I5 h3 a. W
A.给cookie名添加一对方括号[]' b) A0 j3 T, [) s7 o( n
B.使用implode函数" @! U6 A8 k. I9 n* K
C.不可能,因为有容量限制: J3 z" W: P1 x; U
D.使用serialize函数
$ V9 G; Z0 e* ~/ W4 _# M- UE.给cookie名添加ARRAY关键词
( [6 q2 j# V! R3 z! b: v. j/ v, r
5 q" s/ _1 _* e( Z( m b, K$ D& Y( K' o3 M# o
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789100 l! M' |- [( F& M, q, G9 D$ X
B.1234567890
/ K0 Z3 L# u/ L' X6 k" \C.01234567890 l. H, ~% A7 U! ~( X
D.什么都没有$ a9 C5 @& b1 ~) Q/ C, O4 W
E.一个提示( ] H0 X" x. u5 X9 q9 ^
0 l" e j5 k3 z/ U* M8 J
# a$ ?' n; W i8 P; h0 O
12.默认情况下,PHP把会话(session)数据存储在______里。
B/ |3 d$ s+ y& i' a) Q
. s2 o% L/ S% HA.文件系统" A7 A' R' `3 N
B.数据库
5 x$ k! K# s# NC.虚拟内容
8 _, s( {0 v2 N, X) v2 v5 S) uD.共享内存
2 H8 \/ W# r+ I3 mE.以上都不是/ U5 t# `$ n7 o$ ~: J4 W8 \
" N. n: [9 q5 F+ r( L
# g: S$ j6 S) o13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
4 }; q) M& j/ q+ G4 Y8 k$ J* ?* j6 O, z& o& j
A.浏览器的程序出问题了5 a3 y( g( H3 r' ]8 n* [) r
B.客户端的时区设置不正确
3 \; {( f4 O6 L! u h L6 B4 gC.用户的杀毒软件阻止了所有安全的cookie
7 A/ ?- W0 T! f- K# E( ~D.浏览器被设置为阻止任何cookie8 w1 h5 s* U1 V- ]
E.cookie里使用了非法的字符
: }5 E ]; B3 f' l6 i/ f2 G2 B
z9 `+ C) I% C N+ B9 k
. ?+ h0 R5 b$ N: o) a# y14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
% j! K9 R" q( z4 A: Q( f% ~% `
7 y' N/ M( |0 wA.1440秒后2 c8 N. Q8 b5 @0 n* o% d, l9 n
B.在session.gc_maxlifetime设置的时间过了后! [: R4 P' ]# d1 l" n, v$ q x/ d
C.除非手动删除,否则永不过期) q# P1 k7 M3 E' ^0 p5 r7 M
D.除非浏览器重启,否则永不过期8 `, ?$ s( e) }* R& c- b0 p0 B5 {
E.以上都不对
. H3 X, D: A. M( y) y* V4 j5 z4 x$ G) ^8 J. C2 V9 l. c" z% N
' I; h2 z' U9 k* w# c
15.哪个函数能把换行转换成HTML标签<br />?
8 c [4 t( i; }$ c$ _4 j' P9 Q. V) V7 ~0 \5 w/ D/ z* W3 O4 L1 r
答案:____________0 R# i. k$ e3 C9 P4 E0 J
& f) w8 S! y4 S' g. x0 A$ @- C
; j V& p" a& |, A
1 y8 J, V2 |$ u0 t" V( g* S7 [9 V答案速查
J+ O6 X' u3 z1:E
* n- l- z8 H, {, }1 v2:setcookie/setrawcookie! n/ _) T1 ?9 e2 k6 U: g! P" V5 \
3:B, w$ R& X( K' C: [, Y4 {' s
4:BD
$ N/ T0 g2 ? n) L2 A+ ?" `5 d5:BD) D0 _. F, f- ]0 ?# U0 F. q, x
6:D
; M% C' {! p) G a7:A
. i/ S+ }7 h: Z8 V9 a8:B
! d5 t& B0 g, d( \9:C. x& R4 W# O5 Z$ M4 x) }. C" N
10:B ^1 Y f* \9 y. R
11:E
1 H. }3 \, i" Z( r2 r12:A
% {( `8 M, {: B13:BD
/ j9 x5 Y! w& a. o; H14:B
5 R$ M1 o- s% G' n' u: I- f15:nl2br- k5 A2 z$ P3 M2 T
E+ V8 N6 q7 H- `+ F
* K" x' D: l6 L5 e6 Z W g8 E- S( x5 N7 V+ h
答案详解
2 G. |( O4 B& U1 d/ ?+ V( x
. H* m9 p6 Z+ ~- t1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。1 Y* ~5 \& S/ V' d( ~+ _
% J1 L# y# K: i/ l5 [ w8 V2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
8 e4 @6 w9 {. i; \1 |" H7 [( e$ S5 @( K7 M {* f
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
/ d; n) Q- J, u8 S5 K0 ]6 T
0 f$ c9 l. V1 j% ?4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
; n o9 a9 l3 g
. S' B0 s5 d6 U C; v5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。) l, w$ E4 ?0 C3 P$ k" x9 z9 \+ \
9 [4 `, X3 e3 w d% ~2 T7 K) X
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。0 c# x6 _! K0 W k! i
6 I; C' v) p& x0 F
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。8 h2 e6 H0 X* M# [9 |$ y. V
; S2 ]2 p6 t1 F0 R' @. S) w
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
0 I3 Y B, b! f6 N+ W0 h2 Q
# b8 ]2 C5 o2 w6 i8 ]4 I9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
/ z- d6 u- l1 i8 ]
3 b7 `6 H2 Y0 k, \/ d/ h10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
& X) |# z4 G( V6 Z4 g# N) U9 x2 }& _4 [; o
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。# u6 {* G* q2 w: q2 ~3 y! z" G
+ E+ e( Z! g7 P5 a6 o
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
v8 e% }5 j& E/ a
E/ P! |+ o$ f$ I. }13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。& D- [3 [- B5 ^+ a0 a
6 M3 O2 j4 W' D0 d; ]14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。$ y5 y% c8 o* n9 P( q! h, T {
D( X! n7 w4 S' I D" Y( j. j: v
15.函数nl2br能实现这个功能。 |
|