当项目变得更复杂的时候,使用一些实用程序代码帮助确定错误的原因就很有意义了。程序清单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里,从而识别特定的用户。