捌玖网络工作室's Archiver

admin 发表于 2008-4-4 02:25

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

没有互联网,PHP开发者将生活的非常艰苦。事实上,很多人甚至怀疑,如果没有互联网的飞速发展导致的轻量级开发需求大增,PHP还能否存在。!f4B @0P.?0X{u-q0{u
与网站开发打交道时,熟悉HTML和HTTP相关的知识非常重要。此外,本章习题还考察用会话来维持多个访问请求的知识。
A E/o ?(qSF9Yh 一旦你开始应用PHP这门语言,Web开发将是和你接触最紧密的开发。因此,你必须掌握相关的概念以确保你能够通过本章测试,这点非常重要。
H~r}3]8z
qG4A,JU _Zw b$~ Z!l8mb#Ye
问题
QE@ I*oxiD"S"f0M
.aD i8d&y\'T5r4?` 1.如何访问会话变量(session)? F1QD8m#f1zb

%s0r ]F TU |'ud A.通过$_GET6F&RRF X*D,?
B.通过$_POSTv[ S E kP
C.通过$_REQUEST
+jZGG1yW:ct D.通过全局变量0Y!@c0mP
E.以上都不对,V5w1Y^ ~6S$\y6R
W \t:T Y"gy

/t3j8YvV x ~h]U)i 2.哪个函数能让服务器输出如下header?
5w5BI3oG*g)qo
2ln%K II,`"RtNd set-Cookie: foo=bar;
B}|^*~ n.QM 6G-KF,x6N(F4OJ.u
答案:_______________
9sn Lb4m;op R3j&Em U1Yf%c4l
6zE-l,f-d7w AaB
3.在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?;@L"k7X2OSU y VZ
[` @o-Q;GOi.k
A.通过HTTP_REMOTE_COOKIE访问\e[+Qg6wf$}L
B.不可能G O \ V7AF(dh
C.在调用setcookie()时设置一个不同的域名
z;J*x6g1R D.向浏览器发送额外的请求
/`*F6u{*`8Q R1P+o4P%I,\ E.使用Javascript,把cookie包含在URL中发送D(f ]#Si*W_sJ

*G9P:r`sq+Q:k~m
!Zo d(H2~V)q0b:s 4.index.php脚本如何访问表单元素email的值?(双选)
!qD"U]q,Y *M}'PU3?2E-D.zBT
<form action="index.php" method="post">
"E"M4v6Z4wyL(M_G*g <input type="text" name="email"/>
Fb.yo-I2m[ </form>
Ge%Y3J-oT
z H;\n@N A.$_GET[‘email’]
_6w)kv3} B.$_POST[‘email’]
H:i @{I)B5Fu d C.$_SESSION[‘text’]
P x,TJ$AC%f;o(} A D.$_REQUEST[‘email’]
*Y+f{2dV E.$_POST[‘text’]
i)~(k/?T x4W
/Zv2rrI)j Q%c )g0@k[-kb(J2KR
5.以下脚本将如何影响$s字符串?(双选)[code]
9f%gL;tl1oxRx <?php] u8j1Fo
$s = '<p>Hello</p>';
TZM|C"U u_2` ][2g $ss = htmlentities ($s);
#M%J]%b a(p's echo $s;
`Ojowuz ?>[/code]A.尖括号<>会被转换成HTML标记,因此字符串将变长
wO5q)eS bu S B.没有变化
/K#k'X"I"C7Iu [&a C.在浏览器上打印该字符串时,尖括号是可见的"r4^0]\[M"T*A-P
D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
m9uc:@v E.由于调用了htmlentities(),字符串会被销毁
'u3TP*Qf1Q
*F ?-Yk;BrPn ~Z @%j"K!u4p {#a
6.如果不给cookie设置过期时间会怎么样?
%u6GE7U7eKS
3r)^#AQm!P0`?6i7Qr A.立刻过期
/Y._jaE-` B.永不过期
r'w2[6R:fH h C.cookie无法设置kG;`(}"j$ZD
D.在浏览器会话结束时过期
kD+A)c,c E.只在脚本没有产生服务器端session的情况下过期
V"wn k#I)z-qP ~
V dm \v/_"mKXw ;~6dsJ:?\~b8]z
7.思考如下代码:如果用户在两个文本域中分别输入“php”和“great”,脚本输出什么?[code]
sV#\6_8s:N?Y <form action="index.php" method="post"> BB!o*EV*y4L+x*|
<input type="text" name="element[]">-iLtLW%c MQ5IG1B
<input type="text" name="element[]">z^E_!L
</form> } n1V,Hai;D,pH6P
<?php
#YiQ+Xv|o echo $_GET['element'];
^X_Y h1c2U ?>[/code]A.什么都没有
-WX;W7qTwC{ B.ArrayS q gKvu'y2K/L3Z5[
C.一个提示
0~.OO!Z1t D.phpgreat
UB:D8uE q/X E.greatphpJ%QMl2W
{$^,y,[#|"IC)| Z

,g^CDShr 8.在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?%p*o(w`2G P0A-Ee;_:C

1D3j-v3rXb#S[g6K]z A.这两个是明文传输,之后的信息加密传输mz&QA&Dc l
B.加密传输f:? D Ua"\
C.URL明文传输,查询字串加密传输 H2H.due9v;u!{ a
D.URL加密传输,查询字串明文传输Pj)gj^@z@
E.为确保加密,查询字串将转换为header,夹在POST信息中传输
hMF{L;QR W
h!?5C6k;Bq
W5}ufJy 9.当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?k|UGzgO

\4jWKY A.它们组成一个数组,存储在超级全局变量数组中
+T.`+c%Pt6dB)?4N B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
e;L6lr0~ns C.第二个元素将覆盖第一个元素
'{h7u(TEY D.第二个元素将自动被重命名
~]9f{Ti E.PHP输出一个警告PPP[5t2V

%Gf9l1R&{_T(f
xc `B9J!a 10.如何把数组存储在cookie里?O C]4@h;XCz(S
7T#[#V*b-@{-H.b+wj
A.给cookie名添加一对方括号[]
{:}N!d/W-fX B.使用implode函数
rHRZt)C"qdDa5s C.不可能,因为有容量限制
0i7av8I*E D.使用serialize函数
Q3KN^1f,_.eX9`[ E.给cookie名添加ARRAY关键词
w*s{fP eO I)l:n"q?Chx
SQ;ey`:x8P ak
11.以下脚本输出什么?[code]
F'y4e"a4j,jL Tix,l <?php @vX:tB(n%s"[6Qlu
ob_start();
Q*QFc6BR)L for ($i = 0; $i < 10; $i++) {
,cJZ"F&a${(I         echo $i;}l ^2L6~] f
}
Tw:| k3[`aG $output = ob_get_contents();
E;KQ X7e9dqP ob_end_clean();
O]5Z+[X&i3gB&w echo $ouput;
W8V S;P1?x ?>[/code]A.12345678910
vO'Os*K B.12345678903H@4i&N3x7KJ2dc
C.0123456789
Na DK.s U5Lw!kf D.什么都没有"Ka!GM.A[j
E.一个提示
~/^ r2_ Aj9@%{
!BJ)k0V,K
n ^ g kYFI ls R 12.默认情况下,PHP把会话(session)数据存储在______里。e`9~:U'V,r0p0e:s+m

8Igz @:[;T8Su A.文件系统
^r ] vs B.数据库%Z9SmS:p E
C.虚拟内容
^O/`'Z"Z,p)xX.vQ D.共享内存(i*z&Si1X
E.以上都不是Y1n'`z5wx? UO
UJ Y2xO3D
]^{@&Y`
13.你在向某台特定的电脑中写入带有效期的cookie时总是会失败,而这在其他电脑上都正常。在检查了客户端操作系统传回的时间后,你发现这台电脑上的时间和web服务器上的时间基本相同。而且这台电脑在访问大部分其他网站时都没有问题。请问这会是什么原因导致的?(双选)
$@9hI-S5M t9ub H%^0^lMeu
A.浏览器的程序出问题了/N9Swv!J!}DM1jpN
B.客户端的时区设置不正确_ r\2dIn [V
C.用户的杀毒软件阻止了所有安全的cookiePP)A0KbQ'e t
D.浏览器被设置为阻止任何cookie
/A0g*Q~,q9A:H E.cookie里使用了非法的字符,j/?Pw`H0Gt9Q xd

A,dzQeZ&gi+X h 6_ nKk fZ
14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
M n,[,_9o(l/\/b
D^+Xfh A.r"? A.1440秒后h XNr|a^7xq/^
B.在session.gc_maxlifetime设置的时间过了后+QQqV'm5H8n ~
C.除非手动删除,否则永不过期
C _3H gYz D.除非浏览器重启,否则永不过期l8kbb#TO
E.以上都不对
0c0b%`+F3j'sHlthNw
MMC'M:O
6XKc7`2K 15.哪个函数能把换行转换成HTML标签<br />?
P,L#B5K8T i3O+[&E,bA+U+T-o2R2U
答案:____________L`:s r2j%d q4g\

Y.~Tq X oImw 5mIE o&BF v

(n!]\Cd*QE+p3oZ 答案速查 J5Q&i&h"J3U;Wz!eS
1:E
P2f8ty`Z 2:setcookie/setrawcookie
jF?'J8x_ 3:B
GFkf!J%T 4:BD
LK(Nq!h{ 5:BD
^'V*yIl5g:c 6:D7ut ln0Qr
7:A
^WX9v#W hF%C 8:B
?;Po`]+z 9:CJwg1Y&\UP
10:BH1L Pf5Fn
11:E
~MH Iv)Pab.D~ 12:A5i _ t;y}i4xj1?3Q
13:BD
+I[Bh7D/LLU 14:BV~/@Dq
15:nl2br
oy,hpY
W2R;uJu8rp4M:a:N3?+PN
?[2n S"{?Xj*_q LN7QZ
&?9f`&x~ G7@.w 答案详解
PhM"S3npJ'S T cY1Tcu
1.尽管在register_globals被设置为on时,可以通过全局变量来访问session,但在较新版本的PHP中,为了避免造成安全隐患,php.ini文件已经把register_globals设置为off了。因此答案是E。
U A%K]/h:i| tU mO%m LV
2.虽然header函数在这里也能用,但这题显然是在说setcookie或setrawcookie函数。
;{F|y\k
2B#@gH.W;vV 3.答案是B。浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。
TQD:qT*BI Y y
O Y\PaP h{ 4.既然表单采用post方式传输,那么脚本将只可能从$_POST和$_REQUEST两个超级全局变量数组中取到值。元素名称(email)是键名,因此答案是B和D。注意,由于可能导致潜在的安全问题,这里不鼓励使用$_REQUEST。3[%`'XtK c
[|/T/c2X
5.本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量$ss,而$s自己并没有被改变。因此答案是B和D。你可能觉得自己被戏弄了,但是记住,发现这样的小错误是捉虫能力中很重要的一部分。^M'l6q+P&f s
1C5T/c.K~F*U
6.如果没有设置过期时间,cookie将在用户会话结束时自动过期。cookie不需要服务器端会话的支持,因此答案是D。
uY`-I2uiE&Z'L 0I^X4W C$V`
7.表单使用post方式传输,所以无论在文本框中输入什么,其值都会传给$_POST超级全局变量,这里的$_GET数组没有值。答案是A。
}wU"{c"bXb
I@X V0U"[ 8.HTTPS传输发生时,浏览器与服务端立刻完成加密机制的握手,之后的数据都是加密传输而不是明文传输——包括URL,查询字串。而在HTTP传输中,它们都是明文传输的,因此答案是B。%d?L I4Y1{r
?6cx/Do~-b
9.对于收到的查询字串和POST信息,PHP只是简单的把元素添加进对应的超级变量数组中。结果就是如果有两个元素同名,前一个会被后一个覆盖。答案是C。 l9_0~!n [y`9F

| i8{+?-L'rY.dwc 10.只有B永远正确。虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。
C2WvT d :N0tE8M/Y)fb%F[
11.这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的$output变量拼错了!脚本不会输出任何东西,答案是E。
,Sn&Qc0j:iR
LY?7W:E uM 12.答案是文件系统(A)。默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(比如Windows),必须在php.ini中给session.save_path设置一个合适的位置(如c:\Temp)。"@/JvJXM E5D eTI
;IXt5` ?klN+qj
13.B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。d J{2p-j` O
*\1gmg,t Q
14.session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。I&Gn7fY"FD&PTz

/ng+eTzA 15.函数nl2br能实现这个功能。

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.