功能描述
设置用户自定义的错误处理程序,然后触发错误(通过 trigger_error())
- 如果使用该函数,会绕过标准 PHP 错误处理程序,同时如果必要,用户定义错误程序通过 die() 终止脚本
- 如果错误发生在脚本执行之前(比如文件上传时),将不会调用自定义的错误处理程序因为它尚未在那时注册
语法
set_error_handler(errorhandler,E_ALL|E_STRICT);
使用方法
<?php
// 用户定义的错误处理函数
function myErrorHandler($errno, $errstr, $errfile, $errline) {
echo "<b>Custom error:</b> [$errno] $errstr<br>";
echo " Error on line $errline in $errfile<br>";
}
// 设置用户定义的错误处理函数
set_error_handler("myErrorHandler");
echo $woo;
输出
Custom error: [8] Undefined variable: woo
Error on line 24 in G:\workspaces\PHP\phptest\index.php
输出结果说明,系统并没有调用默认的错误报告,而是使用了自定义注册的myErrorHandler函数进行错误输出
实战练习
如果再加error_reporting()函数,对错误报告级别进行设置,代码如下面所示,则不会输出错误。
<?php
error_reporting(E_ALL ^ E_NOTICE);
// 用户定义的错误处理函数
function appError($errno, $errstr, $errfile, $errline) {
switch ($errno) {
case E_ERROR:
case E_PARSE:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
ob_end_clean();
$errorStr = "$errstr ".$errfile." 第 $errline 行.";
echo $errorStr;
break;
default:
$errorStr = "[$errno] $errstr ".$errfile." 第 $errline 行.";
echo $errorStr;
break;
}
}
// 设置用户定义的错误处理函数
set_error_handler("myErrorHandler");
echo $woo;