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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。/ A, }0 A: P& `; ^4 w
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
% _2 D5 }  h5 h2 f$ ~, C; v! ]% j一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。6 w& B# v* s& J2 [+ x2 U( L

' ^; n: K1 X% _4 @
2 {# n) _; Z* B, e; f6 o/ o问题6 U3 S1 p. A& I8 {, y, b' G
0 ], S* H* f3 Z9 E( `' G8 K; Q
1.如何访问会话变量(session)?
" C, s( |3 ]+ ?3 P/ C. y' h/ a
% {" U* ?3 y. F5 e9 F  FA.通过$_GET
) j8 [0 s' V9 S# m+ Y$ f# bB.通过$_POST3 G. K# f0 o& E
C.通过$_REQUEST3 l4 Q8 U" E* o8 j$ e% b0 L0 ]- \
D.通过全局变量
. v! T5 X1 r7 b1 BE.以上都不对
$ M! T: N7 {1 W/ ^' A0 k' x  r  }2 n' H" P

( h1 }2 U! M6 v: M1 W, G5 m2.哪个函数能让服务器输出如下header?
, `; y/ ?; N6 m1 ?6 U) U
) Z& C+ ]0 W4 o# q- q& q9 xset-Cookie: foo=bar;
( _) o% P) \& A5 \: i; B: S1 N7 e$ u$ [# {5 T' m6 {7 R/ U' m
答案:_______________2 c. O6 A5 N; m6 c! ?

" {0 A; B* H7 `* E' X8 t# o# Q! m9 j/ A% h* q+ b2 c
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
6 p* \+ s" o: K, Z8 F8 u$ C8 u/ Z- ]. r' q: q/ b, y
A.通过HTTP_REMOTE_COOKIE访问
! e- g( ^, q. s# P( D" fB.不可能' g6 Q+ {; y0 u, z! T5 r9 o4 K
C.在调用setcookie()时设置一个不同的域名: N+ [1 N( y/ l: n  Z0 J% i2 u
D.向浏览器发送额外的请求
! L3 u: n! [1 a6 }- P# aE.使用Javascript,把cookie包含在URL中发送
& K4 c8 k4 l, z8 f9 k
& o* G+ P7 ~" f1 m: r* F6 [/ w: J0 z( r9 @  T8 X
4.index.php脚本如何访问表单元素email的值?(双选)
: D: L7 d3 A) p7 {
" R$ c0 H3 S& E+ g<form action="index.php" method="post">
/ o. Y) ]  G9 T8 H+ t8 E/ [9 |<input type="text" name="email"/>; B9 m4 u2 Y( G, B/ d% Y* {. Y
</form>
0 O$ _# ~& e/ w$ w# _" `
, R& Y3 ?8 ?  s# C9 jA.$_GET[‘email’]
  a' b. l  ^! @! h+ o5 ^, o3 p! _B.$_POST[‘email’]
$ r' \# b. V& a+ k4 \6 T0 ?! e: lC.$_SESSION[‘text’]
- I* D% U* |, @, dD.$_REQUEST[‘email’]1 z- E  P# z; _$ y: o  F+ i0 u
E.$_POST[‘text’]
7 d3 k, Y& j) V( p0 E0 ~. N& k7 ^- v, s

5 h6 g" m6 M* f- `5 f! M5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长
! G' \3 x- U# h2 o  \+ _B.没有变化. R9 e/ o. y# A1 ~
C.在浏览器上打印该字符串时,尖括号是可见的% s$ Z4 A3 K) C; V, A2 h4 l) j, K! w
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
; _- k; h) u& C  {  BE.由于调用了htmlentities(),字符串会被销毁8 n6 p1 [( K9 n5 d% \5 s3 R

' j7 v: n- V' t- y' q& E! v; q& D, s% p, ^2 @6 @: b7 U
6.如果不给cookie设置过期时间会怎么样?
% ]; k* O* w5 B; G4 W0 a, x1 v5 X8 S9 B. S1 D. q2 H/ M) l# {
A.立刻过期& x6 L/ L; }* ?
B.永不过期
; E2 \+ |' I  i: HC.cookie无法设置
4 b9 @+ d* Y/ s- R) g, eD.在浏览器会话结束时过期; U+ Z5 W, D1 r4 d+ j. a/ F
E.只在脚本没有产生服务器端session的情况下过期1 g7 ]2 H4 K# y6 F8 o( D

