获得本站免费赞助空间请点这里
返回列表 发帖

[Zend权威认证试题讲解]第三章 Web开发中的PHP

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。0 c) c/ T2 w+ e
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
5 p. T2 I+ C4 [, W8 z( s; V一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。4 `: i" K- T" i7 H# V
! T, w0 h2 k' a0 z
; q6 r$ b' F# U, ~
问题/ ^$ X& ^# h8 R8 Z0 N8 x
1 s8 y$ B  P# W/ H
1.如何访问会话变量(session)?4 {+ p2 F, F& M& C

$ A1 T8 S- x- V" N9 ]; pA.通过$_GET; v! b* v/ J( w8 P9 U3 Q
B.通过$_POST% q8 g; i9 r9 n3 f. X5 i
C.通过$_REQUEST
& @7 a5 y! n, j. {D.通过全局变量' o. A; K. q$ @( y+ x. L
E.以上都不对3 I6 t: r8 \% f$ i# x! j

( ~1 m+ Z% y( H1 `, U" u- `5 L4 e/ p! K* e1 r1 A9 G4 ^
2.哪个函数能让服务器输出如下header?) d, ?: S8 n$ l$ F+ `. p) I
3 k* p6 y! ~: [8 ^( D- M. j6 }
set-Cookie: foo=bar;
. F1 a# s- e6 G: y0 B5 ?( ?0 @7 ], U
答案:_______________8 `& |" d1 z$ [- B( `2 T
1 g5 v& X9 v  ]( V/ f  C7 X

6 R7 @$ [* F2 N- T8 J5 l3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?5 p# _0 u$ |5 x1 R0 M3 k

2 J2 l) p  b. q$ ?+ I8 M1 yA.通过HTTP_REMOTE_COOKIE访问% {; J/ X, n) E
B.不可能
4 B1 }" j7 c7 e# ~4 JC.在调用setcookie()时设置一个不同的域名# v& a% x9 h! k% k" A  [/ e$ i
D.向浏览器发送额外的请求
$ f2 k, V( I" S. n4 S1 M, aE.使用Javascript,把cookie包含在URL中发送& ^4 d0 f) W7 i0 C

8 y0 `; T' u: O& ?( `' D2 F5 d) @1 R& |& L) X
4.index.php脚本如何访问表单元素email的值?(双选)
3 H- |/ K9 b. X2 Y$ Q
' E: t" s+ Y9 i+ R, S<form action="index.php" method="post">8 O* L  S2 I) f
<input type="text" name="email"/>
6 P9 ?0 Y8 v; S  m+ Y, J  P</form>7 w# |$ o( p! g- `0 G. t
  c3 _7 @0 \* u0 o: r
A.$_GET[‘email’]0 e# N$ j1 n6 S) Z' L4 s) v
B.$_POST[‘email’]$ j# v6 R0 L$ Z
C.$_SESSION[‘text’]
  e; x3 y/ q. [5 F, F/ H+ _. `* x3 G, AD.$_REQUEST[‘email’]
' o* \/ s* P2 s+ @, NE.$_POST[‘text’]8 Q6 R0 b% C6 F; T+ ~9 E0 R
0 k* S" C' g$ W! w5 \3 L3 T

$ H2 P) S% }: ?& @, P/ Z! r5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长7 }4 |6 E9 t' }1 K0 E& z, n7 G$ l
B.没有变化
% _8 @2 ?: w: @' UC.在浏览器上打印该字符串时,尖括号是可见的8 a- u; n- `0 B+ F' \. N
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
1 V7 J5 a' {; v  K  uE.由于调用了htmlentities(),字符串会被销毁
% U" @$ g% S  E/ z/ t8 e8 A% y
; ]2 u4 Q' h; u# N/ B) S5 ~/ @1 u2 `2 w, C. P
6.如果不给cookie设置过期时间会怎么样?# ~1 [6 Q5 w) o6 A( y
5 i3 L4 O/ Y( ~9 P9 A  Y
A.立刻过期1 E9 `: c8 k  z
B.永不过期
6 w/ ]$ h7 @, n5 [' ~7 |8 D4 a( p% TC.cookie无法设置
0 p) d+ r; F) k# lD.在浏览器会话结束时过期7 ~4 g7 _8 a! a, k- k8 F6 p7 C
E.只在脚本没有产生服务器端session的情况下过期! z# v  J4 J& v9 _6 X& c( X3 u+ ~  S$ m
- i7 ?: y, Z& a$ V
2 x* K2 B. C$ c& B" [3 a! P
7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?

  1. <form action="index.php" method="post">
  2. <input type="text" name="element[]">
  3. <input type="text" name="element[]">
  4. </form>
  5. <?php
  6. echo $_GET['element'];
  7. ?>
复制代码
A.什么都没有
5 I0 ?/ z" U, h8 x: JB.Array
9 d+ @9 h& |! K7 A; l0 z) H+ V7 ~C.一个提示9 ]5 {! t! [4 W; ?
D.phpgreat9 s) S8 r8 ]+ W" s
E.greatphp' T8 L: M* |/ e" {6 Z. d

8 c$ |( A2 m7 |1 p
  i/ }9 g- o8 \8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
& P8 J& E  g2 g/ w2 R4 {& \  v; k, Y9 l$ O, ?
A.这两个是明文传输,之后的信息加密传输
- A7 c5 d& e$ J6 G1 iB.加密传输, L# G5 V' k6 K4 \, I
C.URL明文传输,查询字串加密传输
+ w' l) r7 {* ]9 ^( iD.URL加密传输,查询字串明文传输) Q/ `3 O( o2 M) X+ e# R
E.为确保加密,查询字串将转换为header,夹在POST信息中传输" y3 d8 L5 S& \4 {7 I

6 h7 c, O, e, Y& ^: m, _& G1 p  Q0 \, v* c. L* ]) q! ^  H
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?" n$ f$ z1 a' Z' r
+ e0 F6 E5 [1 ~  Z7 I
A.它们组成一个数组,存储在超级全局变量数组中
5 ]$ q. p% u+ yB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中4 j. y8 ?; {4 Q/ |% |& \
C.第二个元素将覆盖第一个元素- O0 ?+ [* V; x8 m& P0 g
D.第二个元素将自动被重命名4 h8 k! i+ R. S! C7 W
E.PHP输出一个警告/ L2 D, J0 p- a! F; f
! j& ^& J; O  S

- S  a; p0 j! m10.如何把数组存储在cookie里?) i) d5 G( L, `' p# |
8 T& s- l2 k9 x9 B7 |0 i- y
A.给cookie名添加一对方括号[]
2 P. f1 C% K3 y) n8 oB.使用implode函数& }- u' ~0 ^+ a5 Z. s) G. d: |+ J
C.不可能,因为有容量限制& P2 l8 H8 l* S2 h7 t8 B; E
D.使用serialize函数! k9 {6 Y) b, b) u) }* {  }
E.给cookie名添加ARRAY关键词# Q3 ~2 N( |" z; {
( K3 T$ G; Q6 a8 S

6 X' C0 Y- @7 ?1 b" g11.以下脚本输出什么?

  1. <?php
  2. ob_start();
  3. for ($i = 0; $i < 10; $i++) {
  4.         echo $i;
  5. }
  6. $output = ob_get_contents();
  7. ob_end_clean();
  8. echo $ouput;
  9. ?>
复制代码
A.12345678910- O' Z+ w3 o% m0 d
B.1234567890
% ^* K7 E6 ?" LC.0123456789
& T  G8 ?( w6 O6 B/ k, q# SD.什么都没有4 r4 j* D9 w- t+ U9 r( H
E.一个提示
6 i' b1 u: p+ C; \$ Y, \
: H: a8 B. _4 e. P; C/ q) T: L# H+ d& }+ A9 m+ X& s+ n
12.默认情况下,PHP把会话(session)数据存储在______里。
% k  ?, R- B  F, K2 o# f
- M8 Y1 f" v6 T6 U: _5 |A.文件系统
6 N! k5 T! X( l+ m, k3 Q$ |& vB.数据库
2 F5 h' C1 l. hC.虚拟内容1 |' t  Q$ j0 b, @9 D3 p* F% \
D.共享内存  V1 r8 o, u( l, M+ |& m+ @
E.以上都不是, ?  p( t( v8 P$ ]
9 l6 R- J2 F% e: S# ^, q# N6 ^  G4 s

, ]; y6 X6 b& [# Q. o9 ]% T1 k13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
- P: d# }5 T- L0 b* \" _
; d" J, M3 z2 M% j" p- D$ M- JA.浏览器的程序出问题了8 U! g# |& V. i. d
B.客户端的时区设置不正确1 E+ a9 N# Z1 Y
C.用户的杀毒软件阻止了所有安全的cookie
9 e7 Y; j" `+ S3 ^" |( t" u! ID.浏览器被设置为阻止任何cookie
; {" i( |" Z) f1 oE.cookie里使用了非法的字符
4 k6 h. f, t& O
+ G( s4 h- S% k# I# Z! \6 c
; q5 `5 |1 Q8 t( Q14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?! p+ d! G6 U% M( K& w

& K1 l/ a- p% @' D8 S  J- YA.1440秒后
9 \8 D/ E6 {/ ]/ d, i' V6 D  ]) UB.在session.gc_maxlifetime设置的时间过了后
* [' {5 v- m0 T: e% Z0 N" ^: K+ tC.除非手动删除,否则永不过期
- X# f  h2 v2 w' G' MD.除非浏览器重启,否则永不过期' U, E0 j8 t# H' S& D
E.以上都不对
+ z1 ~7 F8 @; G1 N/ T4 N+ m5 B* e$ ^" q/ [/ m" y8 a
2 ~. N7 [) h: ]$ K* Z
15.哪个函数能把换行转换成HTML标签<br />?
" V6 Y; ?+ x4 z9 t: Z. e% R7 O! z! v2 O+ v3 s3 v2 p* P
答案:____________8 b5 m! c! ~# S1 D+ J

# V$ g6 b+ n/ N7 h- M4 l
& i/ j# P3 j3 k& w3 S0 }4 }. a  Z2 ]1 z' v# v# k5 M9 C
答案速查3 p" s; l! u5 W% D2 k3 Y
1:E) _8 s$ J0 J( H8 J/ n
2:setcookie/setrawcookie0 S$ Q5 y2 ^; v( r% X2 w7 m
3:B) @2 b$ K, h' C" P/ t
4:BD! h0 q1 [+ I# V0 y& _  a* J
5:BD
: s8 ^8 ]0 y3 v. q+ A' S6:D) y. U) d: K" U) o
7:A
. `4 J* k' |  _5 n0 b% |8:B
. G; u% U/ U) e+ k7 t9:C
% T2 @9 A4 l0 z& v" X8 i5 h  @9 \1 w0 b10:B
. ?! \( I0 Y) G3 m1 Z1 z7 N7 L1 g11:E
5 W4 M) T- H6 P% n12:A
4 I$ x$ @0 A  v13:BD
: @$ z) S: ~8 u, r14:B
5 r! e% i, i' O7 |8 `0 {15:nl2br% ?* t- p, r( ~, F( |1 D4 V

