|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14349
- 金币
- 2460
- 威望
- 1647
- 贡献
- 1408
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。) S" q- `& x- n9 N7 b
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
1 B, P$ q V5 F; t- Y8 @& X+ O一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
, y7 B' \; N4 L) ^
! P; W% g' o( G0 ~% q9 O" V6 i5 v+ U' F1 a7 h- U& X
问题0 c; A0 O' g- O
% R' R0 K# P; q( J8 O/ L. b' M' ?
1.如何访问会话变量(session)?
0 g4 g8 h$ f! {6 v( {% }0 n7 i
7 i4 M$ \0 l8 K4 _) L. ~' bA.通过$_GET
1 O1 {! `7 |/ W# h/ k- kB.通过$_POST
( Q P* U: ~: |/ J! @- h- f( oC.通过$_REQUEST' {8 x* o% F' r- D7 p
D.通过全局变量
; D+ e* O( t' ~; W9 s! oE.以上都不对9 d: J) x* s' i( k
. N7 l" C& F1 J! `) r I
3 o& C9 Z2 T; ~ C4 [ O2.哪个函数能让服务器输出如下header?
% y3 i/ d# [8 d. K* M6 v- S
& t* S# J& o3 s- ~* [set-Cookie: foo=bar;' b2 i, L" v5 k! o- }
; H8 i9 n1 z+ t! X: \* |2 x2 Z/ F答案:_______________) K. S! r, D9 S
' K3 T: ^5 Y8 V+ P O
! r% E# m) S7 y7 m3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
5 ?3 B% I" D& |+ d; W- g9 }0 R- z: j, d: P
A.通过HTTP_REMOTE_COOKIE访问
O R0 U9 E9 o$ P$ b7 cB.不可能! {. ~# a/ n3 v ^( u) M
C.在调用setcookie()时设置一个不同的域名7 h4 Z q, Z1 |& E
D.向浏览器发送额外的请求: w/ y1 j" K0 h) F
E.使用Javascript,把cookie包含在URL中发送
" r" F/ P% R# k6 Q
" z% h1 m8 n6 h+ o J# d. F1 S% `7 Y
4.index.php脚本如何访问表单元素email的值?(双选)
1 K1 _4 F' h5 r
1 d' F* D. `* n" Q, s) I' M/ w<form action="index.php" method="post">
! c2 K( l: G3 c, B7 S+ o9 ?<input type="text" name="email"/>
% k# A0 ]* _/ D' i</form>
- j. H+ F4 P7 o* X
. |, }) R4 |/ O# ^+ HA.$_GET[‘email’]
( ]# i7 N7 k1 v9 m5 d/ C! w5 U& WB.$_POST[‘email’]
! W8 U: p, i1 {5 gC.$_SESSION[‘text’]
( l0 O# n* l! U' N+ D2 uD.$_REQUEST[‘email’]$ }3 Z/ [! K' b3 z: ]/ k
E.$_POST[‘text’]
# |, V7 S8 K6 v* Z/ n4 _; q
/ P) e( J4 m+ {& K
9 u% E- q9 P3 @5 R+ p; X5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长 \0 W/ C. f: J5 \: X8 b" {
B.没有变化; e7 u& y8 }* F
C.在浏览器上打印该字符串时,尖括号是可见的" @" ?! t2 d8 h6 I x: J
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见. W# C; R6 n( o I
E.由于调用了htmlentities(),字符串会被销毁# `/ M9 [' n; h+ t9 {) A4 L0 V
/ y9 L9 I e g5 E! e
. ]( W9 Q, l; X) U) |0 B' n3 u6.如果不给cookie设置过期时间会怎么样?
" v7 ^+ t) l& L( M
/ v1 {0 T9 U, _( MA.立刻过期
1 S" b1 i" v5 p6 P- }B.永不过期
3 O0 Z% T3 B/ @* C, R- ~) }C.cookie无法设置
& ?# l) u! w1 O# ^2 e# OD.在浏览器会话结束时过期
+ v* ], r7 |; K/ GE.只在脚本没有产生服务器端session的情况下过期; A- G; \# Z: o* T& t) G8 F
7 g8 d. ?2 S& q. ^1 n7 f% R2 m
5 S& A. b3 b# q) e* y5 a- ]( R7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有
5 i4 G5 |4 J+ L5 Z/ M6 x1 iB.Array& ?$ Z4 a6 H" y1 B! X: N6 y
C.一个提示
. }2 E4 L% r6 |0 r4 TD.phpgreat
8 {: d7 z: T7 V4 R: ?1 E, R4 f* oE.greatphp% M, \4 x7 L6 z- ^
' b$ F/ `. V5 G
7 o7 c9 B% A6 H& e
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
! `: x% r# R5 J a5 a% q. U' E$ J3 R+ O% p& e
A.这两个是明文传输,之后的信息加密传输
! j* o. W+ ?! F# \- _5 Y) kB.加密传输+ `1 @2 t- c$ h' P
C.URL明文传输,查询字串加密传输, I5 P* H( L/ k" y' x
D.URL加密传输,查询字串明文传输7 l8 W9 E. e8 V2 i4 X
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
3 ~: l Y! l" y% p* ~0 [
3 N3 e4 ]! U# W- J3 z6 {8 H# x, y1 e) C
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?: Z+ K8 W9 J( O' X3 K
' I% n1 ~2 Y# J$ C9 D6 T
A.它们组成一个数组,存储在超级全局变量数组中8 K' u" w" Z% d h$ x' B
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中0 f, E# d2 d: G, Y
C.第二个元素将覆盖第一个元素3 e" B% @- \2 A& z# z
D.第二个元素将自动被重命名
_# p. R7 l: |3 EE.PHP输出一个警告$ E7 n h' `# H* P* W
8 e/ {! }, S, c; `3 `2 ^2 i/ g
8 U4 @- `# ]: i" b
10.如何把数组存储在cookie里?
# n- X& K9 S# Y4 T) ~8 r/ Q2 ]. {) c& F% v
A.给cookie名添加一对方括号[]
8 q, S: S- s& I$ k eB.使用implode函数 ]& o$ c* s1 I
C.不可能,因为有容量限制
/ V* X; K/ g$ w" M" [; L) C6 oD.使用serialize函数
) A, v* Z W/ Z2 K6 }7 T7 VE.给cookie名添加ARRAY关键词( i0 p( u: G6 B9 U6 p
5 M+ o) j1 A. Q* I( ~/ H
L/ h3 M+ _8 C3 ^0 C6 f
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
" S) A) F0 K+ B8 ]! T, KB.1234567890
@6 \4 \: q- t/ SC.0123456789
% v: Z3 Z& V6 kD.什么都没有
+ o# U! L( H2 t8 jE.一个提示8 Q6 D+ v! |4 V, A% g. ~* f* ~8 u
/ j; h) c" j9 u
. w6 Y* K! k+ Y% ?0 c% n$ t12.默认情况下,PHP把会话(session)数据存储在______里。; Z. f7 C" W- A' a: C8 H! M, x% q
9 \2 h6 X0 p- T. |- `# iA.文件系统 B7 E- `2 s3 a4 h( ]
B.数据库
2 T# g5 e8 @4 R7 R) J& K$ PC.虚拟内容0 X) x2 I8 Q' `# J0 \2 G
D.共享内存- T7 x8 I2 F8 j' q$ I9 s& d
E.以上都不是
( Z2 D' \& f5 w
# W7 y: S: G( A3 m0 S* ?. T# D0 d. w7 Q$ Z! z
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
: x! D$ Y! p$ a# [) Z8 n6 |" v0 V4 s. T" c7 ^
A.浏览器的程序出问题了
3 C) u. p; }- L& DB.客户端的时区设置不正确1 q- V X* z* `
C.用户的杀毒软件阻止了所有安全的cookie: S h3 u: I2 C% [# `
D.浏览器被设置为阻止任何cookie% X+ g# G' j- o9 v4 j7 |* U2 \, z
E.cookie里使用了非法的字符5 o% c- ^! E- ?! M
* _3 O6 W0 k* t- x% b y% i
' o8 H+ i/ m3 \0 _ m6 D, E14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?+ ^5 c7 q# ]% Y7 i
6 T* H# O. s$ p5 I- [" J: JA.1440秒后
; s7 ]+ D; _$ x2 AB.在session.gc_maxlifetime设置的时间过了后
( v' R. y% L$ h/ L; @C.除非手动删除,否则永不过期
. {* p! `4 L" X [6 Q; ZD.除非浏览器重启,否则永不过期1 o4 H) c$ O, }) X# T$ L/ u
E.以上都不对0 C2 |0 f0 B M# [$ X
# i! g, p7 ~. V- f# ^ N
( ? G: j& Y7 a/ J& V( j15.哪个函数能把换行转换成HTML标签<br />?
1 B, Y" ^ W3 W0 h$ l7 U
6 H7 y5 w8 F, ^- w+ l4 b答案:____________
, [2 ?/ s& F! |3 x! W0 t& Y1 Q2 u
+ E# w; _' }0 r2 T# m
" Q7 z. H. a' c: E答案速查" x3 t% o" T# n( w( [; i5 a/ F p
1:E( g6 E3 R9 i6 }9 i: X8 F3 J5 C/ X
2:setcookie/setrawcookie
) ?5 U$ h/ J8 ?3:B# G2 Y# L& E. } ~! ^+ S
4:BD
% P& h* |# p% f) C& N& S5:BD' Y: P# V' c$ }3 |
6:D/ ^" E/ C6 I1 I$ ^% N' ]. Q
7:A
+ M5 q" G) ~0 r2 H3 K6 D) a8:B: ?, J2 k9 c3 _( \! t
9:C, y. y# D/ [! m
10:B
' G1 g% _, I, I& h" f1 @11:E
* ?& t) F# b/ s# W( [12:A* _1 _) s/ F% ^, P
13:BD
: x" P2 o' X9 G8 t4 L2 \; ^3 h& F14:B
+ N2 d+ M: g, v1 b( _3 t15:nl2br
' m M- m* G8 S* v! x
4 x+ ~- T( p! ]2 t2 D# a- e" K. H) |) S4 t
& Q! I/ b5 T3 f$ T8 m答案详解5 J2 Y; l, E2 E" p) c4 u
" o/ @/ \) A/ E* g; a
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。. C" M4 I, [8 u2 s( m5 U' A# m' Y
& t0 W- W* t2 q& @1 U! p
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。; J: t- c, F6 D9 _
5 b# W* ?9 c! T& x" j$ V% V
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
) J2 r; r0 N- F; u
) e+ M7 ~9 R. k1 l4 K5 W& G0 |# L, l4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! Y7 K ]! R" A" N# }
1 p& {* R5 m( | z" m! S5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。 g3 m" b& `3 D* q: V, f
( I, ~; i* H. T! @9 b
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。0 g V- I- S, e5 Z9 ^
" p8 @# i6 q0 k. S/ d& ~" t7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。* }; K$ s E9 ~6 L* [2 f
% N: y6 `/ ~, B# d6 y3 M8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
8 H; d0 ^# g' o. K0 `$ X; F( v+ d6 b# T
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。3 W& s$ p4 o: P: ]
* H, u7 J5 [6 j# w3 K10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。* c: `# R4 J) P
; K; N; v! a+ i6 S4 z B& q; o2 Q1 Z
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
+ O4 k: h5 w1 D9 ]/ u. i- n' `. T$ \/ b
8 U& F! Y; [" l- }' @: H9 m12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
3 x& t5 o- g$ c* p+ [
& S, |7 p5 x& \; B1 Q0 {13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
& d8 p6 x9 [. R$ d8 s6 z/ q2 y3 R" P0 E. F `: p5 }
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
3 W% f# J& F$ I7 d6 T( v1 g/ m% K q5 g9 |
15.函数nl2br能实现这个功能。 |
|