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

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
- c- t' [6 f! R1 x与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。4 S* }; K$ s: Y4 M
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。! v! w7 B) D4 \' t7 M" c" e  f
+ u5 t/ r% w. i; C
5 Z. R7 f$ }+ M4 `# M
问题  B9 F0 b; f/ N* u

; ^  ?5 _( O1 y: F, n1.如何访问会话变量(session)?0 G" m+ W3 d8 _2 q; m) z

; l# ]$ c! x, ]) }; VA.通过$_GET
5 k: i" a. s+ S! X% uB.通过$_POST" v  j% t& D; S0 o" _2 B1 m
C.通过$_REQUEST
  s. I  u! D4 B8 O: N( VD.通过全局变量
: o) i0 v$ N; F: EE.以上都不对
9 @* \" V4 ]8 F, L3 t8 T0 h1 q7 C3 S' Q1 ?' d8 N5 M8 _( F
) z( V3 I4 z# S! W
2.哪个函数能让服务器输出如下header?
! u2 b& J. s5 r& T+ T- F+ d
$ K8 Y$ h5 ~- ]' tset-Cookie: foo=bar;+ b: ]; A  b! N" u" ]

' V4 ?, M! f* J; Y! e答案:_______________  C: q, F8 f) U- M

! A. l# l. e# Z0 a; f! T* u: H
) M: K% T. b& w, t- O! N6 m3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
- x5 M) c% G1 G% v% e* S4 @- ~+ A0 ~  _- K2 x; {, k% F- d' o1 I
A.通过HTTP_REMOTE_COOKIE访问
' W+ d- N  o, x& ^# _B.不可能
7 g4 Q5 c& y  Y. Z! _3 iC.在调用setcookie()时设置一个不同的域名9 `4 m# T! r; Y2 c% }/ ?" o
D.向浏览器发送额外的请求
- R- J4 _: u" L9 P4 e( p) yE.使用Javascript,把cookie包含在URL中发送
$ {6 F+ Z7 @  g0 b* `% s9 R% |. ^" z$ S9 A9 ]- c6 U

2 ^* Q! M' p9 x' K) ?& v0 [3 q- N4.index.php脚本如何访问表单元素email的值?(双选)
' t* t2 ]- Z7 c
/ S  Z2 c- e6 P& C<form action="index.php" method="post">! o1 j7 z  a0 P9 p$ O. f
<input type="text" name="email"/>4 k5 A; @$ L# K2 f4 f
</form>
2 Y" R( I" t# v- F6 [5 t, j. w4 L" s3 p/ ?: x. X% y! p
A.$_GET[‘email’]
  _$ F9 G. B9 |( f1 }B.$_POST[‘email’]
% ?& A$ x) C$ w6 t: Q$ BC.$_SESSION[‘text’]) c8 J9 w$ O$ E4 Y, x8 N& |
D.$_REQUEST[‘email’]
9 K7 p; g- D, S: ~8 p7 tE.$_POST[‘text’]0 m0 L! X! e( S/ ^3 u1 O

( V6 W' M: J, ~8 s  p# r4 U6 @2 |- V& `/ |
5.以下脚本将如何影响$s字符串?(双选)

  1. <?php
  2. $s = '<p>Hello</p>';
  3. $ss = htmlentities ($s);
  4. echo $s;
  5. ?>
复制代码
A.尖括号<>会被转换成HTML标记,因此字符串将变长: U' @- d, l# G1 ]4 Z2 z: a
B.没有变化
6 X5 {5 l# m, k5 m+ y5 ~C.在浏览器上打印该字符串时,尖括号是可见的  A+ t7 p" _9 x- \2 G
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
* w, ?0 [" y% `, _4 S8 ^6 Z+ ^E.由于调用了htmlentities(),字符串会被销毁0 j: j6 i. U. [: \; ]

! W% K7 e2 H* I% \, R7 D2 n4 }' z. y2 j% e
6.如果不给cookie设置过期时间会怎么样?
% Y8 f1 n. |7 Y& T0 a- q/ g0 e4 ~: f( B4 R
A.立刻过期) }" f7 F/ O5 O/ [# [. Y. y" s8 Z
B.永不过期
0 b* j" N# N. ]C.cookie无法设置
2 T  O7 z$ j8 @% ND.在浏览器会话结束时过期
& c2 D* m$ W' Z% I( b; RE.只在脚本没有产生服务器端session的情况下过期4 |5 p: d: A! b) V2 S

- \5 }& _/ @( F) O" w6 z
. W9 B3 l! o3 \" V! M7.思考如下代码:如果用户在两个文本域中分别输入“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.什么都没有, n, d# y! E* p5 H# |# v
B.Array, w: `2 H5 N' u$ b* V
C.一个提示
" B0 t9 c: [* B3 s6 \7 ?D.phpgreat6 o  _5 h) Y" Y4 L) G
E.greatphp% m; w1 y% U8 [0 D

, t- Z( n' z- i' w6 f
8 J5 |9 v) b$ E8 s4 Q2 c  v8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?7 \0 a& V" R1 w8 K. Q5 q" u

1 ~; L; [5 g3 Y4 i% \7 _, h& d( q- AA.这两个是明文传输,之后的信息加密传输0 m: K& ]$ p8 U0 b/ Z
B.加密传输
* H4 [1 N. R9 l1 y/ @5 H% n6 u) ?C.URL明文传输,查询字串加密传输
2 m( E+ {/ ~& kD.URL加密传输,查询字串明文传输* y' C( E. B% U0 M8 R
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
6 M- b' {+ V! E& _! r" Q* u# `# l% o" l5 z; {1 l2 }* `
' M5 z4 A4 t3 m( f2 s- Q: S
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?9 `$ I$ j* _( T4 r
, k: s( ^5 |  n  X$ D- R9 I
A.它们组成一个数组,存储在超级全局变量数组中1 N. g; N" v* }/ J
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中/ `. n7 ^1 Q9 y, O1 c
C.第二个元素将覆盖第一个元素
! T+ I. M' w; I; x8 [D.第二个元素将自动被重命名
4 i, T% ]/ V9 h! C/ HE.PHP输出一个警告4 \& [# \+ [* D( _: Q

. P7 s! v4 @% n/ h* F* L! E
' S- R( c/ s3 p7 F  m# v10.如何把数组存储在cookie里?& k4 U; _2 m. r. @7 N9 G0 l
( Y: i# J! Q( j) m3 v+ e0 O, m
A.给cookie名添加一对方括号[]' _' d; ]3 r7 b( L
B.使用implode函数
1 f8 _: Q0 {4 m% S; R* W# ?  MC.不可能,因为有容量限制' O" J6 ], l3 u3 m. d, C
D.使用serialize函数. Z0 f- R7 Q4 a- U1 [  U
E.给cookie名添加ARRAY关键词) ^1 f5 l7 r& V! z1 j$ F. I! o" l& l
* e% {: J. `' j
& C) B0 p6 ?2 A( G
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' J& s# l/ ~  n# ~- l
B.1234567890
, G( l; |3 G8 z' NC.01234567892 y! L- G) l0 ^
D.什么都没有# t% e. {( Q$ u( n
E.一个提示" [$ T6 x# A1 z6 e- [" G

5 A2 X& o8 D8 p9 u1 Q+ b3 u" \8 A' s8 m6 |  n6 [
12.默认情况下,PHP把会话(session)数据存储在______里。9 |  D3 S* j2 q- I8 j! N

: J' D8 J$ [( t8 {2 e) E1 o. PA.文件系统
8 M3 c4 N( X/ o; w* Z1 dB.数据库
7 z  ~; K% D) a, B; o3 c8 L9 jC.虚拟内容# Z2 \8 C* c* o4 k* T; h4 |3 q% S
D.共享内存
# Q+ N' o1 e/ N* k2 `! UE.以上都不是2 K% t" n7 X8 s! W* w# {
0 w8 k8 P! B; r

0 v1 b8 x. T2 v7 l; O% |  `13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选). b- ~! f4 Q! ]

8 @- y2 z* F! h3 ?A.浏览器的程序出问题了
# c5 j- @1 g2 w3 X6 L' mB.客户端的时区设置不正确2 w2 }, C& a2 E: Y- n; G! `
C.用户的杀毒软件阻止了所有安全的cookie3 I$ P3 z# \% J) c  q( {
D.浏览器被设置为阻止任何cookie
% K( V1 a( R& \4 wE.cookie里使用了非法的字符& i( t7 o+ j  I
3 t+ I3 C! [# t' x

& ~! k% ]1 F8 \1 e8 p14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
0 @5 t9 h# d+ f, T" i- c4 B3 U) z$ Z
7 u0 x& C% T0 v( f3 S. ~2 IA.1440秒后6 G( m: C. H: X3 ~
B.在session.gc_maxlifetime设置的时间过了后
6 p; N% t1 `) x4 n) w: oC.除非手动删除,否则永不过期. A" {" S% X' K/ u0 v, h1 T+ y
D.除非浏览器重启,否则永不过期
9 e- o& N- M. A& i* |E.以上都不对5 @( |8 G$ s& h- H

# _/ `: N! ~2 E
" K! X7 K; Q3 d+ H15.哪个函数能把换行转换成HTML标签<br />?, T) \5 J3 ^9 p

  h% K) ]* A) f0 |/ m答案:____________. \7 ~, }/ q  L" q
) V- e' F7 i& i( g; L3 ^
- |: w  D" `% A6 S  O

% U4 l  t  X$ g4 P1 {0 w答案速查9 J  L0 S" T- \; q
1:E8 T# D( |. V" B6 w0 h2 E$ g
2:setcookie/setrawcookie8 u# |% @, w! u" i/ X: e% n
3:B6 `5 U/ c; _/ |2 F2 h8 U. Q
4:BD
7 L# C' U1 ], X0 k0 P. j9 ~) m5:BD
; W" X* t5 q, \. \3 C7 I: c# ?& o6:D
, ^! g7 ^2 }, R7 N) \5 o7:A4 Z  u9 l9 u  s
8:B
  V% {+ `; Y+ j7 r, w0 ]9:C
8 D  e$ h0 G5 S; q' ^; C' j( f7 K10:B0 }) t2 ~, O+ v; y6 l5 K4 ^
11:E
, }9 N9 ~8 \1 v$ U' f/ ~12:A' G+ z" Y& G3 L8 E
13:BD2 K# r, }- N* @% f8 V: ^; ~
14:B
* T. Q' n  {% b  s2 m! v0 X+ \15:nl2br
& p4 Z% Q8 }; X8 \1 m$ ^: o. a6 H& o' v8 y

2 \, @* C  J) |" ~% K' @+ H7 M* Y% b- F6 U* C. t% l
答案详解- j4 L% ?. l9 R. U$ Y

