|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14433
- 金币
- 2502
- 威望
- 1647
- 贡献
- 1450
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。; s% j# Y& b/ k8 f3 C$ ?
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
# l F$ g0 S+ M! ]$ K: m0 x一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
! J) P+ g* K( d7 C; T% ]' w$ l$ n3 h2 \$ c" F. `/ L/ _2 l7 K
, n- \+ y# S8 Y
问题$ ~8 I6 T- u+ Z0 ?# [) f4 l* z4 T, z' l
* ]7 I' ?7 C @& |
1.如何访问会话变量(session)?
, Q: x, b7 v- u1 U/ v3 w0 h" v! l
A.通过$_GET
+ ^. p& e6 i# S; A$ bB.通过$_POST
. f8 C1 {; @+ I3 @. q) G( Y [' m' MC.通过$_REQUEST
9 L7 }0 u/ R/ F7 e+ p5 LD.通过全局变量
4 n- u; l4 @! Z6 u% W; ^. P( |% ME.以上都不对
" X3 V1 @1 @' F) p: {0 j4 ^ x" ~! R6 A: Y3 O
- i: V( }. T; Y$ z Q2.哪个函数能让服务器输出如下header?
( Q6 C2 H3 B5 w# U8 |# i# p8 ` n4 D+ B0 c6 a6 h8 v
set-Cookie: foo=bar;% K) d) k6 a- P$ J2 Z z Q- @
- d" b; {/ h( H0 H8 {# z答案:_______________/ E- C; e- ]- F. J3 w5 X
Y# ?( p0 }5 n
% ?; x3 `. }, m2 n, l" |3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?+ d4 M* I- y* Y( x4 l
P" O1 f- u, i B" E
A.通过HTTP_REMOTE_COOKIE访问
4 E+ s# d4 ?! `B.不可能
/ d. v; Z5 Q4 v9 H$ s7 Q5 ]8 l2 ^C.在调用setcookie()时设置一个不同的域名" E, o H' i- _6 r
D.向浏览器发送额外的请求
& T! w4 Y1 h* ?% \8 B. S" pE.使用Javascript,把cookie包含在URL中发送4 K. w4 [0 O, _1 @+ d
2 A; L5 W/ _3 e4 I O* u
+ q3 ^- F9 ^1 o4 a4.index.php脚本如何访问表单元素email的值?(双选)
. F$ Z+ ]# O* S$ n9 y: z+ w! q( j: o2 P' y& a8 S( ^
<form action="index.php" method="post">- l. S2 d# x. ?: H- a
<input type="text" name="email"/>
: M+ v& x1 i* t2 E</form>
% a2 Q/ R- q T0 u
- F& H8 r5 ~" V$ r0 AA.$_GET[‘email’]
) R" B3 |9 v- N$ S1 m7 j% `! n6 hB.$_POST[‘email’]5 u2 E. [& j; Z0 A& E
C.$_SESSION[‘text’]8 D* E2 U- }& X# U8 f: ~, {# ~2 u
D.$_REQUEST[‘email’]
, e( w4 e; c8 {) \* QE.$_POST[‘text’]
. {: [+ `0 l9 i
5 T9 x6 b( d. s' j1 g+ d) g- k% I3 m3 _! ^3 b; d
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
0 s6 r7 N7 [" Q$ } z( G; I8 rB.没有变化
2 d! z/ v8 p# v. w7 u6 z* ?1 B: QC.在浏览器上打印该字符串时,尖括号是可见的6 R4 K5 _) i1 ^8 T% K4 Z; `
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
1 c+ X' U: v6 a) p) w) JE.由于调用了htmlentities(),字符串会被销毁
: O& p" A- c% y, t8 I6 d0 i3 U4 Y4 u% X5 V4 w! E1 B3 q% B
( y ]' Q$ w8 Q6.如果不给cookie设置过期时间会怎么样?9 t$ r% n5 ~$ ~
0 e2 w1 ~5 j' m' i" s
A.立刻过期
0 ~( q" _) }- ~; W# eB.永不过期
' u2 n& E7 H1 f3 g8 U8 F# a6 }C.cookie无法设置" X( C$ l! {' s$ ]' K+ @+ i
D.在浏览器会话结束时过期- @8 a, P' d# l6 e- |4 w
E.只在脚本没有产生服务器端session的情况下过期
+ w6 e" U6 x: c; J. F! K0 D$ H; S. K2 t: M
# c9 m1 {7 i; b5 q5 B
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.什么都没有+ ~4 o3 G$ O' x
B.Array+ S" N+ k- t+ q" ~
C.一个提示
7 s2 D7 Y( |2 h7 rD.phpgreat* n' P; P1 ^. ?1 A6 Z
E.greatphp
3 s# T/ n/ Q: M/ ^* D; M
% Z& |5 q P8 ~7 Z& D, i; }6 R9 D/ f; r
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?4 D: r j+ p# @" I, s
8 r8 x- T/ Y+ w0 |0 ]4 G/ w- gA.这两个是明文传输,之后的信息加密传输, e4 l8 b- D- O5 b" z+ A7 s. n% [ H
B.加密传输$ F# s k4 B, q, k4 U0 p! Z" X
C.URL明文传输,查询字串加密传输
5 o. h8 C g7 A- [. S2 `D.URL加密传输,查询字串明文传输% v: \3 Q0 w- D; A1 r
E.为确保加密,查询字串将转换为header,夹在POST信息中传输" `/ @. H, `1 X4 s( C; Q
) b. X* C I7 @1 H7 r/ Q: u! J) l3 {$ z& [3 B$ g. Z! \
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
2 H7 ?4 j8 _6 l$ e1 d% U7 J* N, i
- u/ H+ g, a$ _* c" mA.它们组成一个数组,存储在超级全局变量数组中
9 F) ]% H( O: V4 @, `B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中. W2 X6 [( m! n& g/ Q( c: P% c
C.第二个元素将覆盖第一个元素( U- K5 W5 k( F: W5 q9 H8 V
D.第二个元素将自动被重命名
/ h8 i1 ]% v* t! vE.PHP输出一个警告
) V) b# j7 D: A$ T1 x
6 @' C9 K) ~% F8 N3 k! Q+ e2 F2 c/ s. Y2 Y/ [ X7 [0 A
10.如何把数组存储在cookie里?
/ t, }' u4 R1 G' k+ K4 h4 q% b1 l( N" P9 k) E( `6 T
A.给cookie名添加一对方括号[]
9 x; q- P& N) [3 jB.使用implode函数
9 l/ L+ Y; x; M5 P y3 y mC.不可能,因为有容量限制% j" W: q) a: a: i" O! x. W5 D5 m
D.使用serialize函数9 g/ i! n2 }( X
E.给cookie名添加ARRAY关键词9 r; P5 o3 W( o
& B& T* U# E) t- I" d$ x# c
* q, l+ j [2 y5 Y N! M11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
! k- d! k4 k( p1 G( vB.1234567890# T- J( L5 V5 u F
C.01234567893 g+ M$ M9 ]- K5 y% g
D.什么都没有
5 O' i* X# q1 x- s8 W+ ~E.一个提示
3 K+ N4 @5 @# {+ V! o8 K+ v6 K
' i! i/ Z1 O0 t2 d
3 s7 {" M, A' d, {2 d. M( J8 B12.默认情况下,PHP把会话(session)数据存储在______里。, k, j- Z# B$ o
]4 j& `) j9 U0 C3 y
A.文件系统$ ?( h4 P8 Z; P, [/ z/ J
B.数据库
4 S8 R a1 k. o5 [% _C.虚拟内容
7 Y. N' g9 j3 \3 [' h, cD.共享内存
- O/ J" }' d' y" M9 i. VE.以上都不是
& c1 I# A& P3 @8 J% d( S
4 j# ?3 r4 R* i2 I5 e6 f1 d3 k+ z" E/ G% N
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
6 _# u; B' [/ m# G2 G+ T. M( Z3 H1 n7 H" d& O8 v3 Z. R- G
A.浏览器的程序出问题了
# G: S) ?8 z4 e% ^ a+ ]B.客户端的时区设置不正确
2 I* S( v) a: @C.用户的杀毒软件阻止了所有安全的cookie, _, \2 e/ n1 R+ p
D.浏览器被设置为阻止任何cookie
, p/ q$ N* D& ^9 t( c- h8 fE.cookie里使用了非法的字符
# m4 T5 e7 w4 o' {5 f7 H
" d7 G, p# |. D" l- a, n
" V, R5 V% t$ ?4 Y14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?6 Z! ^) s! H7 |/ G! O; H0 i7 j
/ j( j3 x( ^' t0 [% K7 SA.1440秒后. ^4 O3 k# e# N& z% g
B.在session.gc_maxlifetime设置的时间过了后
7 ^7 W1 t2 m7 M1 C7 R6 yC.除非手动删除,否则永不过期
' i$ p; a! Z1 s6 v4 jD.除非浏览器重启,否则永不过期1 p( ~& c) @, d; T* L; C- g# t. n% N
E.以上都不对
* ]% E+ T. L/ D# v% T0 R |7 j
( v) t7 i6 R/ Y
4 x. w) h9 L* Y3 W. O2 |# M; X15.哪个函数能把换行转换成HTML标签<br />?
9 a; S2 n+ s d2 N$ M$ w4 ?$ K5 \1 C& X# `+ b2 ~
答案:____________
' ~$ a0 w8 E6 q) ^# B! c, v, s" y4 `% x
( w8 L3 \! g3 ~5 M
4 B0 C( }' S# h8 ?) ~" m) Z2 [答案速查
8 c7 y/ @: r" E) ~( v1:E
' l7 N/ H& @' o5 `+ I0 Z2:setcookie/setrawcookie
6 z6 \& S e, V, r1 C3:B
$ u/ \" x3 Y4 X4:BD2 ^; o5 @9 b, h& Y( n
5:BD
" W, V/ K( @" p; o) A6:D5 c2 I* K; e' ^, z6 [7 l7 N2 J
7:A2 n, R; h# Z3 Q$ O0 o) D. N3 ^) p0 P
8:B) G L y8 S- l. p: _% W
9:C
; ~6 c x4 g' h* j5 w* k10:B
0 Y! k8 k6 n# f8 t' X11:E# {/ H h% T4 s; V$ S
12:A
' X$ n$ d, ]: `13:BD
6 _- Q6 Y& d8 J/ B# h" L+ h+ u7 o14:B: f$ j" r2 W) a k* z, a/ }( k
15:nl2br' @4 V5 ]! r, r. E
# |+ s6 r( V2 C) r# R
/ f% Y& I: k+ J9 |! x9 C( |" [5 t8 c( H2 F9 k* H ~
答案详解* M7 Y) c/ r( R1 V+ K) y
) e; ~7 n0 o) h: \! s' u! |
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。2 P0 r( s; D) _2 t6 `% g; e8 A
' w. C, L; _6 R# v9 ^" j" t2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
3 S5 l: y1 k1 z9 X' M+ P) J/ X0 l' @% N% f( d
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
7 ^( Q& d! V2 \5 m
5 S4 a6 U. C J9 i4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
2 R/ Q, z: |0 g, K, d0 ]# N
+ G" ~0 d3 c2 X" A5 p5 O3 e5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
! Q6 K* I1 J. N$ x. X- m, D3 C
# F5 ~4 K& t! i; |- R* s" B: M. @2 U6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
9 l/ [. n( p9 O3 M& r0 u i6 z- T; h1 |1 J+ W3 f6 f0 b
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。7 e) x0 f' f( j) r7 K7 C( W
# h0 J' e9 ~' F) k
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
2 M q& e# x/ y) S
4 u8 k7 C9 V' p) A" s9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
. r% N' ~" l2 B
/ u3 A) V5 C. s2 G, C4 ?( o10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。4 }: [, ?% q% }0 J. Z' n
% T+ C! K. ~: H) X% }2 d$ F
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。! ~0 S% V( V+ N0 q4 w7 t
5 f/ ^9 c6 N1 F; f
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。; D9 O' @$ @; r- v# _( \
% u. B; S: J$ P. T% k- o
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。8 F$ G3 S# T) P: y3 P) Y
$ t7 }2 c' i5 F& r, y( y. T; L14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
% ]; H) y9 r9 K: [) H+ X# [& F+ `+ t6 q
15.函数nl2br能实现这个功能。 |
|