没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。3 R- { d+ d3 o2 n5 E1 B, R
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。* A# r6 Y/ R% F, p P5 V
一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。2 {& H1 _* Z. {3 d+ p v
* N3 ^! U0 U; h1 F $ Q ?0 X6 f! l* Z) U w/ s: i" W问题! }( C+ O. z5 N7 w# O
( ~' q6 ~6 J6 }
1.如何访问会话变量(session)? & o- E5 `1 s. q0 H$ M; r- A) T+ [
A.通过$_GET3 n# Q8 i T7 N# m7 t
B.通过$_POST! x0 M+ C- |/ R* y! g+ f& N# B* I8 ^, I
C.通过$_REQUEST, s2 w: @" @; K& `) M L" a
D.通过全局变量 9 e! s! [+ B1 VE.以上都不对 9 M% ^" u( ?4 T F, I* f; E6 ` / V1 P2 s- X. i5 [+ m" {, x# }: [: I
2.哪个函数能让服务器输出如下header?, j9 O1 p' I; G( `+ o b
A.什么都没有* {1 C, A. K& h" y' Z* e3 h
B.Array( N" L) f, [, ^9 [3 L* n
C.一个提示* l9 `( @. i- G
D.phpgreat0 m" I. M$ Q7 C* ^# M
E.greatphp1 z1 c c7 x* N* l( i( t. x
! ^9 d* B" B! u9 z1 r, k5 e, F' I; j7 o3 _* |
8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的? 0 L* q0 a4 r8 C g0 f, j- l ) i5 C6 f t4 r5 {( I, n ^A.这两个是明文传输,之后的信息加密传输 : T( ?4 w! F& O% i& w$ |8 y7 YB.加密传输 ) z: l$ {# z" z5 _7 c8 cC.URL明文传输,查询字串加密传输+ Q7 Z9 ` k" k8 V3 D7 @- V
D.URL加密传输,查询字串明文传输 E" U5 I1 |( }! }0 k$ y
E.为确保加密,查询字串将转换为header,夹在POST信息中传输 ! U* V- O- U. U; g" f8 ^' I* b1 u! Q" P% ~$ Y7 o) l; B( n
, u3 b' ]- l/ b9 O
9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么? 7 B8 B& V6 B$ x; h1 u: d: _: M8 V. b- P" Q7 P
A.它们组成一个数组,存储在超级全局变量数组中 / \* b0 g' G& k6 Y7 ]B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中 " B8 W* ?" r8 x3 O& PC.第二个元素将覆盖第一个元素 % L7 D/ U9 K9 \1 D& R: ^0 iD.第二个元素将自动被重命名" q" m3 H9 Z2 t7 x
E.PHP输出一个警告2 y( h0 x, j8 ~8 a; r. Y4 x
7 b2 f1 j6 ]# W5 B, w
" J% q- g' H4 u5 }+ w9 @10.如何把数组存储在cookie里? . @ T) S+ q7 d9 M, e 2 p) b b/ z" B% a( G3 mA.给cookie名添加一对方括号[]0 X. ?' D: F/ K7 F" L6 P }
B.使用implode函数 0 D* ?* @0 ]/ DC.不可能,因为有容量限制- ]6 ? [& l8 ?1 z' n- t
D.使用serialize函数: C$ \: m- N' `) Z- s; Y/ R
E.给cookie名添加ARRAY关键词4 P& f; l' C" ]' x0 @
! O3 J. }4 c4 ]0 H+ @
6 O5 \! k: Z/ [/ y7 ?9 `+ H, G4 U5 m* B
12.默认情况下,PHP把会话(session)数据存储在______里。- T" ^: `+ [% k: g& `' R: o
! C- j% T. M; H N4 Y
A.文件系统 7 b* v( G" ^! s `+ wB.数据库 / q% L7 @8 I; H$ Y, [( @) IC.虚拟内容% ^. v3 t) s: S+ |6 [) R6 _
D.共享内存 # m5 y: L: l8 fE.以上都不是 , \) f+ `$ R& e3 G+ _" h . Q+ s) u5 F8 R * E+ Q1 z$ r0 }13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选) ' v& }# U9 ]& d4 Z8 \/ m! }# s' P# s& o( X: R
A.浏览器的程序出问题了3 T' I2 X. X; G$ i; {. H8 H7 \& X
B.客户端的时区设置不正确, q. g; I4 K* e! e
C.用户的杀毒软件阻止了所有安全的cookie ! G0 `8 `+ u% u% FD.浏览器被设置为阻止任何cookie4 _- a2 u1 T X* _- D- ~
E.cookie里使用了非法的字符 : O/ w; H* c7 [* \+ I1 { & J: z. i$ D& _" q) K- |* L ) g4 r y( g+ p+ y( ~14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收? / ^% O, {' L; Y- [8 R1 K$ w$ L8 b+ z5 u' ?$ a# M( J
A.1440秒后 * q$ Z# h8 N, H2 ^2 iB.在session.gc_maxlifetime设置的时间过了后) s9 u" i+ L! A/ \0 |) Q/ d1 C: M
C.除非手动删除,否则永不过期 . p6 Z0 P. ?0 y' q+ WD.除非浏览器重启,否则永不过期' N8 d9 H" Q) ^# p) {
E.以上都不对2 s8 V& b+ F+ ~ w- ?) d9 s; Q
3 ]: ]7 _% B% T9 b" O
" f& E- n4 J0 U% G3 {9 Y4 ?
15.哪个函数能把换行转换成HTML标签<br />? B* o& U7 s3 e: s: g+ x
0 a9 w+ P$ O% n8 t Z
答案:____________ ' J* e6 S D) b% R : X4 l# F0 n& _, [: l7 Z: o( ~$ Y 2 Z( k7 g' q! [& C. z 0 t' e9 U* N, [4 L n答案速查; x! }+ V$ Y/ Q# V+ W
1:E . m7 e( y3 e9 i) N) y3 C3 o2:setcookie/setrawcookie, w/ y9 ]3 k( _: L$ P! h
3:B # T. g" x0 d! P! }8 C4:BD/ c) x% d; x8 G. J+ S
5:BD 7 V- u$ F( ~# C+ L" y6:D" B, g/ D$ b0 x5 O9 \9 ?
7:A 9 f1 }- s [, o8 o; B( X8:B( `- \, D! v7 H2 [1 T5 E! t1 `
9:C3 [3 I( x( [7 K) U9 o( q U) c
10:B - y" e ?6 F" o( ~8 j% F11:E 6 F$ J. v% @ K+ x; |12:A2 ?7 ]2 J" f% }
13:BD 9 O3 A2 y" W z14:B L* ?' }* t+ J0 i
15:nl2br6 ]7 R) j. P4 O" A* R
, t' W! k9 C7 i0 A* n' z
4 {7 X$ N% G4 H+ i; |
3 Y! w. E9 k+ m& B
答案详解 ( c$ n! P5 _8 P0 c+ N$ w+ _ V7 H- G; S: j, H- l7 `1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。5 |) g; {2 o' d& q
% s J. W- B- X) B" L2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。 8 l9 d' O/ z' U$ j @* E- ^/ L 6 W4 {! W4 L& r3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。# M0 X& E3 Q/ S
: B% Y3 l% o" G/ i. E: ^
4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。 6 ~7 M6 `' v; y( h, }/ w, r ! X) R" Y, S) x; `5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。- }* o& J# {$ a" ?1 T) \
* [) R+ k+ o8 {' {! L! W3 T6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。$ a' F! v5 K) Q. q W& s
) X/ [4 J. A8 q o: [2 y7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。9 c. P2 X3 U5 ] l
" @& n3 R; x3 [0 g3 X- v2 s2 M/ X' w8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。 + U+ n/ f# G4 ~& P! m- Y ! H C O' M% I' u9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。 6 v$ J! d5 k. q9 h7 ]7 E$ N% _ n 2 H8 w' `4 A4 |- S0 a9 [10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。. g; h! {( S$ L9 \2 y
6 q+ b. c% p) Q( x11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。 ~; W/ D/ M; O1 h6 i1 d
4 A ^ O! V- w. l* i9 X" _3 }12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。- V h5 l# w. q4 X! x