阅读量:0
set_error_handler
函数在 PHP 中用于自定义错误处理程序。它接受一个回调函数,当发生错误时,这个函数将被调用。,,``php,function customErrorHandler($errno, $errstr, $errfile, $errline) {, // 自定义错误处理逻辑,},,set_error_handler("customErrorHandler");,
``PHP中set_error_handler函数用法小结
基本定义与功能
set_error_handler
函数用于设置用户自定义的错误处理函数,允许开发者在运行时期间创建自己的错误处理方法,该函数会返回旧的错误处理程序,若失败则返回null。
语法
set_error_handler(error_function, error_types);
参数说明
参数名 | 类型 | 描述 |
error_function | callback | 必需,规定发生错误时运行的函数。 |
error_types | int | 可选,规定在哪个错误报告级别会显示用户定义的错误,默认是 "E_ALL"。 |
常用错误报告级别
常量 | 值 | 描述 |
E_WARNING | 2 | 运行时非致命的错误,没有停止执行脚本。 |
E_NOTICE | 8 | 运行时的通知,脚本发现可能是一个错误,但也可能在正常运行脚本时发生。 |
E_USER_ERROR | 256 | 用户生成的致命错误,这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_ERROR。 |
E_USER_WARNING | 512 | 用户生成的非致命错误,这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_WARNING。 |
E_USER_NOTICE | 1024 | 用户生成的通知,这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_NOTICE。 |
E_RECOVERABLE_ERROR | 4096 | 可捕获的致命错误,这就如同一个可以由用户定义的句柄捕获的 E_ERROR(见 set_error_handler())。 |
E_ALL | 8191 | 所有的错误和警告的级别,除了 E_STRICT(自 PHP 6.0 起,E_STRICT 将作为 E_ALL的一部分)。 |
实际应用示例
示例1:基础用法
// 自定义错误处理函数 function customError($errno, $errstr, $errfile, $errline) { echo "<b>Custom error:</b> [$errno] $errstr<br />"; echo "Error on line $errline in $errfile<br />"; echo "Ending Script"; die(); } // 设置错误处理程序 set_error_handler("customError"); $test = 2; // 触发错误 if ($test > 1) { trigger_error("A custom error has been triggered"); }
示例2:类方法作为错误处理程序
class App{ function customError($errno, $errstr, $errfile, $errline) { echo "<b>Custom error:</b> [$errno] $errstr<br />"; echo "Error on line $errline in $errfile<br />"; echo "Ending Script"; die(); } } // 设置错误处理程序为类方法 set_error_handler(array("App", "customError")); $test = 2; // 触发错误 if ($test > 1) { trigger_error("A custom error has been triggered"); }
相关问题与解答
问题1:为什么在使用set_error_handler
后,error_reporting()
设置不起作用?
答案:set_error_handler
会完全绕过标准的 PHP 错误处理程序,这意味着所有错误都会交由自定义的处理函数处理,而不再受error_reporting()
的控制,即使设置了error_reporting()
,它也不会对自定义错误处理程序产生任何影响。
问题2:如何防止自定义错误处理程序泄露实际路径?
答案: 为了防止路径泄露,可以在自定义错误处理函数中过滤掉文件路径信息,可以使用str_replace()
函数替换路径部分,从而避免暴露敏感信息,以下是一个示例代码:
function my_error_handler($errno, $errstr, $errfile, $errline) { // 如果不是管理员就过滤实际路径 if (!admin) { $errfile = str_replace(getcwd(), "", $errfile); $errstr = str_replace(getcwd(), "", $errstr); } // 其他错误处理逻辑... } set_error_handler("my_error_handler");
小伙伴们,上文介绍了“PHP中set error handler函数用法小结”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。