& r9 z# S) v. C. L5 i, g" Y
3 ]) t% q: t3 r4 Y( x7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有
- b) k; `0 t$ ~# |- G1 ^, MB.Array, t1 E+ l& r8 j# Q/ y
C.一个提示0 P" l- j. b0 m" c1 d( e
D.phpgreat/ E% C9 g" K& n. h( O- Y( M9 T# u
E.greatphp
& D& c  S3 T! Z+ ^: o
; |2 Y) [: V$ t) N$ t/ T+ j) j: G# ~0 y+ N$ A7 t) D
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?; I$ s7 u' y9 z( Q3 B$ w3 v

# y7 @2 u# ~* i) [5 rA.这两个是明文传输,之后的信息加密传输
7 H2 ]0 e  X& mB.加密传输2 c# I  N. S/ }" b+ w5 i. v# u- x  O
C.URL明文传输,查询字串加密传输
1 L2 C0 Y2 I& X" ^, lD.URL加密传输,查询字串明文传输
* q; k6 U7 ?, bE.为确保加密,查询字串将转换为header,夹在POST信息中传输( I: Q$ B$ F, m/ A7 ?
2 B7 d. {) U5 D. r
0 e0 p9 r6 `6 R' ?" q3 f
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?8 d' e  F, Z! N1 Q- Y
% Y/ e/ ^' V) o( w4 R( B
A.它们组成一个数组,存储在超级全局变量数组中
, v" T3 y) D- l' JB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中, E; g- C0 V7 i( F& N3 z0 g
C.第二个元素将覆盖第一个元素
8 C4 [* o% H1 q7 B% a4 B9 M) mD.第二个元素将自动被重命名, _5 y0 w/ z0 u# R* i
E.PHP输出一个警告, v/ f  O0 n; x1 j9 G7 {* D1 L; L

$ z/ ~7 y: `3 M0 S) Z$ q2 c6 {' J# {+ m, B8 z$ j
10.如何把数组存储在cookie里?
$ R0 ]! J( `+ k# l) F1 F! D/ E5 R$ j+ s( F. o* A! R) {4 P' `1 p
A.给cookie名添加一对方括号[]
  Z( g; g5 r, R' |- G% mB.使用implode函数
( G. q" G9 P% c7 l( p( ^C.不可能,因为有容量限制
' X& O+ v8 `. E- UD.使用serialize函数( Z5 R5 C5 S/ Y0 o
E.给cookie名添加ARRAY关键词3 F# B+ l7 U( l

3 ?5 l4 T# g8 k: ]# {/ ]6 W2 |0 \/ s! _8 Q+ m) P
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.123456789104 k# S, z' U% ?+ `& @4 f
B.12345678904 Q; o$ e+ m# @5 j1 F, @
C.0123456789
0 T2 v2 f9 w- B" ID.什么都没有, x  m# }) g1 {- ]# O# b: c
E.一个提示
7 I( S9 `) j2 ~$ O# ^' `/ Y0 _
2 y6 V2 J& b0 w- L( \8 u" y" K' s5 N) f. j
12.默认情况下,PHP把会话(session)数据存储在______里。7 x! {) E; `5 y( i0 n
' i2 {3 y$ W/ s  I/ ?3 N
A.文件系统
/ m: T( c& p" rB.数据库* L1 q3 I" N; S: X: M  z# V! E* S
C.虚拟内容
) l5 n$ G% X& ^- kD.共享内存
6 N& T( @9 A. z: LE.以上都不是1 j1 C* a) \1 n

8 ^" N3 o8 o% `! v' w4 D9 W  U; }0 W; W" t; c7 q7 [
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
! c% D7 a! g% W! g. d1 {7 t9 c, z, s
A.浏览器的程序出问题了
1 t, m8 ~, J8 |" v2 pB.客户端的时区设置不正确
0 Z1 t/ A) o( Q- T! KC.用户的杀毒软件阻止了所有安全的cookie$ g! Q1 w5 t& [6 W0 ^, c
D.浏览器被设置为阻止任何cookie1 I$ T1 A- V. V8 B
E.cookie里使用了非法的字符
) T. F/ y  W" s. n2 {4 F1 i/ e- p6 ?! [9 G- E
% C0 z" V$ J& `$ k& `
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
" L- E+ c/ K  w$ h# e- _4 P0 d2 a; p
A.1440秒后) z4 k1 `* g  [9 @( H5 N+ C' n: q
B.在session.gc_maxlifetime设置的时间过了后: E- n  C5 F4 V. \. ~3 r- H  C
C.除非手动删除,否则永不过期
1 n$ j. f$ l$ U) O, a# eD.除非浏览器重启,否则永不过期
& a9 v/ q/ K1 r% m) V, _E.以上都不对
& [. j7 N  {; c" C/ Z+ x& _- X
' [& N  ?  z0 b+ B. W' q
( I& m  u/ B% q# W15.哪个函数能把换行转换成HTML标签<br />?
/ E- h: ~; u3 f, K; |
% O- S9 s$ ?& n+ n! [& W" _答案:____________6 o8 g% h/ ^7 n3 u# K& A) w

; r; }, f: k$ |2 d* _8 r) G5 }3 s2 d+ b9 i7 J. R+ o* d

9 M: o. p2 ]  Z1 z) o0 o答案速查4 o6 D* o8 W# h3 q1 x' D9 H
1:E6 U7 M6 ~% R: n/ u  u% P( T' }. P
2:setcookie/setrawcookie% N4 Y, s+ ~7 f5 e* f2 S( Q
3:B" T3 x3 z6 Y9 h$ H, g0 S
4:BD
0 v3 u9 `% z0 C; W5 F' V# g5:BD, C8 q$ L; E  c" J; v4 @- `) U
6:D5 ^7 @3 u1 G& g! P
7:A$ ]4 j7 t4 @, w' z3 V7 ^, m6 Z
8:B
4 G7 Q% V8 Q/ N4 c4 @2 e9:C% }* ]( `# v5 B% X. W( i
10:B
3 l" [6 N( X3 e: p" u11:E0 ]' i9 b9 e- P7 U; l
12:A
/ [/ r! o8 R, c& w7 b13:BD
3 M! ~- H" G' W14:B
) v; t  z: R6 d15:nl2br
5 A* Y! F( D6 T4 J% N3 z; B8 a
& A+ k5 G5 \, [9 f3 S/ x* i: x; _2 p! k4 g% C( M) B- K- `
0 y: b0 o" c/ K& K
答案详解% _) o+ T, h' z# a' ?5 g

5 V8 [5 p1 z7 A1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。7 F# n2 U& u, u* O1 M0 e4 N: c

. y9 u) @; R! P) R$ U/ Z) T  {' A2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。. y* s0 a  v2 E  Y; |% }! s
1 B+ o% K8 ^2 C- |& S# W
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
2 e3 s3 k! e# x2 W; y  n9 e5 m  A; E8 b" {5 P2 M' K7 Y4 H
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。; _9 k1 b$ P( m# T) b
$ Q# [& |4 ^/ E& _
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。+ _. Y/ g" p. C
  D/ I2 f# [, a  c1 m3 m" E
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。' m8 b0 I  _3 S+ a5 a) f: {/ |
4 W9 ?4 W7 S  C9 [2 [
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。( z+ s! S# M0 ]. ^  j$ z

2 E* b9 T" K: P, G& C8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。( z; ~) ~$ ^; A4 E" S

3 E2 r4 }# s8 P. c* g9 e" Z) B$ F9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。" y* V) i4 \& d! S4 N

! x8 `. D/ c! W4 H8 ?10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。" x) h4 @5 {4 V
  A- Z) H# |% Y
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。* J" W3 N7 G5 p' r* A  F" {% V
! ~/ |& L: |% E$ g
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。
+ n% H) U3 n3 S1 Y4 ^3 Y/ f+ E0 W! A
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。7 j5 |8 j6 w6 d' D
: W2 E' H) T3 B6 ?) S; h/ X
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
6 F6 O* r% u% ?( c. L* t  m; B# `/ p: s& \- W8 u0 v3 A3 I
15.函数nl2br能实现这个功能。

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