PHP编程基础与实例教程第二版练习题参考答案资料

方法2:使用下面的程序设置 $savePath = \ $lifeTime = 小时 * 秒;

session_save_path($savePath);

session_set_cookie_params($lifeTime); session_start();

方法3:使用函数setcookie()或session_set_cookie_params($lifeTime)设置

6.解决HTTP无状态本质,可以从以下几个方面入手。

(1)利用form表单的隐藏域hidden,在表单数据提交时传递参数,这种方法需要和form表单一起使用。

(2)利用超链接通过URL查询字符串传递参数。

(3)使用header()函数重定向功能或JavaScript重定向功能,通过URL查询字符串传递参数。

(4)使用Cookie将浏览器用户的个人资料存放在浏览器端主机中,其他PHP程序通过读取浏览器端主机中的Cookie信息实现页面间的参数传递。

(5)使用Session将浏览器用户的个人资料存放于WEB服务器中,其他PHP程序通过读取服务器端主机中的Session信息实现页面间的参数传递。 7.

通过了解 SESSION 的工作原理,可以发现,在默认情况下,各个服务器会各自分别对同一个客户端产生SESSION ID,如对于同一个用户浏览器,A 服务器产生的 SESSION ID 是 30de1e9de3192ba6ce2992d27a1b6a0a,而B服务器生成的则是c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION 数据都是分别保存在本服务器的文件系统中。确定了问题所在之后,就可以着手进行解决了。想要共享 SESSION 数据,那就必须实现两个目标:

一个是各个服务器对同一个客户端产生的 SESSION ID 必须相同,并且可通过同一个 COOKIE 进行传递,也就是说各个服务器必须可以读取同一个名为 PHPSESSID 的 COOKIE;

另一个是 SESSION 数据的存储方式/位置必须保证各个服务器都能够访问到。 简单地说就是多服务器共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION数据。 第一个目标的实现其实很简单,只需要对 COOKIE 的域(domain)进行特殊地设置(将域名设置为父子关系)即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的。cookie可以跨越子域名。比如我们在xiaofeicn.com下面注册个个cookie,那么可以在bbs.xiaofeicn.com上读取到该cookie。 第二个目标的实现方法是所有的WEB服务器的SESSION存放在一个文件服务器(或者数据库服务器)上。例如:采用一台Mysql服务器做共享服务器,把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。

三、编程题

1.使用Cookie技术编写程序显示上次登录时间。

if(isset($_COOKIE['last_visit'])){

echo \你上次登陆时间是:\

setCookie(\}else{

echo \你是第一次登陆!\

setCookie(\} ?>

2.编写支持换皮肤的PHP程序,并将皮肤保存在Cookie中。

程序说明,此题关键在于:

? 如果GET请求以及Cookie里面都没有设置皮肤,则使用默认皮肤 ? 如果Cookie里面有皮肤,则使用Cookie里的皮肤

? 如果GET请求里面有皮肤,则使用GET请求的有皮肤,并将GET请求的皮肤设置到

Cookie中1分钟

1.准备JPG皮肤图片,分别将其命名为1.jpg、2.jpg、3.jpg、4.jpg。 2.创建目录images,将所有皮肤图片文件置于该目录下。

3.创建skin.php文件,写入如下代码:

//如果GET请求以及Cookie里面都没有设置皮肤,则使用默认皮肤 if(!isset($_GET[\ $source = \}

//如果Cookie里面有皮肤,则使用Cookie里的皮肤 if(isset($_COOKIE[\ $source = $_COOKIE[\}

//如果GET请求里面有皮肤,则使用GET请求的有皮肤,并将GET请求的皮肤设置到Cookie中1分钟

if(isset($_GET[\ $source = $_GET[\

setcookie(\} ?>

3.编写PHP程序判断浏览器是否开启Cookie。

程序说明,此题关键在于:

? 页面重定向时,如果重定向到页面自己本身,如何防止重定向死循环。

if(!isset($_GET['set'])){ setcookie('test','test'); $url = 'http://';

$url.= $_SERVER['HTTP_HOST']; $url.= $_SERVER['PHP_SELF']; $url.= '?set=yes';

header('Location:'.$url); }else{

if(empty($_COOKIE['test'])){ echo \浏览器关闭了Cookie!请开启浏览器Cookie后再访问本网站!\ }else{ echo \浏览器开启了Cookie!\ } } ?> 4.

创建createExcel.php文件,写入如下代码:

function createExcel($database,$tableName){ $host = 'localhost'; $userName = 'root'; $password = ''; mysql_connect($host,$userName,$password); mysql_select_db($database); mysql_query(\ //制作表格(边框宽度为1) echo \ //制作表头(也就是表中拥有的字段) $sql = \ $result = mysql_query($sql); $fieldsNum = mysql_num_fields($result); echo \ for($i=0;$i<$fieldsNum;$i++){ echo \

} echo \ //导出10行记录 while($row = mysql_fetch_array($result)){ echo \ for($i=0;$i<$fieldsNum;$i++){ echo \ } echo \ } echo \}

header(\header(\createExcel('register','users'); ?>

第12章答案:

选择题:

C(说明:从 PHP4.2.0开始,除非已经给定了一个伪随机整数列,否则不再需要用rand()函数初始化随机数生成器。此外,即使随机数生成器没有被事先播种,脚本仍然会生成49个伪随机字符。尽管$array变量是字符串,但可以用访问数组的方式进行访问——使用数字索引访问某个位置上的字符。最后,for循环将从1开始执行到50,也就是执行了49次。) B A

B,D(说明:本题考验你对HTML编码的认识以及代码查错能力。变量$s在被函数htmlentities()处理过后,结果返回给了变量?$ss,而$s自己并没有被改变。因此答案是B和D。)

B(说明:虽然你可以用implode函数把数组转化成字符串,然后存在数组里,但却无法保证日后一定能用serialize()把这个字符串还原成数组。浏览器对单个cookie有容量限制,因此在cookie里存储数组不是个好主意。但事情也并非永远是这样,你仍然可以存储一些比较小的数组。) B D A D D D B

B,D,E(注意D选项a为常量,当然该常量并没有定义,此时该常量的值为常量名) A,D C

B,D(说明:pack 函数能对二进制数据进行复杂的格式化,包括将字符串中的字符转化成

十六进制表示。bin2hex 函数也有同样的转化功能。注意,printf()能将整数转化成十六进制数,但无法转化字符串。) B

填空题: nl2br

str_pad 函数(说明:它可以把字符串填充到指定长度)

mb_convert_encoding($str, 'GBK', ' UTF-8')或者 iconv(' UTF-8', 'GBK', $str) explode,implode 对空格的转义不同

strip_tages(注释:第二个空有歧义,该书第二版删除第二个空) substr($a,0,1)和$a{0}

跟起始标志的一样,且结束标志前也要一个换行,后面加上分号。 问答题:

方法1参见教材第7章问答题 方法2:

function changeStyle(&$str) { $arrStr=explode('_',$str); foreach($arrStr as $key=>$value){ $arrStr[$key]=strtoupper(substr($value,0,1)).substr($value,1); } return implode('',$arrStr); }

$s = \echo changeStyle ($s); ?>

方法3:

function changeStyle(& $str){ $str = str_replace (\ $str = ucwords ($str); $str = str_replace (\ return $str; }

$s = \echo changeStyle ($s); ?>

function reverse($str){ $len = mb_strlen(\ $new_string = \ for ($i=$len;$i>=0;$i--){

$new_string .= mb_substr($str,$i,1,'gbk');

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4