|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14391
- 金币
- 2481
- 威望
- 1647
- 贡献
- 1429
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
Z+ i1 Z: V( {/ _; |* K* m, I与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
' ?( }% f$ b. J; P) w ^一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
2 b7 k1 \" P( ~1 u- A2 {9 L' \2 L% k; d2 V! b. p( y* D
/ \4 c# g6 a( r3 B问题
; j+ L6 s4 l* l( {2 r% V
' M+ n6 L; \- x1.如何访问会话变量(session)?, Q( r% m" [7 W7 C
3 v$ m" E' v- N, k nA.通过$_GET+ }) Q$ d g D: w; G; y+ _0 ~- O
B.通过$_POST' L# s+ ]' Q* K4 M$ T* Q8 O. l. m
C.通过$_REQUEST' R3 F7 [& w; f/ A* g- k6 R2 e
D.通过全局变量! D: D4 z1 Y3 A0 X& `% Q
E.以上都不对
4 C3 X6 a, Q4 c5 M" n
2 }4 V! T" W& Q
$ T, m; P0 \* _; S5 J: T* m2.哪个函数能让服务器输出如下header?
, y1 }3 q% q; p
; }+ T+ h& D% ^% P0 @set-Cookie: foo=bar;8 I3 b5 B7 r8 W c& \# ?/ N, s2 F! x
- O S) ]) N: W答案:_______________, Z3 o$ ~; N' w
0 L5 A% Z! q; f, o9 O
3 s" S6 |" j+ y {, h7 O- j9 x
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- ~2 \% ?2 s5 t/ Q) r& v# ^8 S& n! s: V1 R# T! K5 \
A.通过HTTP_REMOTE_COOKIE访问* \3 w1 | ]4 l
B.不可能6 }& u" E% O6 k8 K5 P: i. v
C.在调用setcookie()时设置一个不同的域名+ P: i9 l/ q$ d+ y
D.向浏览器发送额外的请求& V7 e- A' z/ j [" y) [: E3 Z% I- ~
E.使用Javascript,把cookie包含在URL中发送" |) c9 K$ o' m. @9 a/ U
; s2 Z" {* Z" M: i6 B% G
! l% {" o2 t$ y4.index.php脚本如何访问表单元素email的值?(双选)
( C8 A+ A ]7 \/ Q
" h i' p7 K; ~6 h" {* p6 H<form action="index.php" method="post">
# C( Y& @ R* A3 [' ]<input type="text" name="email"/>+ t/ M! I s1 x$ e' H; P6 j8 _/ K
</form>1 N8 R$ C' w, M+ q3 Q, }, O* ^
2 N- k; q2 p6 z: V
A.$_GET[‘email’]
2 B# e5 S3 N$ |3 Z2 M! h/ S; [) D: PB.$_POST[‘email’]/ N& c1 Q/ l* W) P
C.$_SESSION[‘text’]9 u; W' x0 o* r2 r1 v' ?5 y
D.$_REQUEST[‘email’]' {4 q0 ]( e+ z4 c: \/ S
E.$_POST[‘text’]4 w$ T! Z& a3 ]6 O! O4 T. k
' }- u A4 n& \ S( d: c& i/ P- X; N1 n5 K, A
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
7 o- u' L" K7 k' p# R0 RB.没有变化
: V1 {& U) G3 P! n1 WC.在浏览器上打印该字符串时,尖括号是可见的+ W# ]* Z/ p k
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见5 l; ]* l4 q: o6 L4 V9 D! V
E.由于调用了htmlentities(),字符串会被销毁
8 ?. P A: \4 n3 i4 X' X2 t! e8 x+ d6 p7 n7 D& t) R
: B9 [+ a X1 u5 U: Q2 h* w+ W6.如果不给cookie设置过期时间会怎么样?6 K" Q$ l+ L( m
" g$ H. q0 V9 I0 g. H& B* T
A.立刻过期0 \% n, `/ Y: \/ d/ j; U: i1 h
B.永不过期# z, s! d: |9 i' s* c- p
C.cookie无法设置& F" A5 R4 G; b% w0 S
D.在浏览器会话结束时过期
* a5 B! N5 b* s/ n& `8 t. A+ mE.只在脚本没有产生服务器端session的情况下过期
i* p/ o I* h8 D' ?
- b1 w+ I, W: p4 l2 u8 u4 |; P) S4 q. j
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.什么都没有
/ G# |. o) f; O7 r" AB.Array
- t: r8 u- `8 H/ z zC.一个提示) g; J- K8 r9 g% w9 y! Q
D.phpgreat. B7 U( }: A! d' F
E.greatphp
5 d( S( }. ]# o$ \" q
. v3 O ?. H9 ~( `# Z8 I3 ~( x- i+ S2 X# F
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
' ]0 h) i8 L0 ^3 j0 W- }3 _! m- C5 o( ^% J# c
A.这两个是明文传输,之后的信息加密传输
- D2 b7 \7 n+ V0 B3 RB.加密传输
4 U; o b/ l, D z2 c8 x9 a* xC.URL明文传输,查询字串加密传输9 c- m, Z; v4 o( u; W+ l+ ]& p
D.URL加密传输,查询字串明文传输$ @, M: T1 x% b: g7 z( O8 H
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
: u) `1 [0 ^' c e: m4 g
2 P" Z0 A- T& n3 Z8 S' l% ~/ L6 s! l* B
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?! o L: x! h& K% g2 S: W
?+ C' ^1 h) B$ H3 M$ IA.它们组成一个数组,存储在超级全局变量数组中
, ], T) _- j/ D8 P Q% YB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
0 x/ r0 \7 ~4 UC.第二个元素将覆盖第一个元素4 l0 L- v- d) v3 }% B
D.第二个元素将自动被重命名
8 [/ @6 {0 Y w3 k$ {) RE.PHP输出一个警告
: E: R: D2 t+ Y5 u6 l n, N9 i$ @. x; r9 e+ R# V! E, Z1 A
1 j) a, k, M) `& Y5 @1 C1 l8 z
10.如何把数组存储在cookie里?
5 T$ N- n% E5 Y' k0 j! j( l; N" O4 n; m
A.给cookie名添加一对方括号[]: T8 D" _) N- w/ [; t
B.使用implode函数
8 B; v/ C5 I) b0 @9 aC.不可能,因为有容量限制. e g5 O" L6 \2 b* ~
D.使用serialize函数
- Z( l9 H5 }4 [( ]! WE.给cookie名添加ARRAY关键词5 p6 ?4 ?3 T$ G* |
9 q/ s. {9 G* o! E0 ]
; L3 ~$ J& y5 H- g; f* X# y
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789106 A m( m( @6 P2 _, @& T
B.1234567890; [: n- J2 Z( C* N5 R
C.0123456789: b/ { f4 k7 S/ k2 [6 b
D.什么都没有# b4 U( d- g0 W
E.一个提示5 u, z8 I+ p- Z$ u
( j) Y8 M5 m' M9 A f
8 P- F5 J3 q1 e% ]* M
12.默认情况下,PHP把会话(session)数据存储在______里。
2 I2 `% Q, S# N8 \% I- J9 @! N, t
- |( N2 `) l, ?/ B! w1 {% j/ VA.文件系统: \$ d' Y% q" i g
B.数据库
# X. v( c! _1 \8 Y& SC.虚拟内容
8 I! v5 |5 i# c$ p" m. `D.共享内存; V& R$ f0 H$ t' {1 }
E.以上都不是
' w8 K. H9 v8 m( t8 `: i" o, P8 @
" Y6 _+ L% A: ?5 O
# t7 |- l/ Y, E, ^* D% l1 E1 Y13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)2 ?: ~1 O c. u' Y9 F4 f! _
' V3 s/ o) }2 ~! z. \& T5 O; u5 @A.浏览器的程序出问题了1 ~ l. l9 W: l: D& c
B.客户端的时区设置不正确0 i( Y0 @( c8 \* O/ b5 X
C.用户的杀毒软件阻止了所有安全的cookie
, \& J1 o8 @, m9 E- H8 m+ a3 SD.浏览器被设置为阻止任何cookie
$ T3 K$ y( I Q- P( uE.cookie里使用了非法的字符
8 r1 b$ B2 D! ~, v8 e) V
# C& [$ v, R: W& m( E7 X6 D7 a
# \0 j% ~; f$ C9 G/ c) m14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?' q/ q) M H% P: j: x# p
0 J* P1 _+ B0 k% T: E. ?4 Q
A.1440秒后: P7 ]% C/ O, c" g
B.在session.gc_maxlifetime设置的时间过了后
/ J& b- o( i. o/ ^C.除非手动删除,否则永不过期
& H4 `& p. E9 J9 q* D9 A+ hD.除非浏览器重启,否则永不过期/ w4 x3 [3 l+ L$ ` L
E.以上都不对6 z2 L: o2 D$ w) V3 d' e0 |
9 _$ `1 P1 I; Z0 ^$ E* Y/ J
, ?0 ^6 }( k( s
15.哪个函数能把换行转换成HTML标签<br />?+ G/ G) `1 X& L
0 }' i6 f$ M, P
答案:____________
/ L/ d4 L8 ~0 Y6 E. Q/ y, Z; ? B+ H4 v" r# @2 l8 `% w
3 ?' J+ X1 a% m8 y2 B
* C7 S2 O$ ?% l; [6 D答案速查4 H3 Z7 K' P/ _1 G
1:E
4 o: _' d+ |1 U3 C4 @2:setcookie/setrawcookie
8 M& V/ \$ {. q7 s3:B
. T2 O) }& K+ j K, z4:BD& c& X$ g. {! h& @5 M
5:BD
5 ?6 B0 K0 ~1 A5 N% v6:D
1 ]! p+ O5 `% D* L; \7:A- S1 ]+ Y( {) s5 W1 w0 r2 h
8:B3 n. E- H4 T! q2 p
9:C: s4 ^7 g; M0 i" A4 \0 D: ^+ R
10:B
! S8 q" V% ^! \7 W) i11:E
0 V( r; e0 W. c \: x12:A
* U# Y! I# G( ?! z13:BD0 x8 W6 [4 q* l! O: H
14:B
U* V! m+ `8 t3 F4 V& `15:nl2br& M: _) |7 O% H3 l
1 g' T1 C1 I1 ~' o
8 e. \8 \& f* P8 c6 r5 P4 v, K
. i( a4 N0 Z7 M/ d答案详解/ q% ?3 ^) A9 V8 W) I4 g0 |
; f$ J0 m4 o1 q" H" a
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
0 Q; u9 d3 k2 t/ e7 R
& j; h# e3 E, @- n2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
3 A9 u, h7 v4 q' P# N% L4 U3 [$ z8 H f8 X
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。) G, Y- v- R2 E- V1 t9 R: H
9 m" l+ H7 f; t# K' d8 ?
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
2 A0 l3 M/ C" @ M" y7 s9 p* \7 J2 F
+ R1 E: L* I) _- K, r! c# ?0 c& W5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
' j9 \6 z' B5 P% H7 V" Y b2 b1 F* O6 n% v
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。5 d& ?6 C5 V4 e% H" l" x; r
+ z- ?2 p! s# e; T
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
/ c; ]- X: D7 F% P
: |& P! I' P+ p! N, i8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。! g2 |: n, ~+ \3 P/ n4 y
4 W8 R& O \8 g$ @" _' ?9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。* q) e0 R; h; d+ p |# d+ M
! U% [% w |) ]1 D
10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
# R6 h, I$ M! l+ x) Q. |2 \3 v$ l+ i% A
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。$ E: D+ r% _7 s; w/ D8 g; ?
, W# U! I4 I9 ~
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。, o* d% |$ r& I
9 o: }, {2 h' y, n5 \# Y0 V13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。' _, ^4 q% j/ E: h8 P" ^+ G
+ S6 T# y2 g' ~) B9 a, [, X3 I14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。& L( D. F7 e- _3 q+ x
' e2 ~, H3 O# _0 Z" j7 W15.函数nl2br能实现这个功能。 |
|