|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14353
- 金币
- 2462
- 威望
- 1647
- 贡献
- 1410
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
" ? B$ I5 U# I3 u3 w与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
* O5 e* M9 e! T$ o一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。: g c0 i; P1 q, C+ f; e( c
7 H4 Y; r2 q6 m3 R0 g3 z" e6 @6 \: P+ q# K0 @1 ~( F
问题3 ^: ]1 z3 z! g% L
' u9 ~; K8 R% R2 K5 X$ m1.如何访问会话变量(session)?/ r4 f7 g: d6 g) a. r9 `
% S1 j+ V9 q a5 }
A.通过$_GET
4 ~/ A) l* E3 f7 pB.通过$_POST2 x8 f+ E5 Y- L4 m; R9 f8 `
C.通过$_REQUEST
3 ^1 }+ |( k4 k# [ ZD.通过全局变量# W I$ n- {1 R4 g
E.以上都不对* g' d0 x7 _9 U! ~, j$ _
" Y+ g1 D% [/ |2 U3 l4 X9 y, f7 C2 R, Y7 q
2.哪个函数能让服务器输出如下header?* C) w" B+ @) A
: G6 z8 k r" lset-Cookie: foo=bar;
5 |8 N# A7 {) b! j$ D8 R- w* U" E4 t9 M4 S! P& U
答案:_______________
6 Q# J% q, q: z* B6 v5 B; D3 g$ u5 p" T. E/ I" u4 M/ c
( d0 {" ]2 K! z8 z9 m, T* X8 H9 ~ z2 I t
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- f/ L4 S. c, L
2 t& w2 q* _* r8 g8 I& FA.通过HTTP_REMOTE_COOKIE访问1 \# n2 {8 C( r3 s$ Z
B.不可能9 W) g2 T6 Q8 r J& m
C.在调用setcookie()时设置一个不同的域名( L: b6 k( r: u% e! }1 e2 o2 S
D.向浏览器发送额外的请求
4 b. Y R; r0 `9 NE.使用Javascript,把cookie包含在URL中发送
: w2 j* D( i- M1 \$ |7 r
% j8 ^4 f' b1 L/ D9 r/ c& w7 W: o4 q4 c- v) i( I2 h
4.index.php脚本如何访问表单元素email的值?(双选)
+ k4 ^7 \3 c4 e# g( d0 n$ |3 {
: P/ D6 c! H( }" M<form action="index.php" method="post">
9 U, V/ n( h' X<input type="text" name="email"/>- j1 U+ h% g! [' Z, T
</form>( G" `1 d% s ^
$ x# x# O- A; ?+ I: oA.$_GET[‘email’]) }8 N& ?5 } `. D7 V) J! t
B.$_POST[‘email’]
1 W2 p, R7 `9 {: ]! p$ {C.$_SESSION[‘text’]
/ d% }, C4 N7 L6 S, uD.$_REQUEST[‘email’]8 ^! W: D3 M5 y& z
E.$_POST[‘text’]2 B3 o& o+ J: T) _
9 b4 c1 K( B& `% F
0 i# [$ g& F, p, V9 _5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长
V5 q T2 ?: T! rB.没有变化
( x* T' w) s+ I) \( o; X% OC.在浏览器上打印该字符串时,尖括号是可见的
5 j& `! N! B0 K4 H! Z+ k1 WD.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
2 ^. ?! p; p9 D# k8 pE.由于调用了htmlentities(),字符串会被销毁8 G/ `0 ?* l3 s3 c ~
" u3 m" e; x& _% S
5 h$ j( Q# R2 S$ k4 s: r4 b! S
6.如果不给cookie设置过期时间会怎么样?7 h6 |: s& R; z3 T, K' E3 l; \! F
# R& S* r7 C3 z3 P* l ?7 mA.立刻过期
, s/ y( g- t9 B# \$ I" p1 p4 j2 gB.永不过期) |" ?) h( s0 V. a& a
C.cookie无法设置' `/ M4 o7 @: q+ p5 I
D.在浏览器会话结束时过期
v# R: o! M& L9 `1 q% oE.只在脚本没有产生服务器端session的情况下过期
& E2 T. W; _5 a- p" v4 J% Z0 `; k8 Y4 E! H2 i
" d" _7 t& e. @; N2 g! S7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有" {4 s. P* m n1 ~- S. @' F
B.Array
- Z4 n; O; z, w: p& |C.一个提示
9 m: F9 B6 t& K4 g& v0 w6 _0 JD.phpgreat8 l# h. n0 W/ I& f3 X/ X8 _
E.greatphp4 s! P5 _$ Z: f
" {4 S% D- O& X
- w( @+ w+ |2 U- Q8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?( I+ B+ T5 C" e1 J! ]
( `9 _0 Y- g1 E2 c, xA.这两个是明文传输,之后的信息加密传输7 a* o3 z; ]6 ?5 j3 V, g1 A
B.加密传输 O# v: T5 s$ P& ^0 G, K2 F" p; V
C.URL明文传输,查询字串加密传输
. b5 I& ?( z0 M3 `. p4 u bD.URL加密传输,查询字串明文传输: r: D4 k. I$ h: q
E.为确保加密,查询字串将转换为header,夹在POST信息中传输) j: k# o6 B9 ^, l5 c8 a3 c+ V
& C* H) a' D: q1 Y, U% i: w& t! O
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?1 N, b6 ]( H! f8 }4 a `
; S9 k- u3 m% k0 u) W
A.它们组成一个数组,存储在超级全局变量数组中
2 s7 \% X" Y5 F, A% O" QB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
% u- R8 }* E+ [+ D3 hC.第二个元素将覆盖第一个元素" ]$ e! p8 q, y1 y7 {
D.第二个元素将自动被重命名
3 i# |9 _& x" ?0 g6 Y$ hE.PHP输出一个警告& s* R) W7 q1 b) ~2 E+ ]
$ T5 `; a/ C2 P: o) e! N* _# X7 b% [: S2 Y7 a# @3 c
10.如何把数组存储在cookie里?3 p( B; P4 J3 Y+ O
2 t2 F; H$ m" a7 f& d' E, ?: N( q0 TA.给cookie名添加一对方括号[]
5 c1 c9 r8 O, z" yB.使用implode函数# D' H8 ]( ]" s; U' a
C.不可能,因为有容量限制# l) x6 P1 t" ~. E `( b) C
D.使用serialize函数
8 j9 z" o% ~8 d* }" U! E, PE.给cookie名添加ARRAY关键词$ o$ c$ `. `: V) @2 g1 p' _- q
) Y! u) U: t5 V6 `
. t" ^& q9 M) P1 l( e11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.12345678910
% Y( K7 c& M: c: w8 O# b* oB.1234567890& E( `: H5 z% r8 B0 w
C.0123456789
) \& i6 J4 |+ H! e. |6 KD.什么都没有, \* f2 M7 r8 I2 A' E3 G
E.一个提示/ T9 Q9 q3 {+ [/ N8 J! @
, V/ Q6 T% B, ]
* W& n* Q/ u1 S2 s" ?6 N/ ?12.默认情况下,PHP把会话(session)数据存储在______里。
. {$ b* H4 `' h+ X Z. K) Y- M5 ~3 _
A.文件系统 I7 @- q3 ~3 d! _. u8 q
B.数据库# N. U3 D4 E0 R1 |: m
C.虚拟内容
4 h7 I/ |8 K4 H/ C3 W" FD.共享内存1 y7 ^2 g+ j4 T/ _, _! @
E.以上都不是9 }! q N1 |: Y; H: m
r( c, |5 i" D
. ?: v# @. d- ?$ D13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
! X& C. _( m+ m7 J$ B# i) C& h, @2 r4 V% B8 X) W9 B% t
A.浏览器的程序出问题了* M7 Z3 F' i0 C, V: }: p/ {
B.客户端的时区设置不正确
, c( }! Q4 e8 p" Z& uC.用户的杀毒软件阻止了所有安全的cookie, e$ {* G# t9 W `- O5 k' O+ X0 P
D.浏览器被设置为阻止任何cookie) y/ b1 H5 U9 P& l: m: W
E.cookie里使用了非法的字符# k; D) V& F! C1 `5 Q P* c- U
: ?, }! b7 N* [" V6 U- h8 `: y+ `2 [: p- p$ f- x
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
- w! \3 V8 X0 l5 P
2 _. `* Z- m8 w. U6 nA.1440秒后
& x# K+ A9 R5 e Z1 xB.在session.gc_maxlifetime设置的时间过了后1 n. ]- Q1 T8 X
C.除非手动删除,否则永不过期5 ]* N) K4 _; _3 L( E
D.除非浏览器重启,否则永不过期7 ` F% P, b( c, M
E.以上都不对' j* r( o, p/ b
8 q9 v, b6 c( }4 ^5 {* j& M
7 I3 H3 ]! v# h# h% z15.哪个函数能把换行转换成HTML标签<br />?
9 ^4 n* \, j& ]* u3 R& B& Z
& r8 C7 o' }! C ~6 _1 R! d) g答案:____________: l0 v& _- ? \* y% j# o% C
% w R7 s! q0 b( ?% `3 g, W! e% Z: t3 r$ b1 T& n7 Q
/ O, b4 n/ b* x5 D ]答案速查 K! I% w4 s8 U6 n; }9 [
1:E
" A- O. e8 M7 s) r/ A2:setcookie/setrawcookie3 ?" ^6 [- F+ i4 q& `+ a
3:B
' O" H& \* R( f4:BD
" r# ?' C- k9 X {5:BD
( k2 g& U$ }% t9 g: d$ h0 o6:D- H; G( a& |' b) O3 t1 ?
7:A
8 A& D" a7 Z2 |, q+ L8:B& @; k& J3 d& k5 i- }
9:C
, ?2 E% R5 ]' |9 I. X3 }) T/ e* v* E10:B
. H7 U u! U) L8 L0 v" W% }+ s11:E
9 N, Y) `' q$ q' G$ `12:A
2 W* n. `6 w% G, J2 R3 |9 Q% J13:BD1 B* z) i& Z' w6 l* V6 P
14:B
9 b4 H c X( v# M: F1 u15:nl2br* v7 F1 K6 _, J2 I6 E
* [, F' {, t7 ~+ H
; ^# B$ {/ m; N/ i( a" Z0 V0 n; R' K/ g. } b/ g/ B! x( u, w6 t- r; p v5 K
答案详解" Y# r- b. V. p1 ^% u5 I' a
& z0 G+ ?- _% I' }1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
2 I# o* _; }4 o4 r6 x+ L
4 _$ g# b9 n" s: J+ o2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
/ ^0 D K. }6 D$ |1 t
4 y( A4 E; ~: T2 K. B% B3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。. k4 d" Q% q: W0 V$ H
. V5 H; I& a0 R2 y) L4 Z. o; d4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。" S/ O% b) [2 K
' |$ b h V6 W5 i5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。4 `3 g/ D+ d3 ^8 b T8 u
6 e- x8 z& `; Q: @5 B6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
$ Y+ U' R/ t: e7 n( c
7 Y' Z5 Q- }7 n: _4 k7 C7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。+ f- F: i2 H' y' r9 Z& J; s
! H/ L6 Z% o. J
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。9 q/ ~# x- k$ C: U
6 O% z4 b- r: ]7 S2 s
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。3 W- R: D( F- m R
0 e: F6 r" B2 p5 ~& v10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。. u# i; s6 S* _* b. c, R) }# Q
6 y0 {) k+ G/ O7 V p. c11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。2 W8 j' \" q" W& N/ S& H' {1 N
: @! j$ p8 V6 \/ o! h$ t6 H12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
) e2 K) P+ G" U! U( X0 b9 D2 g
- q) |/ k @5 K7 W; x3 F13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
- q. }8 G* E. |; z6 n, T' T
) E, G* R( s: I14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
m9 z( t* R: d7 [; G2 j1 A
0 l& V1 q: l1 G% m+ _' H15.函数nl2br能实现这个功能。 |
|