返回列表 发帖

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。/ b3 M$ x, |& a, E+ \
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。; ^% t1 x0 Y; L1 H
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
% @; e, |" ?! G
6 g" {+ S& ^% |) K
6 a" R. [& u0 X问题. i+ C* P# s4 m5 X  D: G7 t
0 m; U5 E% d" @1 r$ ]. s
1.如何访问会话变量(session)?7 K5 H1 w; W5 x1 `* K
" I+ u9 ~! ?2 h  F. W3 Y. m9 S6 t# J
A.通过$_GET
- w- ]- ^2 v' }( R+ a9 B+ @2 NB.通过$_POST
/ {( M4 i1 b) {0 a4 {C.通过$_REQUEST! \! ?8 v! s7 I
D.通过全局变量
( [0 `" g: N! B4 n+ cE.以上都不对! b! D6 g! |" J* D+ W8 ?% \4 O5 P

) s* L& X, o( ^; J5 a$ z, B2 E* C' p1 c) N8 m/ B" F' B) ~& N: v
2.哪个函数能让服务器输出如下header?
+ @5 b3 m: \, ^  i4 l  Y3 H2 {" K- R7 R- I2 ~
set-Cookie: foo=bar;1 C" {9 f. C4 ?5 i3 F# A
1 H1 Q0 E, D; F0 j. p, Y
答案:_______________- `& p0 U# H7 t3 ^

9 E) S4 I# r) H$ n4 T! X; C4 [
5 v! U' m; b2 B2 v3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?1 ~: ?4 \3 ?; f

6 j" x; u% L( y, e+ zA.通过HTTP_REMOTE_COOKIE访问
) x6 Z% s8 L% U% A' D$ q; VB.不可能
8 K' }7 e  H) u( X: tC.在调用setcookie()时设置一个不同的域名  z4 g3 ~/ s3 @, {2 y3 @
D.向浏览器发送额外的请求5 v, s" Z5 G, V2 R9 N, W
E.使用Javascript,把cookie包含在URL中发送; G4 t& e3 ~6 i9 N* p# d9 E* O
" |' R3 H7 \3 K2 \
8 l' ^, w/ ]# Q4 |6 k- H
4.index.php脚本如何访问表单元素email的值?(双选)/ y4 t- W: m6 Z# X% _2 {' `4 i) ]
% c/ E, s4 ~, {, k
<form action="index.php" method="post">
5 X2 U) k5 n$ J  d1 e<input type="text" name="email"/>3 r0 M0 m, k( _9 F$ R- Y
</form>2 Y$ M! f5 F8 @0 o- y

9 U3 r# s$ x& H) y8 i+ |A.$_GET[‘email’]
- V' @% H2 V" [& ~B.$_POST[‘email’]
. c' X5 n1 }# i( P: ^  l1 EC.$_SESSION[‘text’]
/ k+ B( |& U( m, ]) f$ ND.$_REQUEST[‘email’]
/ Q% {9 w' a. v: S1 D* j: aE.$_POST[‘text’]
, m- X* h, }6 N. U5 [* p7 d- ]2 Z0 |# Q2 ^2 X

; \3 g) d' }) [/ x- \/ ?0 l5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
5 W  j. T( H" `% t7 ~2 W' j+ _9 dB.没有变化- N- ]' W. z" R4 P7 g; F
C.在浏览器上打印该字符串时,尖括号是可见的
' |' k) _' B" Q" Q& i- b( [D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
+ o+ ^9 ?: n% x- zE.由于调用了htmlentities(),字符串会被销毁. i' h5 q5 a. I$ u- p5 e
2 g1 G! V! V  r/ m

