简单地终止脚本并不是恰当的方式。本节将讲解如何自定义错误和错误触发器。创建一个自定义的错误处理器非常简单,用户可以创建一个专用函数,然后在PHP中发生错误时调用该函数。
自定义的错误函数的语法格式如下:
error_function(error_level,error_message,error_file,error_line,error_context)
该函数必须至少包含error_level和error_message两个参数,另外3个参数(error_file、error_line和error_context)是可选的。各个参数的具体含义如表9-2所示。
参数error_level定义错误规定的报告级别,这些错误报告级别是错误处理程序旨在处理的错误的不同类型。具体的级别值和含义如表9-3所示。
下面通过实例来讲解如何自定义错误和错误触发器。
首先创建一个处理错误的函数:
function customError($errno, $errstr)
{
echo "<b>错误:</b> [$errno] $errstr<br/>";
echo "终止程序";
die();
}
上面的代码是一个简单的错误处理函数。当它被触发时,会取得错误级别和错误消息。然后输出错误级别和消息,并终止程序。
创建了一个错误处理函数后,下面需要确定在何时触发该函数。在PHP中,使用set_error_handler()函数设置用户自定义的错误处理函数。该函数用于创建运行时的用户自己的错误处理方法。该函数会返回旧的错误处理程序,若失败,则返回null。具体的语法格式如下:
set_error_handler(error_function,error_types)
其中,error_function为必需参数,规定发生错误时运行的函数。error_types是可选参数,如果不选择此参数,就表示默认值为E_ALL。
在本例中,由于针对所有错误来使用自定义错误处理程序,具体的代码如下:
set_error_handler("customError");
下面通过尝试输出不存在的变量来测试这个错误处理程序。
【例9.2】
<?php
//定义错误函数
function customError($errno, $errstr){
echo "<b>错误:</b> [$errno] $errstr";
}
//设置错误函数的处理
set_error_handler("customError");
//触发自定义错误函数
echo($test);
?>
运行后结果如图9-5所示。
在脚本中用户输入数据的位置,当用户的输入无效时,需要触发错误。在PHP中,这个任务由trigger_error()完成。
trigger_error()函数创建用户自定义的错误消息。trigger_error()用于在用户指定的条件下触发一个错误消息。它与内建的错误处理器一同使用,也可以与由set_error_handler()函数创建的用户自定义函数一起使用。如果指定了一个不合法的错误类型,该函数返回false,否则返回true。
trigger_error()函数的具体语法格式如下:
trigger_error(error_message,error_types)
其中,error_message为必需参数,规定错误消息,长度限制为1024个字符。error_types为可选参数,规定错误消息的错误类型,可能的值为E_USER_ERROR、E_USER_WARNING和E_USER_NOTICE。
【例9.3】
<?php
$test=5;
if ($test>4){
trigger_error("Value must be 4 or below"); //创建自定义错误信息
}
?>
运行后结果如图9-6所示。由于test数值为5,因此将会发生E_USER_WARNING错误。
下面通过实例来讲解trigger_error()函数和自定义函数一起使用的处理方法。
【例9.4】
<?php
//定义错误函数
function customError($errno, $errstr){
echo "<b>错误:</b> [$errno] $errstr";
}
//设置错误函数的处理
set_error_handler("customError",E_USER_WARNING);
// trigger_error函数
$test=5;
if ($test>4){
trigger_error("Value must be 4 or below",E_USER_WARNING);
}
?>
运行后结果如图9-7所示。
9.2.4 错误记录
默认情况下,根据php.ini中的error_log配置,PHP向服务器的错误记录系统或文件发送错误记录。通过使用error_log()函数,用户可以向指定的文件或远程目的地发送错误记录。
通过电子邮件向用户自己发送错误消息,也是一种获得指定错误通知的好办法。下面通过实例的方式来讲解。
【例9.5】
运行后结果如图9-8所示。在指定的someone@example.com邮箱中将收到同样的错误信息。