允许ob_get_contents并抓取警告,但不在前端显示它们

allow ob_get_contents and to grab warnings but not display them in front end

提问人:Matias 提问时间:5/10/2022 更新时间:5/13/2022 访问量:195

问:

我有一个用 PHP7.2 开发的脚本,在一台 CentOS 机器上运行,我一直在努力让ob_get_contents工作。

在 php.ini 文件中,我设置并error_reporting:display_errors to Off

error_reporting = E_ALL & ~E_NOTICE

下面是执行的代码:

    ob_start();
    $result = $db->query($query); //This executes a query
    $report_error = ob_get_contents();
    if (!$result)
                {
                    log_error("Query Failed: ".$report_error);
                    return false;
                }

   ob_end_flush();
   ob_start();

将显示错误设置为“打开”有效,但我不想在前端向用户显示错误,这不是我们在生产中想要的,所以不确定我需要更改的 php.ini 文件中是否有其他设置以捕获警告但不在前端显示它们?

谢谢

PHP 错误报告 ob-get-contents

评论


答:

1赞 AbraCadaver 5/10/2022 #1

您希望在使用 缓冲错误时有选择地报告错误。display_errors = Onerror_reporting()

在申请开始时,您需要 .error_reporting(0)

此外,不要刷新将输出发送到浏览器的缓冲区。您希望使用 清理缓冲区。ob_end_clean()

或者二为一进行清洁

ob_start();
error_reporting('E_ALL & ~E_NOTICE');  //report errors
$result = $db->query($query);
$report_error = ob_get_clean();
error_reporting(0);                    //report NO errors
if (!$result)
            {
                log_error("Query Failed: ".$report_error);
                return false;
            }

但是,该数据库类可能实现了一种无需执行此操作即可检索错误的方法。

评论

0赞 Matias 5/11/2022
所以你建议保持 display_errors = On 并使用 ob_get_clean()?如果我这样做,它仍然会在前端显示一些警告,对吗?
1赞 AbraCadaver 5/12/2022
您必须让它们 = on 才能输出,然后您将该输出捕获到变量中并删除输出。
1赞 AbraCadaver 5/13/2022
我添加了一个效果更好的编辑。
1赞 AbraCadaver 5/27/2022
如果它解决了您的问题,请标记接受。