% P9 K0 S' [3 j
: E! t: A& E  `2 ~
0 b6 ~1 q, F. t! v5 P答案详解' ^  V, M$ r9 M( v) ~4 @
9 H* N) Z/ g$ [" y
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。/ G+ ~' w- ^5 n6 L; G1 x

, P8 E8 t2 x8 E+ Q% L' g2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
6 o/ A+ C" n- M4 d2 r  K9 \4 n) B3 H. {& ?1 b/ v
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
# A! ]. w+ A6 K# q1 f8 @* u3 k, r! c
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。! j0 ^4 K2 Z, `( ?+ A
& A3 {* @) a" P$ ^) b* H
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。) q7 W% U, v4 }- X' o' C* r
. M" S; _3 y( W* @* {1 o: u- M7 K6 q" X
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。( i) N" \/ W! j$ S
7 j& }- G* b" t( y  B+ K6 V
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
, F! V! _! b5 i- J6 C, I! C+ y5 x) S2 @0 M
8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。0 ~4 c0 S% \9 B/ r" v
* z0 ~+ l; ^; ]5 `) p# \7 q
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。9 @2 V  T  r) T0 D4 B# ~

. \; B$ Y' f' Q10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
# i  s% b) S. M7 I, D& g7 \; Y
( F4 \4 k4 R  [) Y" P( G11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。8 w% ~* U% n# |7 h
" z8 t1 c/ {8 e; h8 m
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。. i: T# }+ u! h( f* e

; u0 Z. h) r) {1 h* x5 j13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
/ C$ f- x) D' @3 d( B5 o( N! p* O  r4 v! K: @) c5 ?
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
' v/ K& W6 X0 B  n/ ^6 b* G$ E7 J* r2 s9 w4 e/ ]/ y
15.函数nl2br能实现这个功能。

返回列表
【捌玖网络】已经运行: