|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14389
- 金币
- 2480
- 威望
- 1647
- 贡献
- 1428
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
1 C6 X3 S1 p }3 q& F7 a与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。! e$ E3 c7 I+ d
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。# [4 w+ d$ s' L3 i: B( d8 f+ \
) t# R1 w5 g" U& x
" _4 |0 R7 A1 `
问题
9 J8 {. ?, ~, A8 [0 F* `- t# J+ K S5 f/ x; ^ i# b2 P; m' ?
1.如何访问会话变量(session)?
) L1 k- _+ n$ V* S4 t
/ j. K( p- _+ [4 H6 @- v; }+ P4 Q1 @A.通过$_GET: J- N0 S- h7 e6 @ W
B.通过$_POST, o8 ~, t6 b8 w' G* D! b
C.通过$_REQUEST
' J5 n, u- j4 F. cD.通过全局变量
; c) h( M/ d1 B; l, JE.以上都不对
6 V( v+ a- S1 d, ^% W: _
4 U0 j( R5 P- N4 u
( Z$ [+ k' G+ R3 J2.哪个函数能让服务器输出如下header?
* R o6 L& Y7 V5 q0 G
$ S8 E0 `9 Q* X# L8 k7 Sset-Cookie: foo=bar;* I8 C; q! e; @
. O8 r( Y: K; r2 i' \答案:_______________6 \2 p0 k- E, O( S. a# Q- w, P
* \" a. q3 w M9 I5 _
; d# Z1 ]8 e" X. F$ K' P
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
0 T8 i# S3 e6 r$ P8 l7 K4 n& D* b1 A
A.通过HTTP_REMOTE_COOKIE访问! o6 H3 Y; w1 X+ i- \' ^
B.不可能+ z: E: `' {: A$ f* j! E
C.在调用setcookie()时设置一个不同的域名4 F7 F* M* X# M( i: q* z% A
D.向浏览器发送额外的请求
. z: o+ D' C0 A' O& Q/ vE.使用Javascript,把cookie包含在URL中发送8 _9 o) g3 |1 b" Z$ }* }
* c( D4 B% G9 G# F# k
. s9 j0 z# i0 a9 t. {3 D4.index.php脚本如何访问表单元素email的值?(双选)
& L; s) \5 D/ q6 w* \
/ G2 }& C ` U" t& W<form action="index.php" method="post">
( `. o# |- [$ M1 U7 l- P<input type="text" name="email"/>* n: r8 F2 L# n4 l' [" c( v& d. n" ]. _
</form>: E7 g' {: A. H- Q2 w2 b
4 b* R/ v* a& B) MA.$_GET[‘email’]
% t8 B+ R- x5 D+ l& o; L8 _- z# NB.$_POST[‘email’]0 l& c* \1 x$ A) h- x
C.$_SESSION[‘text’]# F, \$ V9 {: x& D; d
D.$_REQUEST[‘email’]: I( [* r/ s% r* D
E.$_POST[‘text’]
?9 L1 d$ f+ @. P/ c( N' f) Z2 ?" e
$ \3 c2 m |% `' k% s& s5 V* ]% H
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
1 P5 N0 B: ~( @3 m, D, C, zB.没有变化% ~5 h' C9 M' {: _
C.在浏览器上打印该字符串时,尖括号是可见的" k9 H' \, q4 G$ k9 D* G" D2 k
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
* v$ d) F ?* J, AE.由于调用了htmlentities(),字符串会被销毁
; b- M) K. ]- R+ R
! I( v/ y$ G4 E3 A2 \
& x6 Q4 i1 J- j6 g: `5 G6.如果不给cookie设置过期时间会怎么样?
9 W8 ]! L& H1 P
1 y4 r$ s+ T, vA.立刻过期
, H% {; x @: P/ D4 ~4 tB.永不过期( s% ^/ s! Q) l: [$ D9 p o* D
C.cookie无法设置: q3 f1 _ w/ K8 Z# a7 L+ J5 u, V
D.在浏览器会话结束时过期. x, m" a- s6 J) Q. v, r" Y
E.只在脚本没有产生服务器端session的情况下过期
2 w# J* ?3 U# z8 V) ?0 o) C# x( n: t; e3 j [, m
) {. A3 V4 w0 X0 C
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.什么都没有
% `! w. E: @% m$ HB.Array$ U1 m0 Q( F: n, i2 z
C.一个提示
: `% L: a# {+ {/ [- aD.phpgreat
0 w5 a V V( TE.greatphp% r( }) G3 |0 ~1 [2 d* R
% q% ~; E( i- S* D4 P. ~: t
! q) F$ @& l& j& |' c, R! k( r
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的? j' w8 w) r3 R- b7 i! n% G0 d
8 L4 l6 o2 C$ _( oA.这两个是明文传输,之后的信息加密传输4 D% m t' O! _# A( W+ P' _
B.加密传输
/ ]) C9 }% Z2 yC.URL明文传输,查询字串加密传输
, p& H2 H/ Q* p* N; t7 mD.URL加密传输,查询字串明文传输9 `$ y; n, O/ V! O v& j H+ U9 ~
E.为确保加密,查询字串将转换为header,夹在POST信息中传输4 `, }- p( |: S# l' R. Y p
' D* p: _* a& d6 {
" b" s$ e8 N) L/ l: z' [4 g
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
5 M( y, c( s- t6 g/ h8 ~4 \* I2 c/ M/ ]2 Q' a/ ]- Q; T$ t
A.它们组成一个数组,存储在超级全局变量数组中$ u. e' ]' j$ R7 a2 [! L+ h
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
1 o; ~8 j: s4 ?. Q \" Q* }C.第二个元素将覆盖第一个元素$ Y% V. a' i' A' ~7 c
D.第二个元素将自动被重命名# ?8 d: ?% r) R$ E2 N; a
E.PHP输出一个警告6 x$ B4 m* b" ~
% Q+ ]2 J4 ]7 U- {
0 ^/ z c2 v( L10.如何把数组存储在cookie里?
1 p; _8 Z) {4 A2 i; w( ]4 G$ s
8 Z" \# c# k7 \, F3 K- j: }A.给cookie名添加一对方括号[]
% `9 f+ }+ u1 u% oB.使用implode函数
& `" @% k" y# R- W5 H7 ]C.不可能,因为有容量限制
4 ~* W4 W. z5 j: q0 D/ m+ QD.使用serialize函数. a( D, Q; P3 C" e: p* k
E.给cookie名添加ARRAY关键词
4 G& U* m+ |/ {4 A# f' K7 S/ S9 ~5 V6 o! e- G
1 |/ q) w0 b7 U, U* U11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
6 z% t* c; L- {; F0 tB.1234567890 ?" Z0 i- d' f1 v4 T
C.0123456789
( y2 P5 z' C9 X" A8 x; ~D.什么都没有
/ L' W( l- A3 K( a/ sE.一个提示
9 U- A7 H. ]/ ^: R+ Y; E' f y% I& y) ?7 X4 w' R; P1 }
# e" M8 N6 C. X2 N12.默认情况下,PHP把会话(session)数据存储在______里。8 ]( F8 g+ [* g+ F8 k: q6 e
: k: i/ J3 u" M& MA.文件系统7 G) V( A. W! _ N9 c* I& Q2 L
B.数据库
+ U. |: @6 n' [* L2 MC.虚拟内容
% K+ @3 W* {/ V, D0 {# A, I# d5 o0 gD.共享内存
0 \- P$ |* {. o/ [E.以上都不是
1 `: F3 M( P: b# N# @) o% r: }0 R; h( W" f z* f( F6 v- N ~# Q
) F e6 v! E/ B. _. ~6 p* j13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)1 m! @9 Q: n' j, Z2 [- l1 Y
. ~6 b9 R3 f6 R" g. _A.浏览器的程序出问题了7 {" J( w0 k* n1 j1 p: N- l
B.客户端的时区设置不正确
0 P1 j4 ] y4 t, b: X- hC.用户的杀毒软件阻止了所有安全的cookie% ^" w& ?0 ?4 T( I5 G5 [
D.浏览器被设置为阻止任何cookie
% k( y8 M0 L5 E- a( w% fE.cookie里使用了非法的字符9 U3 s) @* ` F1 p
- f) Y, D9 N. i5 Y% X, p- _) n4 ?% G% I% f
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?. Y4 q* N# B8 u& K | o( h
# ]" J5 e" S9 N) L/ p. L9 ~
A.1440秒后 f5 l, O( x/ ?- I; ~6 V4 R5 ]
B.在session.gc_maxlifetime设置的时间过了后
1 L, G/ @) V; D; n6 fC.除非手动删除,否则永不过期
* H# k# j5 y! ?D.除非浏览器重启,否则永不过期
+ a( z3 l/ W# b" D8 Y0 |8 m4 JE.以上都不对
' I' k- f0 L) x* T1 i& Z6 l9 K7 k' i4 |
! Z3 s3 e5 P0 P% Y. q15.哪个函数能把换行转换成HTML标签<br />?
9 u! j8 i. U) K H2 w- i
5 l+ Z; s/ b) |& r' S0 S8 |, w9 c2 v答案:____________
$ Q' G' |. D2 R7 u
' W2 z# ?6 i9 K; ~% [
9 C8 N( k( b0 o6 N' ^' U
) B! @3 r! G9 A- U6 m1 f @; `. V: _答案速查( y) f( i2 E4 p' ~8 M# C
1:E; n7 v2 Z4 ?( @. n0 Z, Z
2:setcookie/setrawcookie
3 n. a! b. I3 |3 g3:B( v, S9 x) ^9 q, o+ r
4:BD8 G, {* S* e4 t U* ^: z8 Q$ K, w
5:BD A$ H! L6 f: B: T2 u. W* _
6:D
) [8 k4 f/ ^+ U9 n% j; M: N7:A
% h0 W0 V% l0 K. |8:B
/ O2 p% ?) K/ m/ ^- g3 ^6 \0 |9:C
4 j( z- R | e( q/ g10:B
. M/ A8 K5 a; K% R; m% S11:E
" {, n0 v' {& ^4 K12:A
: [7 o6 @: X U5 y" Y; g13:BD' @4 |7 E5 i0 P- l* R8 q
14:B1 O" m3 n R& D2 w/ V9 w
15:nl2br5 s: Q# |% d! S. i; ^
) g' f% l; K1 Z
8 Q& |4 S+ I/ w% A, g5 f4 a0 R
6 X9 C" w! t8 F$ R/ G0 z
答案详解
% {6 T9 ]: {4 p ]/ ]
/ S5 }( o; F2 d" [' G. u; U; D1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。; I, m6 I' ~" r! B( w% J
7 Y+ p4 j. U; q' D
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。1 C2 P+ R* s& x2 X
& }: p; x3 `# m. b2 i3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。/ A5 F5 A$ z+ G9 k6 \
" @# Q( f4 H1 b; W, k* k( a$ k7 ~
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。1 m1 m9 e# P4 G" k% W3 W& z
& V9 h. _; A. Q& t) K4 h5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
1 w; v8 u& }' k7 t" p+ I4 o: c
6 W9 Z% t( Z% P% u1 S6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
, ^' l- |1 q9 Z A# y8 r" r/ F
; |" J2 x5 u+ w' v% ~3 V7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。# g8 x# x n* C' p+ c( u7 M
6 j8 X- r, T, a7 T. _2 |% F D& O5 r) G8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。+ T# ^% j4 ~/ E1 i# l% H \
' n& y6 M9 ~3 ^
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
7 Z- ~- g5 g: |6 w: T6 n y. h: z8 }! O+ R" ]
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。5 `6 i' t. t" Z2 ]$ g7 {
' C! q* @ F' P- V( a. ^) l11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。; l; Z" J+ D: m' k$ A% S R. t
* c3 E( D X# n! M; q: o* B7 @+ {- q
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
3 {8 j4 `% J' d3 \
; C7 N' r4 F% E* R8 [) D( ^13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
9 i) M- p* i- \1 U8 J
! b2 ~2 W6 D# N8 X$ @/ j7 b! M8 D$ J14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
/ Z$ \/ Y: X+ ]
( `8 ^. ~1 t. I5 M! s6 ?15.函数nl2br能实现这个功能。 |
|