  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
1 r8 u% l* m0 r4 v$ o与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
5 E3 q, m% ]- i一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
" y+ Z4 K4 A1 p9 G
, `; M/ C1 K4 @; V7 P ~6 S7 c$ C/ |- y! U) v" C$ Z
问题
; c* q' _0 c! G7 \2 h0 t% ?) x$ h6 l; D0 B0 G- R9 v2 R
1.如何访问会话变量(session)?
& d8 N$ h% t: ~' x, r8 U# U( m- ~7 h- m; I% F
A.通过$_GET9 C1 \3 I k# ^ E. V4 O, t
B.通过$_POST
: v7 M; r6 E) i" A6 b c) rC.通过$_REQUEST
2 O" H1 t4 G+ m/ ]# dD.通过全局变量
4 w1 A1 i: w* d* R7 a. wE.以上都不对
% S% C' R' F8 u6 w0 T% R5 [% a L; k D+ B9 G9 I) P5 n
3 d2 W3 \8 i6 k& P: y' O9 g
2.哪个函数能让服务器输出如下header?
( }# E0 {+ {! C2 S' O* _2 X, L4 `6 V8 S3 r$ K- j5 D/ N
set-Cookie: foo=bar;" q% }1 D3 B7 T( [& F
( e. p4 f) l9 X8 u2 G
答案:_______________
) q( W) l2 }% B6 ~6 K
. L* k- X3 b! `7 R( f0 z/ t5 N' w' n. e7 h% g
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
7 \- v; e+ l$ o' _2 R$ D& `" M/ B* e' U1 _
A.通过HTTP_REMOTE_COOKIE访问2 ^7 n6 d8 p& Q C. g; a* @7 L3 G9 n& w2 k
B.不可能! l/ z! ~( v5 \
C.在调用setcookie()时设置一个不同的域名
5 X# n+ x& j) S& w* pD.向浏览器发送额外的请求) i( C d# L3 u' d1 m, i
E.使用Javascript,把cookie包含在URL中发送
3 l. p5 G; e! w% w: `# d) y: @- n# y. ~- V! X+ n
3 h; i' a# h7 _4.index.php脚本如何访问表单元素email的值?(双选)
& m2 f9 P }1 a: m. |9 ~+ Q; o- I" {
<form action="index.php" method="post">/ ?: ]4 t9 a/ x: K" b# g
<input type="text" name="email"/>% o/ t& A$ a3 J9 W) G0 y/ }
</form>8 \! `7 s" f8 Z4 v% v6 e7 p
# s) V9 D3 W2 ?* p# U# |7 `
A.$_GET[‘email’]1 M; w7 O9 T2 x6 z/ r
B.$_POST[‘email’]2 f5 X0 Q6 v( O7 e4 p5 x
C.$_SESSION[‘text’]
8 Y# p' T2 K/ U" w% p* jD.$_REQUEST[‘email’]" R# Z- Z+ N A6 y& }. f3 `
E.$_POST[‘text’]- }- q. J" _ o( A' V4 e" V
' t. c$ d# U# ^1 C0 X
& t, K% y( f$ C# _5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长+ ]- W# `+ F7 v7 k- B
B.没有变化! r! `/ ?: [5 O7 t" |' }
C.在浏览器上打印该字符串时,尖括号是可见的
4 ^: ^, j1 e! c3 hD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
1 T4 [% S L9 sE.由于调用了htmlentities(),字符串会被销毁
0 P+ p# c1 @( @: E8 q4 W$ `
9 Q/ V! K; t4 W9 P0 A Q& A7 R- p4 O% `, W/ K: z& ^/ p/ h% E- Q
6.如果不给cookie设置过期时间会怎么样?0 v# X. j8 r6 V! |3 K
8 V* ^. V u4 H2 iA.立刻过期- T$ t& a8 J1 U. X
B.永不过期 D& j7 w W, B0 q$ }$ U! R
C.cookie无法设置
; m' I4 f5 o. k6 kD.在浏览器会话结束时过期
2 b9 E8 m* R7 t2 {9 Q4 hE.只在脚本没有产生服务器端session的情况下过期
& l8 v6 t4 u3 Q- F5 i% u# R4 I$ Q6 x- f
/ p! I. b; x0 B y7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有* |$ a7 m7 S ?- R8 [8 \
B.Array
$ j' j( ^; k! |# i* z; oC.一个提示- H8 z: @) x2 C0 T
D.phpgreat
7 d4 [, K, n; A5 v" m# BE.greatphp9 @& c: b/ f/ B0 {
2 Q' w# a2 P/ G9 h; L
+ ^6 s. j; [& a( H8 P6 m) V6 o+ E6 U
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?7 e, w/ y9 Q" e' ~0 Y
1 {7 t G7 r% E" X5 Z$ y( Z. zA.这两个是明文传输,之后的信息加密传输
, _+ Y. d4 v7 b# KB.加密传输
. @* u. s3 k5 K" n; s2 LC.URL明文传输,查询字串加密传输- e# J. T$ e. D) l1 v- S+ m/ Y
D.URL加密传输,查询字串明文传输
! j3 ?4 D1 N% g0 _E.为确保加密,查询字串将转换为header,夹在POST信息中传输5 O# Q" p( `- s7 M2 t' y# ^/ |
4 d2 [$ [/ J6 ~5 R* `' x. Q& r( T
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
+ X* e* U \; c, Z
; o4 J( B! E5 Y. b! R0 u0 I- rA.它们组成一个数组,存储在超级全局变量数组中
0 g: b R w" k) _B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
5 _' f- \+ D; A5 F% kC.第二个元素将覆盖第一个元素: _: A+ L. S! L" o+ s2 N4 ? R! {
D.第二个元素将自动被重命名1 t8 u0 O; l9 N/ v( p
E.PHP输出一个警告
5 O/ H3 e. s8 @, ~
" G3 f- b$ L2 G! w% V3 C+ x+ E) x" F$ L
10.如何把数组存储在cookie里?
+ G4 {# t1 _) O7 q8 z! Y3 e2 `% J: g9 D2 ]
A.给cookie名添加一对方括号[]4 m$ J6 E6 |; W
B.使用implode函数
! L. ^: P) \. d7 D( @8 }! ` M. \7 lC.不可能,因为有容量限制- F K* ^& p3 S2 _- o' A
D.使用serialize函数0 k1 L) P3 }1 Y
E.给cookie名添加ARRAY关键词0 C) N4 J6 M8 D
- t" z% u" ]: B1 I) P1 v' H: i& n" Z. l
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
; `$ R1 c; x' g$ OB.1234567890. ^! ~& r0 Y7 Q; Q. `# Z# ^* _
C.0123456789
0 B0 q8 A5 }, k; n8 eD.什么都没有
* G$ g# J: b) X# B8 u( T8 xE.一个提示
! Z& c! T+ ?6 R K. T9 s( t8 N( a, G. X* M8 n# p
+ {/ k+ t% e% n8 j12.默认情况下,PHP把会话(session)数据存储在______里。
. F! T# [: H* l' m8 x$ i+ }! L* P C& i; Y8 Z
A.文件系统
# F4 ^; Z0 v0 PB.数据库! F( R. \. H+ E+ p( _. ~
C.虚拟内容
4 l6 {) R6 v) R6 k, \4 g& y3 dD.共享内存 U/ x' ~5 Y8 _- X" \
E.以上都不是
. v4 U1 F9 I7 U% ]7 x0 N6 A3 |4 B' U) f2 O. g5 f, N1 y$ i% F
) p ~ ~. R8 [/ Z) ?$ g$ d! v13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
# N7 U/ K) z4 P' n' l+ ]
* W. ~6 Y `; `" i g* pA.浏览器的程序出问题了
2 e T6 L+ O) D% v* T8 uB.客户端的时区设置不正确
; ?: q0 P* q' T2 C+ sC.用户的杀毒软件阻止了所有安全的cookie
4 @# _% V: b7 FD.浏览器被设置为阻止任何cookie3 N" z6 Q! B) m$ u' T# E
E.cookie里使用了非法的字符0 w- ~( H/ p i/ ]2 h
3 C0 P0 { q) h) R* I( |" u4 Y1 k* ~! s( k( k* s9 e
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?! N/ n1 @( S, s
# ]+ D% g" T( B3 k6 _) BA.1440秒后
* v6 t9 t& @) QB.在session.gc_maxlifetime设置的时间过了后
! J; D9 D# W/ m2 R+ b wC.除非手动删除,否则永不过期6 Y* Z. c. p8 _- T' L5 j
D.除非浏览器重启,否则永不过期) X1 g7 J: F- P0 W' i9 a
E.以上都不对: `% w+ I5 f6 R- R
. c! y) d8 l# ^" L: G# X9 X2 E* ]
' T# {, C) C" j15.哪个函数能把换行转换成HTML标签<br />?7 ?1 y0 W5 _. P$ h( K* J9 k" z
' @1 s; {9 h3 {5 E" J1 ]答案:____________( A5 y6 R/ ~) Y7 N0 _3 Q
# z2 L/ b" e7 N8 H6 e
) ?5 \: Q- |& F" i, H# a
8 |; e# _8 o0 O# p答案速查9 f& N/ M9 m8 X t
1:E# h* u. A7 q* g; ]
2:setcookie/setrawcookie
L9 m3 O& f ^, `4 O$ r& u7 i3:B
/ Z8 g( B: T, }8 X" s, \0 [4:BD
2 }- y4 ~+ F# u: x5:BD( x0 A5 r& L' Y- p( h
6:D. S$ Y: ^& F3 j8 _
7:A% \" F' H: e/ f% t- K; G9 k! m
8:B* y5 \3 M" z0 K, ~. }9 u( ^
9:C
3 V; ~# @- N6 i e J10:B
% U3 Y, k: g2 v9 s$ M11:E
+ }0 T' [ ?2 r12:A k6 t( d4 U: M2 [9 C+ F- c" V2 n5 N+ T3 N
13:BD
2 u, U' k, ~) c& f+ d) [2 B14:B
' J+ ?4 E" H! B& S4 j' @15:nl2br# C# I& a( l1 |' V: @. O4 D, _
# Q% J+ v8 ]$ I, y$ v
$ ~" q i8 F) @' p1 W
7 m6 C, [" _( c$ U# H: e答案详解: g j3 \) j0 l7 o5 O; U! G
, L* r* K# x" X+ s( g' w; P* t4 R1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。) U4 k* q* G# Q
' o* M6 f) ~+ M
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
# V8 y" A6 T" Y7 C5 l8 a' X7 \) L5 m1 M% w( d9 [7 S/ u
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
% d# A2 f R0 C9 a
9 T' Y! I) y+ w/ t4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
! r! [2 | \* K( z4 A% p4 Z* c# j& m* L+ U# J( [
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。; @' |4 w5 j* A% @9 A2 b
- s0 D* Y1 q# J) z& R! V6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
0 q& M, ^9 c- `# a3 m3 A7 [" p
+ z; j: f) r6 E8 J5 D; q7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
0 I* N! f8 b" F! J! z6 `- u9 ?( k
! U+ }) c- M( m+ f( M2 Q8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。# r, m1 u3 O% J3 [
2 k% C, t. f) T0 F; s2 A6 n# ^
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。( P1 Z5 ]! z8 ~
; n7 e0 c" v3 {& r; N
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
# j- \- X* z; k e. @2 z9 I$ P
. R9 f/ I$ _! D8 k11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。; d) Z. _% y/ c/ g9 I$ y) [: v
6 J# k) F& k: L# W: u( A
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
4 }* r" i% I9 V1 s% y7 P4 h% ~7 z- D. T' a$ H
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
3 A5 }" w7 Y' F+ {' F2 X# P
; v7 N0 O# Q J1 v14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。2 t2 K$ z7 z, {( F) {
9 D E7 z/ c; K) v15.函数nl2br能实现这个功能。 |
|