  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。1 A: @) h/ n6 {& k8 Y
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。" o4 b0 @8 j0 ?
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。# ^* ^. D4 s9 E
. s) Y' b+ A3 L9 L+ X! C/ C( H' p9 A
3 O1 b7 t( t2 T9 w( p3 O0 b
问题* N) g+ z8 ?' v( h; Z# a. \1 u
7 B9 x$ u; Y3 L3 e% R) w" w1.如何访问会话变量(session)?- y6 O2 t- z! T/ Q6 B
; e% ^. A4 |8 q* G0 F9 ^( I
A.通过$_GET8 v7 c( G1 w* i. c9 Q1 m
B.通过$_POST
H3 E: R. ~9 N; \. Y6 ZC.通过$_REQUEST: R! P- O- W6 {' l/ _- Q5 I( c6 K
D.通过全局变量
/ d8 {# v4 e) G Y) hE.以上都不对0 P s( Z& m$ P" Y9 ^, ~% n
" A7 f2 W3 K- J5 m' M' G# u* {
2 h8 Q8 C3 d) K1 R& e! P+ y8 H2.哪个函数能让服务器输出如下header?9 W0 N& L {7 D3 y& l9 g5 U
& z. X$ D% ^" H }. H# {+ [. vset-Cookie: foo=bar;6 x" S, F! _$ X4 B
9 g2 W% E m9 g
答案:_______________% \; x' [ E; c9 k) J" w, A- |# P. A
5 ?$ y G( q- p N; V, J8 E% s1 S( x/ R3 E) T
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
4 C# y0 }4 Y. `5 @* j$ c. n# _9 O/ x5 u! G0 V' T
A.通过HTTP_REMOTE_COOKIE访问5 K7 c( u2 F$ Q, b w9 Z7 p" a
B.不可能
8 v! B* j) X' ~5 N5 f+ ?7 i) NC.在调用setcookie()时设置一个不同的域名
: J. `! S( d: {D.向浏览器发送额外的请求
( e+ s0 A" p, S# A3 q8 ]5 ?E.使用Javascript,把cookie包含在URL中发送
+ S/ h0 E3 I$ r& a9 m: x- \- l
. Z& |& n# S# b; G
2 P- p! L' y/ ^# a b4.index.php脚本如何访问表单元素email的值?(双选)
# j! s1 q6 {" {$ |' Q) ~
* T; H" g- c$ q( K* Y4 F1 w<form action="index.php" method="post">) m0 J' T, ~+ {- q+ U, v5 [# g
<input type="text" name="email"/># {+ `' Z* A4 w5 Z: ~5 i& C5 _
</form>' B. n1 |# Y5 h
* y4 r7 L0 o& B! pA.$_GET[‘email’] y9 e4 U4 f! X5 e$ r
B.$_POST[‘email’]/ w' s5 i! T: |# a
C.$_SESSION[‘text’]
( u5 f9 i( P2 L B. g, FD.$_REQUEST[‘email’]6 |4 ^" ]6 o1 H+ J! b
E.$_POST[‘text’]$ G# {6 \" z3 v
! ~1 k2 u- X- B* J# q+ T& @5 |' m
) T! ]8 |8 C _% n
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
/ Z2 u0 L8 L: N% g$ MB.没有变化
: x0 W; n3 }4 g6 J g" Z1 u; uC.在浏览器上打印该字符串时,尖括号是可见的
! x0 Y! `3 n. P5 K) _; a: HD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
6 {4 u; e( Z- z! q' m0 H% BE.由于调用了htmlentities(),字符串会被销毁" q* x. u9 U& |. t
7 m1 ?$ Y( A+ Y- o( C7 T/ A
' w: ^. B. s- _) v: b2 \6.如果不给cookie设置过期时间会怎么样?8 ]+ H: I' }5 r" U( {1 G3 B
3 O6 j7 t. X3 E3 R
A.立刻过期' [* I- Z7 f* o q) u) C4 \
B.永不过期
7 R: A5 @+ G: u6 cC.cookie无法设置
4 p; K {0 ^& f1 uD.在浏览器会话结束时过期& A" G" T" z/ d5 }
E.只在脚本没有产生服务器端session的情况下过期- I- `. X2 ?: A1 I2 X
k: ?; F' b: A8 t9 B
, s. J" h; {/ ]. ?+ C9 R0 k$ O
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.什么都没有5 h1 o7 P7 e4 P
B.Array
3 \( Z$ O1 t) y# n9 VC.一个提示
8 ^) [& c% o9 y @% r1 v/ `D.phpgreat
& L. p7 w6 t% G; i3 F" p$ `$ EE.greatphp
6 T K9 N. Y. X# V4 p8 w$ ?8 D5 [0 S. c$ m
9 U2 @8 T" p: _& k4 O, i
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?1 r5 A) B6 w. Q* Y& Y0 D. ?9 n- a0 r
$ n4 o2 g8 k% j- h) K+ w) i
A.这两个是明文传输,之后的信息加密传输- s+ }) ?& S) Y e: x& `6 L
B.加密传输. \' a8 g G8 e9 g, b
C.URL明文传输,查询字串加密传输+ W9 B9 G! z# q$ t9 l: c
D.URL加密传输,查询字串明文传输# p% j& P# s- s5 q0 y3 \0 F
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
0 h6 Z! G0 o6 c# f& N% s0 Y6 J9 p) n* j4 ~& e- {7 f
* r- [5 c* v/ o8 ~3 x! b
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
+ G+ l* p6 D H+ ~) {5 [7 A; I
9 T" z! O3 {( t; b" Y' tA.它们组成一个数组,存储在超级全局变量数组中
0 f/ X# n/ K; {4 @9 p* rB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中- b: M' ?% p' H+ M7 I
C.第二个元素将覆盖第一个元素3 k( y. B [" t1 X
D.第二个元素将自动被重命名
2 B) H1 h5 h% {: {# ^0 K6 WE.PHP输出一个警告, `. d1 z. A& H+ b) o
/ m4 X% P0 ^6 y5 V. \
9 T4 O' {$ g) x3 C1 D* \; P10.如何把数组存储在cookie里?
+ V. O. |$ g* N# K8 i6 g1 ]0 N9 ~( r: O6 r7 p' e
A.给cookie名添加一对方括号[]
' M6 l+ S7 b! wB.使用implode函数
1 Q) @% }( B3 e0 ~C.不可能,因为有容量限制; v( L9 b( ~- N
D.使用serialize函数- P& \, c0 Q8 L4 V
E.给cookie名添加ARRAY关键词
n. C( x$ b L ?" }. x% A% t8 [" k8 u5 f& A
# L9 E, }0 @( n$ \9 W11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
+ ]/ a! ?$ B$ l. l/ XB.1234567890. o7 L' B3 x2 }7 w( L# d/ p: |3 H& e
C.0123456789
% f& B, ?' c0 SD.什么都没有
+ g2 J$ k3 Q5 s) ME.一个提示$ K0 M7 c/ e7 |* I7 h
Z8 m2 N, n( X8 U* s" z7 e0 ? z
+ I5 J v3 S/ W2 W5 L
12.默认情况下,PHP把会话(session)数据存储在______里。9 Y) _1 A5 r M
% I/ h% b, N2 X! l! WA.文件系统
- _3 D5 v; ]! r" K8 }; WB.数据库
9 J4 P: Y: [0 Z ^& s, o& N2 i# jC.虚拟内容
; }' ~+ k4 ~' A, v; pD.共享内存/ J; o& c+ C( Z
E.以上都不是
4 L! U. X% d9 c7 A# M& J, ~ E3 l; ~) ^! S1 J" w. A$ Z9 M- m
0 V! u# w, b3 z, j5 i0 ~ q0 _$ c
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)# Z: Y0 B( o+ V1 ~/ |: I5 R
* c0 b3 c, m' k$ `/ T, c6 \A.浏览器的程序出问题了7 z4 z! @& f) t8 p
B.客户端的时区设置不正确- _' x7 L, ]* ~5 k3 ?
C.用户的杀毒软件阻止了所有安全的cookie: C0 P5 m& I7 |& F9 m8 @
D.浏览器被设置为阻止任何cookie
1 z1 K4 O! H5 D- \E.cookie里使用了非法的字符
8 R { Q7 i4 ?: m; h; ?- q+ }" ?/ u S; k% \
& h9 |; c, n: H W3 V14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
/ |5 k9 K) S4 y: r8 f; O
3 n7 \9 r/ n( w7 Q7 tA.1440秒后
" E) z- {8 X7 nB.在session.gc_maxlifetime设置的时间过了后
' w2 l# m2 @+ e( h- `C.除非手动删除,否则永不过期
. c3 W y" {, g% r( _( aD.除非浏览器重启,否则永不过期
' ~. c& X3 x! T# [9 d( KE.以上都不对
# b: c, _/ O$ M- g2 c/ I5 x5 e/ M8 w7 b* }! G9 v9 E1 u, R8 K
. P# a0 U/ r/ ]6 i. B$ {
15.哪个函数能把换行转换成HTML标签<br />?0 X* j/ F* Z. |' Q Y
* i5 v& n* b3 t
答案:____________
4 W9 ~- d- T( \! A/ g, f/ F5 c3 F9 P- w
+ i: K5 j6 w: d; N% r
. Y! b' s+ W" R/ d- X' J答案速查
& \0 y6 y) k, O$ h1:E( a* I7 N" `% V+ S2 P: T7 x
2:setcookie/setrawcookie6 d3 F% f2 Z4 m) ?1 O( [6 o7 H
3:B7 B, y# e/ O; d, b# ], x& f; I
4:BD
# b- _6 j# w7 ^5 P5:BD
# ?! I( J5 q% Q. r. C' l0 @- j6:D2 f [ N* g3 d( b1 x/ J" U
7:A2 k& P3 Q N7 O/ e; B
8:B
8 D, Z' z5 ^# M& ~+ u9:C
- G( @1 [! \ r; ?# e) [! r: Q4 n10:B6 L4 [. r6 v: v4 R) \' r
11:E
9 S$ n' B- e* C5 U# M. m12:A3 v. a; z8 n0 }, W2 d! [7 a
13:BD3 p! Q! }3 H, U9 F6 \
14:B
1 t; o% ~* w8 F! g5 m15:nl2br7 M1 X* l2 K6 ?1 j6 \6 f
/ [. _1 f3 L' t$ a- P
- f7 S- r" U; o5 w
6 ?0 G& p* Z8 ~
答案详解
, X9 d4 d/ c0 s0 a% o5 u
/ G5 l$ {, _- {5 N1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
$ z1 j8 X9 ^- L! ~7 {* x G4 h0 D
% V7 B0 W( h3 ]4 C, }$ c2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。5 e5 h6 T: z9 \: _2 G4 X& v% |
@' L4 q, Q) H& d5 Q+ z' ~8 S! c u
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。7 g: k! f3 n, Y
3 c) D- Q' ]1 g
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
" T9 g9 {- }. i8 w+ f: o! z0 b# _4 e4 o; C
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
/ N3 @. S* y1 X Y6 Q; k
7 M L) g3 L% Z& B+ R! D. s P6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。; l) C' g% S# Y; ^
, m: y1 P7 o5 U0 u7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。* |4 X) [+ B& P7 x' w
5 I5 D- Z1 J$ K- t' `: j1 {8 U
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。6 u: c2 @' H1 M" c6 `5 K! n) r
2 n; _- o& n. H' n, r$ H
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。$ `, j- d' V9 Y; i% [
- J. v9 V7 y) x* p% M4 `1 @
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。" d" ^" y+ c0 A4 ?- n0 E
& s# f: k5 M5 E( i( _
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。' o' Y' U6 B: k# Q7 A
# O9 r% m L( Q$ T0 y
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。) o! P; S- V! B- o7 L" B
# G' l# P7 K& ~5 s7 i$ a! ^13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。, H. x( v g$ M) u0 ~/ e
9 a3 K6 k+ g* x+ I
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。* @4 A1 h; X7 @7 J% U$ }3 x0 X8 {' S
8 r3 X+ l6 J2 t! r: |( B. Q
15.函数nl2br能实现这个功能。 |
|