|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14433
- 金币
- 2502
- 威望
- 1647
- 贡献
- 1450
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。6 H8 l3 C8 h3 m6 S- @; o0 h
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
) W) V4 Q& y1 y2 \3 R3 A5 x! S一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。8 ~' s: _. n" S5 d
" J7 \& R. j1 u4 S. w" Q4 ^3 Y9 \$ V: a7 o
问题0 q3 c/ g) w2 k0 F1 s
* t" H) k( q0 k
1.如何访问会话变量(session)?9 [1 J. z( w3 u& L/ S
5 o9 N- u5 J: c' C2 z
A.通过$_GET5 G, A8 s; ~& X3 }7 g7 ^" {5 r6 {
B.通过$_POST! r# z2 }/ U m
C.通过$_REQUEST
, W! b' R( ]/ [D.通过全局变量) ~0 p! Q9 Q* ?
E.以上都不对 H9 k& C1 I& n
! q+ i/ L" ]4 g# A/ @( A) Q3 v4 a
8 d4 n5 `/ x1 X A# g2.哪个函数能让服务器输出如下header?: A6 o) M# U& w& p
+ B0 ?$ ?6 ~* f
set-Cookie: foo=bar;. h. k# ?+ s8 ]( y' l/ m
$ R6 K( D3 L8 b答案:_______________4 T9 Z' Z/ x% `6 [' H
( E) K2 i1 f" [! v7 r
! ]! |# j7 N4 Y' }* t/ L5 G
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?! ]6 [0 h6 ~" @! P' \- P
% {( g+ r4 M1 C# L1 e& x* Y! _8 w
A.通过HTTP_REMOTE_COOKIE访问
6 m) H) V" {5 r6 ]B.不可能6 c( D4 F$ u: c; w% M
C.在调用setcookie()时设置一个不同的域名
+ t! a2 C8 ]6 C5 z" M7 E' b1 ID.向浏览器发送额外的请求& C7 R0 I+ k4 {
E.使用Javascript,把cookie包含在URL中发送
4 \5 p& |4 c: U7 I1 W& G" |
- H2 P! A0 T% A m8 I
+ n7 V9 T1 }3 K# H8 `$ t& b4.index.php脚本如何访问表单元素email的值?(双选)
% \- I- H: l& z& @( }
& k' C- f5 V% c! e( _% A<form action="index.php" method="post"> ^" N, p6 S$ V2 a. H$ q" t
<input type="text" name="email"/>
, n- [ z7 S! ~; u</form>
* S* Z3 {* h4 p% K) j# n+ w) X5 a3 N- ]/ X3 i2 O" m; c! D
A.$_GET[‘email’] m! u' L& T4 P2 q. d7 }
B.$_POST[‘email’]
/ Y1 c# k+ R! J. k& FC.$_SESSION[‘text’]
$ T7 P/ H! l2 u9 \ RD.$_REQUEST[‘email’]8 B. T8 ?2 p& F: S
E.$_POST[‘text’]9 s; A, }) Y1 Z7 P; [( {
& A' d/ K9 p$ `( h$ g9 H5 ]9 i
" h V" ~. k) J; F; Y0 v$ Z4 Q8 b9 |5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长( i2 ]3 _+ v6 o, R- I& i& \
B.没有变化
+ g3 S/ {5 S* I5 jC.在浏览器上打印该字符串时,尖括号是可见的; z, P: h; R! ?) d! v
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
+ z* Y- l' `7 D: ZE.由于调用了htmlentities(),字符串会被销毁, W: e$ k6 g& {2 c2 S0 g
5 m# F/ z7 r% i; R# C. h9 E' z
: x$ Z w% z! J+ d
6.如果不给cookie设置过期时间会怎么样?
& [ @- r+ Q- u t5 ~9 B. C( Q
1 C% ~$ R7 l }8 e3 KA.立刻过期5 F4 b ^- Y* S, x
B.永不过期
9 |- G/ M Y9 v5 I* I9 C! w: vC.cookie无法设置) g3 q, q0 q/ n( d/ x7 K
D.在浏览器会话结束时过期
. r: x+ z3 r7 r* bE.只在脚本没有产生服务器端session的情况下过期, B) A, a$ ^% Y5 V+ u% q
, U3 E B8 K, @6 j# V8 J
6 d! F6 d- S7 R, K, \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 j" c% ]" q0 C! i, ]
B.Array' V$ V# N& y- C; S& [; O5 m4 s
C.一个提示
2 `5 H0 g2 v9 ZD.phpgreat8 u( W/ S5 f5 v K
E.greatphp
& C& V/ v8 _ [8 v1 D: E* D$ p, b$ e; ]3 L/ F! J5 I, Y4 h
" d5 u9 Q- l: m" K! m
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
4 p3 G. L3 c; G
6 A0 ^' W" z( C6 ~# CA.这两个是明文传输,之后的信息加密传输
/ x2 k) z( b$ t- l# T' \; ~B.加密传输! \2 ~: o0 C! c1 C! i+ |' [
C.URL明文传输,查询字串加密传输- n6 \. r& Q1 R9 D0 ^6 Q y/ a( B) N
D.URL加密传输,查询字串明文传输: _7 O8 l' s% g, M# k `! P9 Q
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
; ^; Y/ A0 k6 Q! }* A- n
0 _& f% ~& a: c2 i- P+ K& s# {6 s" _9 X
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
Q5 C4 j/ e5 N7 ~7 T6 U7 @% o& t5 h3 P2 a) f8 u2 J9 g4 b) `
A.它们组成一个数组,存储在超级全局变量数组中
! B& {/ ~. D- S4 T! x, g- lB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
3 H, g' `( b" t7 TC.第二个元素将覆盖第一个元素
& q f2 D: T3 j/ p: XD.第二个元素将自动被重命名0 j( n/ ~* `+ }. y* O
E.PHP输出一个警告
$ V- Q8 H7 { X& `1 _& F
* A( U' [$ h4 Y! v- @) S/ L4 n% r/ N. z: \/ Q( G/ F: t
10.如何把数组存储在cookie里?
: f" v' }+ s; p2 H) x( _$ ^" X* t9 l3 y/ r0 V
A.给cookie名添加一对方括号[]
+ ^) H2 O& r% X2 X$ z7 L" pB.使用implode函数
3 b, o D4 P3 b' ^5 fC.不可能,因为有容量限制
9 R* P) }1 @. P: j/ PD.使用serialize函数
8 g" m# u6 }) y I3 f( I1 nE.给cookie名添加ARRAY关键词
) h& H: p+ l/ h! i/ O( ]2 l
4 S0 }# F& Z, |( M
% e7 D) I# N( \; H" n3 n% y9 i1 ^11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910- H6 k, m" N; G7 H/ E/ h
B.12345678904 F; N0 D* [/ e/ k* [4 [$ Z
C.0123456789" l7 v0 l+ H, V5 {0 i
D.什么都没有
. M: ~# f) d: c2 I/ O& q$ ~E.一个提示4 F7 o3 G% J9 e1 u$ _$ I, ~4 E
, V5 @" ^( Q& S- n9 a' z: z! ]
7 Q! E$ c6 ~8 }4 n1 _8 p& m
12.默认情况下,PHP把会话(session)数据存储在______里。
6 e$ }. J8 Z* B" N. F$ p4 w0 X5 o1 F4 i6 O6 R+ L" k# Z0 f
A.文件系统6 C4 e0 J% l1 H0 G' z
B.数据库
+ R" d; k$ A2 Y0 O2 \; s0 nC.虚拟内容
- k8 U3 ~ T9 w: M0 b6 p& XD.共享内存
1 @* _# h( e' J7 x& gE.以上都不是4 H% | g5 S" m& u# [+ R! A- P
1 D1 V* |0 V# V m6 q4 k* o, H" g' s# u9 J" p9 [8 N
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
# d% z0 k" x& B. h/ T* S
2 K+ P9 R3 L8 f% p8 ?5 c* pA.浏览器的程序出问题了$ {+ N, T& x4 p
B.客户端的时区设置不正确/ S2 m3 ?! s* N) S$ n; K# l% U
C.用户的杀毒软件阻止了所有安全的cookie4 C3 r% K$ G- _1 U' [
D.浏览器被设置为阻止任何cookie
$ s! p4 u* Y* N1 vE.cookie里使用了非法的字符& s- L2 u+ j5 g; w( z2 D
, C6 v1 U8 ]6 }8 B% E
- | }+ j7 l( n1 Z5 o9 }14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
. ~+ d& _# S' R
3 L2 r R& D5 V. z& yA.1440秒后
5 ^3 \$ c. N; J# B; t, IB.在session.gc_maxlifetime设置的时间过了后8 @7 z/ {0 k5 K2 V) a
C.除非手动删除,否则永不过期) Q( _! l- l3 ], \
D.除非浏览器重启,否则永不过期7 u) t- c3 C0 D# ^/ ]$ h/ C- m$ f
E.以上都不对
4 `. k0 w" B# I' e+ W! D- _8 Y. i/ G! g3 a5 u
% W* d t Y! V# R* F1 d5 `15.哪个函数能把换行转换成HTML标签<br />?
$ c0 R8 X4 d; }0 C- {9 f: i2 X" H( C" O, I
答案:____________2 a6 C# f# i. t- `4 r
9 G, m) D; W# J O! V2 i. K% d
O/ j6 c: B) B+ V! Y# ]4 g2 G" G/ {$ F" q# c
答案速查# S2 t) I2 J) L6 G0 K
1:E4 }0 o* J# R [# c
2:setcookie/setrawcookie
4 t2 F' l; \, r3:B6 p+ M6 b% d1 ^) }: h
4:BD, Q, \. F, I' }" ]: w( v" [9 e
5:BD3 r {7 O* w4 l, _$ }3 y) u
6:D5 m' p9 A0 k7 ]' p7 B0 N
7:A, @ {9 t* r4 A n6 `
8:B' n5 \5 h6 }, Y1 Q5 c+ v
9:C
' O+ e: L" A# }1 V! b/ p10:B/ Y; H7 _* }; S: d$ {" p
11:E
8 K4 Z. }* H' ~" I3 T12:A
1 ^1 V; K* Q4 P9 D1 O z5 Z+ l13:BD
* o+ w. E# B# x# x14:B
' E( d0 B9 x) L4 P+ ^6 Y15:nl2br
2 [+ C/ F* p3 l3 ]- g
5 B3 O! I* }' k- r$ G
3 P( z* P, ^) K( ~- c* W0 H8 {
# `* v) G& [5 I' ^答案详解- x3 v' |. [- G) r0 O
* x X7 ^ _7 D1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
- d0 B9 f& y, j' c& r, Y: i/ y, j" H: z5 f0 ~* r0 Q+ }
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。, h+ K. |. k5 v9 ]7 r8 L9 l
. w9 P) H* I4 M9 ^
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。. c) {! F8 W0 v/ u
( V) H6 h# r& g3 n, t4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。1 W! o2 ~: D4 H# X
9 W$ A4 i! W9 A8 k2 Y/ m5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。+ W. W2 A, C. [0 F! d& E
" O' N! P0 @! p6 A6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。8 V' p) z) ~' |
$ | F, s5 g Z; G& {% F7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。 Y* C, v; K# M/ r( A
% a4 ?! C% p3 N: v8 B% W: ~- t+ X; T. i8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。& E% x) Y* f6 _* H _! {
0 s. f6 | E+ h$ A. U5 k# @9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。0 f; h3 n6 s3 ~: ?" }& ]; Y3 h
# H6 @, q+ g# B- _& k. k10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
9 k3 C/ @: N$ {8 _2 P! L0 ?" Q
& J: o; N# D* j0 ~& z" c `4 i11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
/ k# I/ F6 Q# l; G8 D! |: a2 ~$ {4 o* R- y
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
! F) Q- A# G6 \* H+ q2 o+ T+ ~1 Z3 ?2 y. H% u$ i" Z
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。# ^; \1 g" U/ z4 _( ]
( X$ Z# ^/ V) b2 l; _9 C3 Y$ h8 o
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
* h& c, g* K( G* O3 L7 k2 U" |5 x7 H7 ]+ {
15.函数nl2br能实现这个功能。 |
|