- U) ~; G( |" Z* }7 k) Q6.如果不给cookie设置过期时间会怎么样?
) E7 s, s, w$ `3 L7 U6 r! L" _! Y$ O% e3 `# `( O' P! M
A.立刻过期
; r7 y9 R7 Q' `7 u% V5 RB.永不过期
. G1 n; S7 q- C% i  f. @. m3 xC.cookie无法设置
4 y# ?( r( f& K, a4 E  vD.在浏览器会话结束时过期
, p! j- L; f+ p- N6 a( @E.只在脚本没有产生服务器端session的情况下过期
. Q. S* i1 Y% c( M; ^+ R4 D8 i4 V7 ~
5 X- [; {6 [7 \: i0 u6 L  J
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.什么都没有
7 i1 V# K* d' ]2 g6 e. cB.Array
4 Z0 }2 P! ?6 Q4 s' y5 v% UC.一个提示9 m, m% V) V$ d. a- B
D.phpgreat% d  O4 d/ W4 u! P$ I: e
E.greatphp! y& m) R0 a) j! c2 M$ Y( V
1 A( `2 T7 v0 A

7 c, j+ C0 h# e3 g% c# _- x8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?: W9 |1 ?3 k) q

+ J+ t; Q9 p$ k- w3 SA.这两个是明文传输,之后的信息加密传输
$ ^+ v; c2 q% T; ?B.加密传输
+ p( }- y$ _/ C6 D/ Q& u' DC.URL明文传输,查询字串加密传输- Z/ r- T2 \& x9 G7 w5 N6 a0 `1 p
D.URL加密传输,查询字串明文传输
' j, H* X. q* f. SE.为确保加密,查询字串将转换为header,夹在POST信息中传输/ }; J: w' H2 S" ?6 |# X

$ c8 l/ G; h- G- L. F8 J
- d  y: ~6 F7 j# u: {9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
6 P1 K1 V, W; J" A7 W
+ |) @4 W. a( V0 M6 cA.它们组成一个数组,存储在超级全局变量数组中
; w( C! H0 q5 j  ]+ }( N% }9 SB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
+ g* N, I" v( F  L  H' }4 w0 s9 v7 DC.第二个元素将覆盖第一个元素: o' c7 A. h6 `0 `
D.第二个元素将自动被重命名$ z- K, e+ \% G$ e9 l
E.PHP输出一个警告- V$ T$ Y3 r: Y  T

  Y: o& o/ D, K1 `" m" G$ ^3 c8 ]' s- {4 k6 [* j0 \: C8 j0 s
10.如何把数组存储在cookie里?
# \0 f0 q% B" ]4 }( ?6 w3 Y1 }& D8 m% ], F  L4 o1 }+ m
A.给cookie名添加一对方括号[]
( {8 S5 ~( F; e, G! E5 jB.使用implode函数% k& L- m, U# D/ v* U% n+ X
C.不可能,因为有容量限制1 `7 n& _; {. t! W" S
D.使用serialize函数
- `9 Q8 g/ Q3 d* {5 WE.给cookie名添加ARRAY关键词& k* g. ^: [& }. ~% v8 _1 q; o  ~

! c9 T" [7 ?  ]
2 C# C( R+ ]( k5 w. ^( {11.以下脚本输出什么?

  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, A! `3 ?" Q4 W) Y0 }8 T
B.1234567890( ^4 A( I: U6 M. A9 {0 U
C.0123456789
' v$ d# e! ?. ]) GD.什么都没有, G5 K7 |- M% g. _
E.一个提示
) a1 |# Z1 f( K% k4 c
0 N8 Z: ]* M( k  |( p2 T/ z; b1 f- n  p2 B5 h
12.默认情况下,PHP把会话(session)数据存储在______里。2 F/ I$ M& n8 B
" ^, E$ C) l# X3 J
A.文件系统
! \# ^7 y2 w2 A9 vB.数据库
0 Q* |" @  p; O6 {1 @C.虚拟内容$ {1 v0 g" h5 v, ~% J+ w
D.共享内存. _: ?( ~; i) w1 u
E.以上都不是
2 {( S; B: k8 j* e; u' E- F
  c; k0 U% \+ o/ N
( A, Y( I5 e! B) y7 m13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
- v, L6 p' `& M8 ^* b6 N4 L1 H: B* Q) e' W" v- J
A.浏览器的程序出问题了: L- Q/ ]: g2 ]1 B( f7 `( ?5 }
B.客户端的时区设置不正确
- P6 m5 J; }! c& MC.用户的杀毒软件阻止了所有安全的cookie
3 |: _1 z: i' z5 l8 l) E4 qD.浏览器被设置为阻止任何cookie5 ^8 V5 U. Z, Y9 o
E.cookie里使用了非法的字符/ c- H9 r' x7 \8 n7 u
( w7 i# E% |" [8 \
: m  A9 i7 d5 z2 i; [
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?& O0 @6 m5 W8 v1 k5 e5 u. T

5 w1 E3 C$ r8 S8 IA.1440秒后
+ ?& }! u7 a8 j; UB.在session.gc_maxlifetime设置的时间过了后$ t4 O% B2 I2 Y! [9 I* |
C.除非手动删除,否则永不过期
$ ]! e$ \- U% o1 I0 fD.除非浏览器重启,否则永不过期
% J8 S  u& X& j# C/ _E.以上都不对
: P6 j- S& b" s# {  w3 @- h$ ]% |( r+ ?* @& m, r# ~
2 A5 G9 R- D4 t9 c9 ~
15.哪个函数能把换行转换成HTML标签<br />?
8 g& O  I% F. t. |* J
$ K2 p7 f1 B1 M- B$ i) C答案:____________/ d4 w  o  ]( B6 s/ a+ F4 m, ~
' s* \8 k9 O$ ~

( T. V/ w9 {( k6 k% W: i4 ~% d' d* m; {% K2 O* }
答案速查
- n) T2 @3 C8 f' |0 h1 O1:E
3 ~5 `0 U7 h# W( f2:setcookie/setrawcookie
1 ?; t' ^/ g6 I$ M! l6 ~1 E; A3:B
$ t1 v# _2 i2 d* R/ A8 W' ]( I; t4:BD
  M: k8 U6 p# j- }1 P# k' Q% F( j) [9 A5:BD* c- D* J6 k8 {! A: h+ y* O& Z
6:D5 _' x' b# i9 u& |. t  e4 r+ g
7:A& \' d) v' J  \- m6 Z. T0 N. Y
8:B
. ^$ M$ e2 C1 s1 g9:C
* V% m6 P, v" u( s0 Y4 W10:B
; I2 F" W( [2 s- p  Q& F& E11:E
" H! B+ @' r6 C+ Z- s' [2 j12:A
. j% d9 K6 ]9 }( `! p1 K; ^) o13:BD
( n/ J- G- }4 e/ V; L6 p/ ]8 q2 q14:B$ t/ N0 @% z" I' \1 M/ Q/ j
15:nl2br3 b3 e. N9 [: d5 F+ G8 C* z# c% A
8 _2 V1 D* M8 R7 @' n

# L; p- W& e% J$ L8 T& e% p0 b) y. a/ O9 k4 a/ b# c' B- s9 P
答案详解: N+ W' G$ y# [
3 O0 S4 G) l, k% D3 R6 ?- I' Q
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。  c$ ^( r5 M- v9 R7 x( A) N
' M5 f, z$ e# o; f5 C# m
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。7 B" `+ a3 ?4 S
  ^6 m- e! {- r  I0 n3 a
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。7 W% d8 G3 s" n& N- ]& p; }

1 f7 _: u( Y- _! h+ C' U) x4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。6 L4 e. C) T: t

' {) J! K8 `0 G% {5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
; c+ L2 B& H+ t: x$ s$ @* p4 _+ k# f) E# ?! U3 e! z
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。8 h* k0 [( B% \9 d0 \5 v

% G: O# x* H6 }/ t7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
5 d5 S) D9 E9 H+ o+ ^0 Z% [
7 g2 _4 Y; @+ x6 x8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。3 |" ~, A# S3 B% a  J
2 z  ^; Q3 C; E; Q5 L: u: Z* x
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
7 V. c# P3 b1 O% Y  s; d; W
% B# y' K; p% v2 X7 c' c10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。: x  w* d3 s+ Q$ E, j) v; [

9 o& c- B9 j8 L/ E- }9 d* T7 y11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
" C5 O+ E( p  `( \7 n' c9 a8 D' N: ^
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。# {7 q; ~4 ?$ {* t

" ^4 T( |) F# P0 {' s8 Y  n2 L13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
" a6 d6 H/ y! \) w0 L" j- ^7 {. Z
3 A. z; D& {' l9 V, M14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
7 Z3 |1 N" t, i( C
2 j$ _- B; g1 v2 S9 z4 }; F: N4 A6 s15.函数nl2br能实现这个功能。

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