PHP - 在一个字符串中捕获所有 error_get_last()

Posted

技术标签:

【中文标题】PHP - 在一个字符串中捕获所有 error_get_last()【英文标题】:PHP - Capture all error_get_last() in One String 【发布时间】:2018-10-22 06:24:00 【问题描述】:

是否可以捕获/收集页面上的所有错误并使用以下方法将它们连接到一个字符串:

$allErrors = ""; 
$allErrors .= error_get_last(); // Each time an error shows up

我喜欢在我的数据库中记录错误并且更愿意记录所有这些 php 错误,因为我已经记录了与 SQL 相关的 PHP 致命错误。

【问题讨论】:

也许正在寻找implode?或者假设print_r($a, true)。老实说,不是你提议的倡导者。假设某个自定义错误处理程序 (set_error_handler) 正在这样做? 我的主要目标是将ini_set('display_errors', 1) 中的所有 PHP 错误记录到我的数据库中,但是当error_get_last() 只给我最后一个错误时,我不确定如何收集所有这些错误。 不妨看看这个:***.com/questions/36425156/… 【参考方案1】:

error_get_last(),就像名字所暗示的那样,只给你最后一个错误。而且大多数错误会阻止您的脚本运行这一事实只会让您获得最后一个错误,而不是之前的错误。但是您可以set an own handler 捕获每个抛出的错误和异常。这是一个例子

//function for exception handling
function handle_exception (Exception $exception) 

    //here you can save the exception to your database



//function for error handling
function handle_error ($number, $message, $file, $line, $context = null) 

    //pass/throw error to handle_exception
    throw new ErrorException ($message, 0, $number, $file, $line);



//set error-handler but only for E_USER_ERROR and E_RECOVERABLE_ERROR
set_error_handler ('handle_error', E_USER_ERROR|E_RECOVERABLE_ERROR);

//exception-handler
set_exception_handler ('handle_exception');

【讨论】:

我发现我必须将E_USER_ERROR|E_RECOVERABLE_ERROR 替换为E_WARNING。但是,我想保持页面显示而不是完全停止脚本。这怎么可能? @theflarenet 它不会停止,除非错误/异常阻止脚本完成。您可以使用echo $exception -> getMessage(); 显示错误消息 我相信throw new ErrorException ($message, 0, $number, $file, $line); 是它阻止脚本完成的行。删除它会运行脚本的其余部分,因为它仍然显示错误。 @theflarenet 好吧。你说的对。这就是为什么我刚刚捕获了 E_USER_ERROR 和 E_RECOVERABLE_ERROR。因为这两个是真正重要的,它们也会停止你的脚本。因此抛出异常无关紧要。但您也可以在function handle_error 中将错误保存到您的数据库中

以上是关于PHP - 在一个字符串中捕获所有 error_get_last()的主要内容,如果未能解决你的问题,请参考以下文章

Windows XAMPP 在一个本地邮箱或文件夹中捕获所有 PHP mail()

用php获得和之间的所有内容

在 PHP 中捕获方括号之间的文本

PHP 致命错误:未捕获的错误:调用字符串中的成员函数 diff()

laravel 5 - 在 routes.php 末尾捕获所有路由(Route::controller)?

php try catch 捕获哪些错误