|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第三章 Web开发中的PHP
没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。
: m& C! X+ [+ i) u# ?与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
! s8 |( n. n1 e* x一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
. M) u0 T# g g, s \" T# F0 L) ^* c
3 T- R) F% v1 N% M4 x) B/ k2 G
问题0 { `+ F7 q0 ]/ K, a t: c
0 E& I/ ]3 ]5 H- Z! S
1.如何访问会话变量(session)?" G$ Q) `: J. R! g# p
9 u. ^" j. P$ p! C
A.通过$_GET8 s& I) K/ x# O" ^- ^, h) S/ C
B.通过$_POST9 V5 p$ a" L5 N+ }4 n; c
C.通过$_REQUEST2 l' k8 J L1 ~/ Q
D.通过全局变量
' @& {8 T. L9 }+ P6 `E.以上都不对
' }7 w5 R8 K# M; n0 r9 E4 u8 y; O0 W
3 |5 h! I3 W1 ]/ }% q# G# U4 Q3 e l/ S6 ?' |$ ^
2.哪个函数能让服务器输出如下header?
( @& v2 l1 R8 M/ f" U
0 E: m, }6 n& O' ~set-Cookie: foo=bar;
7 ^8 O4 [1 k6 h$ T" @1 q$ p0 ~) w# @* t: ?* Z
答案:_______________
3 J- u4 n ~1 j1 c* z/ U* X- v" ] w" d" G; O
4 _# U. k3 P( \9 |! H+ `3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie? E- q* e# c$ X5 u9 W: q
5 q E5 G9 G0 G
A.通过HTTP_REMOTE_COOKIE访问
R& d% t9 w2 D/ \* G8 gB.不可能5 W3 q& \4 Z- S' m/ W! E3 W' ^) h
C.在调用setcookie()时设置一个不同的域名# w! X! P7 K( R2 _/ H
D.向浏览器发送额外的请求* P" L/ n7 J9 `+ a! O. c% P! `' R: O
E.使用Javascript,把cookie包含在URL中发送" J) X, W% ?. j! Z7 U9 Z; [! z
7 c1 `9 w1 P+ ^
8 D2 {6 s2 k" a$ i4.index.php脚本如何访问表单元素email的值?(双选)
( v8 I9 J) I) ^ I
* _2 q7 r2 d& w2 v<form action="index.php" method="post">* ?1 H6 K: ?- r H1 l
<input type="text" name="email"/>
2 U! B& v" h0 ~- d4 ~ D8 S M. S</form>' H/ G$ G% f, r
, ]$ {( N% t, J4 z% c5 gA.$_GET[‘email’]
; `- s8 N6 C0 B9 _B.$_POST[‘email’]
6 J B* L- {; C7 {1 q; o; qC.$_SESSION[‘text’]* j. |+ q, g6 B, g& g, w
D.$_REQUEST[‘email’]; v+ |5 u4 @9 y+ y y& B
E.$_POST[‘text’]
" b: ^4 |' S7 y, d, s
( i; \' n0 K b9 v# D, ]9 R8 j! p4 N4 c% s/ k O- @/ x+ w _$ ], X q# c
5.以下脚本将如何影响$s字符串?(双选)-
- <?php
- $s = '<p>Hello</p>';
- $ss = htmlentities ($s);
- echo $s;
- ?>
复制代码 A.尖括号<>会被转换成HTML标记,因此字符串将变长( N# I# a- F4 ~. j D2 t
B.没有变化
# g% b7 J% {; a5 PC.在浏览器上打印该字符串时,尖括号是可见的- h$ a3 f$ Q U% D5 g- H
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见* b; {$ i* z' d8 Q+ q; K
E.由于调用了htmlentities(),字符串会被销毁
7 w) L$ r! s" L8 f6 V, E$ S) c4 R# v9 v: I- E
0 s+ C+ }5 v- A n9 @; P4 H6.如果不给cookie设置过期时间会怎么样?
* y4 ]/ F, U) u% _ S: a! i! S& n- t5 Q! S- P
A.立刻过期
4 R; @/ X; Y0 o/ a f& R! iB.永不过期7 L6 H1 `1 Q$ ^2 H$ I
C.cookie无法设置/ z! g4 m! @5 Z# s2 j3 c1 u* _5 h
D.在浏览器会话结束时过期8 V9 t9 d o6 A" \( z% \; ?# o
E.只在脚本没有产生服务器端session的情况下过期
8 m; h/ s3 B6 X
4 D- }6 I0 ~$ p& r+ q5 u: v7 d5 q
7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?-
- <form action="index.php" method="post">
- <input type="text" name="element[]">
- <input type="text" name="element[]">
- </form>
- <?php
- echo $_GET['element'];
- ?>
复制代码 A.什么都没有9 y+ K( H% V, t( F7 k" O' ]; i
B.Array
+ J' r$ z5 Z( [; R pC.一个提示. G$ e( T% z. P" b
D.phpgreat
# V7 I- ]0 U3 Q/ e" ?9 k( SE.greatphp
) @5 S7 W6 B* ]
3 @' x) Q- _* U+ X2 J
; ^6 Q8 U0 p# B ]4 N; M8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
. a. b8 h# \) J/ U* \
* q N0 e0 N! w' qA.这两个是明文传输,之后的信息加密传输
' q' q5 k6 ]0 |& X* yB.加密传输' Z) z/ S% Y f# D& I$ O r
C.URL明文传输,查询字串加密传输
9 K! S c3 f0 _( Y; C( u2 V+ j7 ND.URL加密传输,查询字串明文传输8 R5 U( O$ ~1 r8 N# |& N
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
5 H. @ I& l/ Z6 k8 V# |. `6 p# W
8 A* K7 Z4 Z: w) ^0 C3 S: y0 [ b
! p8 D7 u4 J0 C0 H9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?# C% C s7 k5 }: R% r; o
0 q. g1 t8 \2 H9 K( W2 y zA.它们组成一个数组,存储在超级全局变量数组中
; c q6 D. x1 fB.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
$ |% ?4 f) n3 i2 F6 f! aC.第二个元素将覆盖第一个元素
( A i+ p# e/ v) KD.第二个元素将自动被重命名- e2 {5 |6 s( G: a, M, p
E.PHP输出一个警告
. }. l' v6 m+ q) l2 I3 g) z8 ]4 P4 P2 S) A- R( k5 F6 U
* I4 i: I/ v; U+ e
10.如何把数组存储在cookie里?: J! H9 _7 Q$ {4 E% y, ^
7 J" b! ~$ v8 M* W4 F2 H
A.给cookie名添加一对方括号[]1 E: I( f3 w) q
B.使用implode函数* |, ~( G( Y6 T% o8 u$ L) P% l7 P- J; |
C.不可能,因为有容量限制$ @( q2 u3 ~' ?: I
D.使用serialize函数 w& m. E7 r- q+ |% B, T
E.给cookie名添加ARRAY关键词
7 `5 y" N$ _. ~& A" I. L7 c1 r1 P% l$ t$ Q6 }
) Z% {1 a$ R0 x" o5 s' G% e
11.以下脚本输出什么?-
- <?php
- ob_start();
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- }
- $output = ob_get_contents();
- ob_end_clean();
- echo $ouput;
- ?>
复制代码 A.123456789100 [0 d9 s" k; p
B.1234567890
6 C& |2 e1 E8 s% {( [2 p% XC.0123456789
5 N5 i) h' I- t# uD.什么都没有
$ k7 n" j& V6 g% x3 t, Y) P: b9 kE.一个提示' r" k9 t5 E, _0 h/ B, P
7 ~; u8 Y; Z ?/ @% r" t# P/ p0 N
0 h3 {* h, u; x: Z8 T; w12.默认情况下,PHP把会话(session)数据存储在______里。9 Y2 l `% z5 K7 R3 T
3 F! V# ]# c, SA.文件系统7 o% i% O6 c4 Q, i
B.数据库
9 H. N0 a( P4 y# fC.虚拟内容; }* ]% f3 b* ^& D, g
D.共享内存
& T$ _6 G; @. }E.以上都不是
6 Q, z' G: m6 v% `
3 [1 C3 Y( q, s R4 k. j6 D T3 N s5 J! W
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
* w( }/ f9 d2 N$ l
. ~ B9 G0 B" ^# K4 CA.浏览器的程序出问题了3 C) {. s/ N0 I. k/ f' \4 ]# M
B.客户端的时区设置不正确
4 D7 G$ N1 z) t8 M \8 Q1 d6 [C.用户的杀毒软件阻止了所有安全的cookie& T4 i2 v0 a# y
D.浏览器被设置为阻止任何cookie3 G9 m, K* _6 o4 e6 v
E.cookie里使用了非法的字符# ~7 d' `: `* q0 s2 a S* Z. W" R
! O& M6 s& _/ H9 s% b+ U$ t% w
K4 ? l! q1 b8 V9 i6 f0 {
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?4 r) V5 Y( s3 W; f: V5 \- a$ o
- i: n& C, [8 Z0 A
A.1440秒后; y4 g! M6 d( K. J
B.在session.gc_maxlifetime设置的时间过了后3 L- M/ X' @: T' ^8 C7 U# J
C.除非手动删除,否则永不过期
4 a0 _' F: o( [9 A1 zD.除非浏览器重启,否则永不过期
( p% u: O" [4 F/ f1 N1 eE.以上都不对6 K, i3 `& [9 g6 }2 C3 _
5 o5 k/ K! G, ]7 [
' ]' h: f" U! |# \) v0 p" g
15.哪个函数能把换行转换成HTML标签<br />?. E, P9 u i4 W7 O5 K
0 N) T7 s; x$ r- S+ x# m
答案:____________$ u; K! M! g( o9 H# U5 `2 g( Z# `" @3 x
6 v% v6 |( s: c1 s+ n5 r* @
& \3 n: L+ @, q: e/ ]7 v& u2 q- z# j
答案速查# @( h6 I! u% n
1:E7 S: u8 @2 c0 y% T) N: k4 z: G
2:setcookie/setrawcookie
( {1 q0 [0 d7 b# Q' ?/ D3:B
( k3 c7 r; J, o$ D9 [4:BD
' _- G0 j1 g2 H. B% q- M5:BD' h9 l0 k- B2 _, Z
6:D% n* \4 ?1 b1 v
7:A
8 N0 g; L6 @' o# I/ g( d8:B
: p; a, P9 _" o+ f( e1 s9:C7 L4 z" c t/ U7 y+ N2 C+ q( ]
10:B
) d2 N! [3 \7 M11:E
) P! g% m# {" F+ N5 Z12:A
' v c7 r8 n- L6 Z7 s6 S, d0 [13:BD& W4 d0 s( ~+ E' }
14:B& [( Q" B& |; |
15:nl2br
2 w, m( P6 J9 Y5 o& o3 ^( ^* w
1 l& h L7 N% a$ W8 ?+ ?- ?
V8 c/ j/ [( x
; g9 b1 e% B9 Z答案详解4 s5 ? e3 ?) `( j0 z) q+ L
, w, ^5 Q, U' v5 k
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。: k9 W, ]9 b, n% v- Z3 q
5 {* b* A. T7 t2 ~
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
& l1 Z, K0 i4 Z
! T, Y$ k7 C4 L0 K f3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。/ `% v8 {! G9 H, |" \) _: R1 Y. e1 [
; @4 l$ e' J7 [- V g3 Q( k7 _3 e
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。
4 `- K8 K# B% \* b t% e
: C" ^ Q4 H5 ^; M3 H; q+ [9 Z5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。
$ y& @& S$ y: r+ a P
) \: o: p- i, W6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。: j; }' }( U! Z6 Z6 Y
9 Z5 a* Y" `0 G% V. R7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。' I( Y) K' _" _
! i* a* F+ b* o n. K& t8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。
) V O) I* x# q# M( Y: n4 h% X/ x$ I( F) G* C# ]5 ~
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。
2 d# G- ^* Q% d5 M1 G
5 k9 U" N8 j" u4 G5 A$ d10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。; h$ H* ?# X5 P" C# u5 c* T' {
: X/ j$ G) a( _1 T" ?; h. F
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。5 W' L+ [% q! p- ^% }$ P9 X d+ e
( {# F" s" C" ^3 b3 ^2 g8 s5 n12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。) {" |8 z8 q+ M- K9 {; U* Z: N
6 J! Y4 p3 H0 o
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。
' t1 p2 z) v, _9 t9 i. p- d8 z+ r
1 K# e B- M5 J14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。" X2 X' I" i" P, Y2 ]
* Y$ H; L4 b0 W5 ]% @
15.函数nl2br能实现这个功能。 |
|