|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
, N- `- X u4 o与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
6 U1 @6 }3 n0 z! j一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
9 q# v( i" X" }* K+ C# T& r, X* w
, _/ ~% W2 R+ ?# a
7 m% |8 K. s; x; m! C" j问题9 b7 |7 V, m! F& y D1 G
' l4 b) ]0 i4 H( Z1.如何访问会话变量(session)?
; L* j/ o& X% V( b0 t' n
, J; x8 S# s, v+ MA.通过$_GET! R/ \$ ^. O" m- ~% G# G
B.通过$_POST% o* y% p% [8 }9 H6 `. E
C.通过$_REQUEST6 y- N; c1 v4 I9 W
D.通过全局变量7 Y! l3 q# S% A4 R3 w$ V
E.以上都不对
@3 {8 v; P" S! c% [- {6 E0 Q% U) g" v, \
) Z( U( t, ~! ?; J$ y* y$ _! ^$ k2.哪个函数能让服务器输出如下header?
. h7 |' ]- C* s' n. e: d+ j2 l/ m$ {) A9 `- W
set-Cookie: foo=bar;
0 J" p% l- U3 I2 ]# t; f- Z* d+ x, o0 j- ^% \
答案:_______________: r+ n+ u" l; v5 E, `6 ^2 Z
( b7 \9 R ~. A' T7 j3 J& e; I( P) w6 l7 [4 q* ~
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
, W! @/ I2 N) E, @7 h; e) A/ `$ x, l" H5 ]1 x9 v% N& u1 i
A.通过HTTP_REMOTE_COOKIE访问, s$ Q2 W/ ]0 w# p/ [
B.不可能
" v! X, j/ \- `2 P$ j: yC.在调用setcookie()时设置一个不同的域名
& i. w7 B3 X. [" A$ lD.向浏览器发送额外的请求
; m# P3 Z( A( R8 i) YE.使用Javascript,把cookie包含在URL中发送
; x: \+ i4 H6 r- M) m# ]# W; O1 M x9 q1 }; ^* V( J
% `5 [+ o8 A2 Q, ^' V3 _
4.index.php脚本如何访问表单元素email的值?(双选)
( m8 F" \! Z* N) m7 t5 N- {
D/ F+ |# `: p8 e* n! _4 X<form action="index.php" method="post">% l+ U& W5 C/ p# h8 Y2 [) X
<input type="text" name="email"/>
* R) @1 j9 R$ G' r</form># S1 x5 {# a+ w" ^, f' h
# i- j: V3 B5 H& c
A.$_GET[‘email’]$ @% j+ \$ d3 G; {* e9 }
B.$_POST[‘email’]+ g5 E; H7 a6 Y+ `# w: e
C.$_SESSION[‘text’]* h9 x( j; q7 K$ J n! A' k6 V o. V
D.$_REQUEST[‘email’]
% {% v. ^4 T' P' S! i- DE.$_POST[‘text’]/ R5 a) s! P" i9 \
4 @4 w( s' {: x) t3 |; x+ b) g1 u' _: x/ ~- B# S4 a
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长 K, i9 P" L) W' h
B.没有变化. j2 ^! {4 t7 P. _* O
C.在浏览器上打印该字符串时,尖括号是可见的% ^) \( k/ X7 V, d2 _
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
' T+ ~& R% n; x) A' nE.由于调用了htmlentities(),字符串会被销毁" |! S5 `) \; P; ?
1 M; w2 s* K' i( |0 G) P
$ B T' Y! J5 r- m7 B3 T( F! B
6.如果不给cookie设置过期时间会怎么样?; R4 m8 v) A0 ?) X% y3 L" v u ~
% ]- u O, P( Y. P7 u* y% U. Q @
A.立刻过期
3 ^) E$ x) a, a+ GB.永不过期
- j9 |( B. I" U- c. o* \# |C.cookie无法设置3 u& m. Q& m$ M J0 [ E
D.在浏览器会话结束时过期* I; Q. Y* c) a/ L" J
E.只在脚本没有产生服务器端session的情况下过期
5 X1 ], A/ u* W6 F+ s* C% g) H
$ {) h4 g5 I( ~$ [2 ]' B+ p8 b% e5 |; @% y+ O- @+ b' D% l# S1 g
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.什么都没有
]% z" H2 \& s3 h: P/ g& jB.Array/ e ]! R! P+ J. U4 t
C.一个提示: T1 \2 I4 S1 p1 |7 G& F
D.phpgreat
2 O& \5 M1 b2 `1 yE.greatphp" l# R' q' ^0 d% C. s2 D- C
0 W \9 G' J1 r6 Q6 Y0 X- v4 b
8 O: T! n2 R3 M/ H" I1 n8 H8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?8 \/ b3 e* R7 t* S: D+ ?0 K! ?
$ S$ z' R+ _* Z6 iA.这两个是明文传输,之后的信息加密传输
5 r9 U& p' U, ?* L8 C4 {B.加密传输
; k6 y5 F( o0 p3 ]' ^( \C.URL明文传输,查询字串加密传输
2 @' _0 K2 c7 H2 s! D( d |* I0 i$ RD.URL加密传输,查询字串明文传输
7 Q2 E8 q* H& e' Y# a. TE.为确保加密,查询字串将转换为header,夹在POST信息中传输
B# ~# V R9 d3 F5 M$ w* O4 P; o2 W: k4 q6 w. q9 |2 {
8 [1 K9 t! ~) G$ G
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?1 G+ K x* A" C' p. T# v m4 v* w
& S% d/ p ?4 {5 t$ {! A/ kA.它们组成一个数组,存储在超级全局变量数组中
5 I9 k' h! D8 }( |3 }B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中& r0 V! j9 i& {! Y4 h8 u- I
C.第二个元素将覆盖第一个元素
1 n5 I$ ~9 \- u D2 j( P) Y' [D.第二个元素将自动被重命名) x( W; k& q* u; Z- ]
E.PHP输出一个警告 _& v" h! b+ G( @9 ?$ m
# ^# w$ Y* H7 v6 A ~/ ~
3 {; q/ Z, E) K8 |10.如何把数组存储在cookie里?/ p m9 O; V( P3 e O% D' V
9 W1 S; b5 ^& kA.给cookie名添加一对方括号[]
( x( \+ R3 ^5 s" A3 f$ fB.使用implode函数) |; B! `8 D. v, o
C.不可能,因为有容量限制
& H! G H5 _. u) ^3 fD.使用serialize函数
; u: z& K( \5 Z- n3 {' dE.给cookie名添加ARRAY关键词4 w% S' R$ H2 X
& u4 T. t7 ~1 w* T
: [+ M8 p. S/ C Y! }( q
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
' q1 `/ X# k8 `! iB.1234567890
" ^4 K0 ~; n7 CC.01234567897 N+ S1 s/ V% S) e3 B
D.什么都没有
4 Q( ~2 _( Q* `/ Y- `; R' @E.一个提示
) [/ o2 ^# \3 R# g$ i o9 J/ }; R2 F, B$ m5 c" m% e0 z
8 I5 E" m% k$ k4 g' G( w12.默认情况下,PHP把会话(session)数据存储在______里。
! {$ E3 M6 K* Z ?& p8 c5 l5 {: i# U; |# q
A.文件系统
$ v5 }7 o, k, |; O" R/ j* jB.数据库( e5 `+ x3 h( V6 q; n; d8 e5 \5 I
C.虚拟内容; r6 f1 k1 U: e8 X2 K- Y" Z; T
D.共享内存/ m& C @. w2 _; R
E.以上都不是 i8 I. K) z" x% M
7 T3 w$ s# F# k$ F
j# I% O/ ?4 F$ }13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)1 ?2 n% T4 N/ I& \4 h* P# ^
W" @6 n- k0 {5 t* Q5 Q# P
A.浏览器的程序出问题了
. ]; x& s1 ^ } G0 Y" _! hB.客户端的时区设置不正确3 X# s! u0 a8 Y) z8 j* H6 Q2 y/ G
C.用户的杀毒软件阻止了所有安全的cookie
, m4 }9 J6 u, T7 l0 S1 yD.浏览器被设置为阻止任何cookie
3 k& `; p6 \3 w8 @- pE.cookie里使用了非法的字符
l: S, O0 _/ ^0 q+ j& \' H4 K# f Z% h7 B8 W# P- F9 W7 {% Z
6 _! ? F: ?9 Z- Y9 O0 h) Q" R
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收? y) C- [" K( b1 Z/ U) L
9 |: |9 s7 S( \7 D! t* n1 O
A.1440秒后
H$ Z1 _2 j" ]B.在session.gc_maxlifetime设置的时间过了后( w. a" c. M. i0 _
C.除非手动删除,否则永不过期1 ?$ S+ C! h# K; L: [, N2 x+ f
D.除非浏览器重启,否则永不过期- ]' o% t$ U/ e6 s- {8 C
E.以上都不对
! W7 F: N; r4 x( x6 {1 C& Q1 L. S+ p: _- y6 L- e, q) u1 N. }
. y3 R; x, V% E5 ^+ }15.哪个函数能把换行转换成HTML标签<br />?
3 ]3 I- L) `. r6 y8 D1 Q" O. v
& G+ s% U! m. D3 O Z1 \6 \答案:____________
]: X: E2 _4 N4 y7 M
1 Z) c- z* |8 L7 ]1 Q8 `% L! G6 |5 b/ I: ]" _
/ z3 W9 {' ~# ?, l# E, s7 E5 D+ B5 F
答案速查7 d" N2 F; v& [/ U& v/ ?9 K. p4 ~+ r
1:E
- @0 D! [8 P8 U$ _# Q, Y2:setcookie/setrawcookie
) T6 c3 O" d% T! d9 F3:B
: J I- S5 T5 |5 Z# K' w4:BD
- I$ s9 ~! D' j% K: a( `5:BD
8 D$ @% m- ]7 g% Z" T: V6:D
% K' w; j0 T ?2 E- k7:A
* R! h7 b3 U# v6 c4 X1 N5 ?8:B
% Z2 ^, v/ n/ e' W9:C- _) Z% n! A1 q9 p* s7 B
10:B3 V8 h- d% R) \3 _# g
11:E# J/ `2 Z- j# q; T) q: P& ?
12:A0 J; m) h- X8 m4 j- ^
13:BD
2 o8 ^) ?8 J4 e& f( Q v/ W14:B) b: T1 g5 V4 Q# ?, H( y9 Y
15:nl2br$ l* a- c! }0 g% V5 g R
2 B8 n' w& J* Q
3 B# K2 ?/ B ]5 |1 O2 b- F# P
0 \2 ^& ^/ `) q1 B) d: z
答案详解
$ [) L3 ]5 U/ e" c. F! E% Z
5 P4 w# ]5 d7 d0 r) c( h* S! @1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
# n# H# R+ T4 s, _) z7 |+ {
9 v. H% _& X1 d0 T0 i5 T% X2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
k1 r. e, b! n
$ w/ G2 H1 d" F( } K$ x3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。7 F2 X0 M/ q( `: f& O
( R8 ^; n. N8 l
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
. e' Z& R6 H4 k# [( m$ J
* ?( c/ B/ u- b$ J% r ^# w+ H! q; g* b5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。& o$ P: X1 N# s; v! T
! {7 Z5 Z' U" P1 L3 H2 N
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
# C0 ~) d& _% [2 I
T2 ~$ J* ]+ C2 N3 |7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。3 g7 N8 A: U2 p( X
! S; A: P5 _- g0 ^" b5 w0 U
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
! N/ G# v1 y( `6 x( l* y! n/ _9 o' Z( c& K% g
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。$ J! y) g4 W; `( z) W' C
1 H9 H# p, ^$ h( f0 d& B
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。 S, ]6 U R" {' l
0 o- c8 e$ {# ]" k' s
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
; t/ H9 W8 S `
1 f0 O% U: f+ F, z/ n2 N9 {0 w12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。+ E" q9 E- a. }& I) ^
: ~% j4 t3 K3 d$ Y/ k7 Q13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
8 p- I9 l- D7 d" Y
) B5 i7 M! W" X5 k! Q14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
( T- E( \% g, s/ S" u8 ?2 j; l/ l* C x7 J
15.函数nl2br能实现这个功能。 |
|