/ S& N8 T+ p2 N! L: }* U1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。, }" f4 F$ I9 ?4 |; d- j3 `/ ]

2 B0 ?8 S" A' k2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。. g; U6 e& Y, C: n- I
8 R0 s7 X3 A! h) n& t
3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
) g2 u# M: ]# d5 ^3 b* W9 w1 m6 n' {% i  e5 M4 f* `
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。9 S3 x; J$ c6 W, ~/ k1 G
1 ]$ e. U- E, \2 p" E8 T* A7 B
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
" w1 @, M, y$ A; X
! W( G  y( F0 y+ R6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
9 _- Q" r, z  y" t6 r7 W- p# p$ V8 _
3 t+ a8 {7 O9 o: @/ i7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。" S1 F; C) o% q& \+ M/ n

  A0 t6 i! P$ P  H# T$ U8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。; |1 @* |; w( y3 s4 ^

* u1 ?) a6 J5 O; P- ?9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
+ q6 E! X. u. G! m- ~
; w# E5 A" O' C1 ?# }' t10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
; P5 n: S! p: D; V8 E
( ~6 p2 }# |$ }11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。5 z( N2 A0 N* R' y; u
( `  M3 s  S4 u+ S% [" d) ?) C
12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。9 X$ E/ S2 u8 t- t# @6 x

  g  Y* S8 Q" D  H5 v13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
# i7 g$ Q2 I2 I) e6 L% R) g& T& o1 `3 t" M
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。
6 O! X1 h( m* `; f) Z
: S6 ~' L# V; y) w$ C15.函数nl2br能实现这个功能。

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