提问人:Matias 提问时间:5/10/2022 更新时间:5/13/2022 访问量:195
允许ob_get_contents并抓取警告,但不在前端显示它们
allow ob_get_contents and to grab warnings but not display them in front end
问:
我有一个用 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 文件中是否有其他设置以捕获警告但不在前端显示它们?
谢谢
答:
1赞
AbraCadaver
5/10/2022
#1
您希望在使用 缓冲错误时有选择地报告错误。display_errors = On
error_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
如果它解决了您的问题,请标记接受。
评论