允许 ob_get_contents 并获取警告但不在前端显示
allow ob_get_contents and to grab warnings but not display them in front end
我在 CentOS 机器上用 PHP7.2 运行 开发了一个脚本,我一直在努力获得 ob_get_contents上班。
在 php.ini 文件中,我已将 display_errors to Off
和 error_reporting 设置为:
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();
将显示错误设置为 On works 但我不想在前端向用户显示错误,这不是我们在生产中想要的东西所以不确定是否我需要更改 php.ini 文件中的另一个设置以捕获警告但不在前端显示它们?
谢谢
您想要display_errors = On
,然后在使用error_reporting()
缓冲错误时有选择地报告错误。
在您的应用程序开始时,您需要 error_reporting(0)
.
此外,不要刷新 将输出发送到浏览器的缓冲区。你想 clean 缓冲区 ob_end_clean()
.
或者 get 和 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;
}
但是,该数据库 class 可能实现了一种检索错误的方法,而无需经过此过程。
我在 CentOS 机器上用 PHP7.2 运行 开发了一个脚本,我一直在努力获得 ob_get_contents上班。
在 php.ini 文件中,我已将 display_errors to Off
和 error_reporting 设置为:
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();
将显示错误设置为 On works 但我不想在前端向用户显示错误,这不是我们在生产中想要的东西所以不确定是否我需要更改 php.ini 文件中的另一个设置以捕获警告但不在前端显示它们?
谢谢
您想要display_errors = On
,然后在使用error_reporting()
缓冲错误时有选择地报告错误。
在您的应用程序开始时,您需要 error_reporting(0)
.
此外,不要刷新 将输出发送到浏览器的缓冲区。你想 clean 缓冲区 ob_end_clean()
.
或者 get 和 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;
}
但是,该数据库 class 可能实现了一种检索错误的方法,而无需经过此过程。