PHP 错误处理函数

PHP set_error_handler() 函数设置用户定义的错误函数来处理脚本中的错误。

此函数用于定义用户在运行时处理错误的方式,例如在发生严重错误时需要清理数据/文件的应用程序中,或者在某些条件下需要触发错误时.

对于由 error_levels 指定的错误类型,标准 PHP 错误处理程序将被完全绕过,除非回调函数返回 false。如果需要,用户定义的错误处理程序必须终止脚本 die()error_reporting() 设置对此函数没有影响,无论如何都会调用此函数 - 但用户仍然会能够读取 error_reporting 的当前值并采取适当的行动。

以下错误类型无法使用用户定义的函数进行处理:E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING,无论它们在何处引发,大部分 E_STRICT 是在调用此函数的文件中引发的。

如果在执行脚本之前发生错误,则无法调用自定义错误处理程序,因为当时尚未注册它。

语法

set_error_handler(callback, error_levels) 

参数

callback必填。 使用以下签名指定函数。可以改为传递 null,以将此处理程序重置为其默认状态。除了函数名之外,还可以使用包含对象引用和方法名的数组。
handler(errno, errstr, errfile, errline, errcontext) 
  • errno - 第一个参数 errno 将以整数形式传递引发的错误级别。
  • errstr - 第二个参数 errstr 将以字符串形式传递错误消息。
  • errfile - 如果回调接受第三个参数 errfile,则将以字符串形式传递引发错误的文件名。
  • errline - 如果回调接受第四个参数 errline,则将传递行号,其中错误以整数形式引发。
  • errcontext - 如果回调接受第五个参数 errcontext,则将向其传递一个指向活动符号表的数组。点发生错误。换句话说,errcontext 将包含触发错误的范围内存在的每个变量的数组。用户错误处理程序不得修改错误上下文。如果此参数没有默认值,将引发"参数太少"的错误。
    自 PHP 7.2.0 起,此参数已被弃用,并从 PHP 8.0.0 起被删除。
如果函数返回 false,则正常错误处理程序继续。
error_level可选。 指定当前脚本的error_reporting级别。它采用位掩码或预定义常量中描述的命名常量。建议使用命名常量以确保未来版本的兼容性。默认值为"E_ALL"。

返回值

返回先前定义的错误处理程序(如果有)。如果使用内置错误处理程序,则返回 null。如果前面的错误处理程序是类方法,则此函数将返回一个包含类和方法名称的索引数组。

示例:set_error_handler() 示例

下面的示例显示set_error_handler() 函数的用法。

<?php
//用户定义的错误处理函数
function myErrorHandler($errno, $errstr, $errfile, $errline) {
  echo "<b>My ERROR</b> [$errno] $errstr<br>\n";
  echo "Error on line $errline in file $errfile<br>\n";
  echo "Aborting...<br>\n";
}

//设置用户自定义错误处理函数
set_error_handler("myErrorHandler");

$test = 100;

//触发用户定义的错误处理函数
if ($test==100) {
  trigger_error("A custom error has been triggered");
}
?> 

上述代码的输出将是:

My ERROR [1024] A custom error has been triggered
Error on line 20 in file index.php
Aborting...