首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》26.2 使用变量帮助调试

关灯直达底部

当项目变得更复杂的时候,使用一些实用程序代码帮助确定错误的原因就很有意义了。程序清单26-1所示的代码就可能是很有用的。该代码回显传到页面的变量的值。

程序清单26-1 dump_variables.php——该代码可以包含在页面中,它可以将特定变量的内容打印出来,有助于调试

<?php

//these lines format the output as HTML comments

//and call dump_array repeatedly

echo"/n<!--BEGIN VARIABLE DUMP-->/n/n";

echo"<!--BEGIN GET VARS-->/n";

echo"<!--".dump_array($_GET)."-->/n";

echo"<!--BEGIN POST VARS-->/n";

echo"<!--".dump_array($_POST)."-->/n";

echo"<!--BEGIN SESSION VARS-->/n";

echo"<!--".dump_array($_SESSION)."-->/n";

echo"<!--BEGIN COOKIE VARS-->/n";

echo"<!--".dump_array($_COOKIE)."-->/n";

echo"/n<!--END VARIABLE DUMP-->/n";

//dump_arraytakes one array as a parameter

//It iterates through that array,creating a single

//line string to represent the array as a set

function dump_array($array){

if(is_array($array)){

$size=count($array);

$string="";

if($size){

$count=0;

$string.="{";

//add each element's key and value to the string

foreach($array as$var=>$value){

$string.=$var."=".$value;

if($count++<($size-1)){

$string.=",";

}

}

$string.="}";

}

return$string;

}else{

//if it is not an array,just return it

return$array;

}

}

?>

该代码将页面所接收到的4个数组变量的元素内容通过循环的方式打印出来。如果某页面由GET变量、POST变量、cookie或会话变量来调用,就将打印出这些变量的内容。

在这里,我们已经将其输出加入到HTML注释,这样可以看到它们,而且不会影响浏览器对可见页面元素的显示方式。这是创建调试信息的一种好方法。就像程序清单26-1所示,在注释中隐藏调试信息将允许在最后一分钟以前仍然保留调试代码。我们使用dump_array函数作为print_r函数的封装器。dump_array函数只是过滤了任何HTML的注释结束字符。

确切的输出取决于传给页面的变量,但是如果将以上代码加入到程序清单23-4中(第23章“在PHP中使用会话控制”中的一个身份验证的例子),它将下面这些行添加到脚本生成的HTML中:

<!--BEGIN VARIABLE DUMP-->

<!--BEGIN GET VARS-->

<!--Array

(

)

-->

<!--BEGIN POST VARS-->

<!--Array

(

[userid]=>testuser

[password]=>password

)

-->

<!--BEGIN SESSION VARS-->

<!--Array

(

)

-->

<!--BEGIN COOKIE VARS-->

<!--Array

(

[PHPSESSID]=>b2b5f56fad986dd73af33f470f3c1865

)

-->

<!--END VARIABLE DUMP-->

可以看到,以上脚本显示了POST变量的内容——userid和password,该变量是前一页面中的登录表单发送过来的。此外,它也显示了会话变量,该变量用来隐藏用户的名字:valid_user。正如第23章中所述,PHP用一个cookie将会话与特定的用户相关联。我们的脚本显示了伪随机码:PHPSESSID,该码将保存在cookie里,从而识别特定的用户。