猿问

php.ini 中的 display_errors = off 仍然呈现错误以显示

当我将“display_errors = off”添加到我的 php.ini 文件时,我仍然会显示一些 php 错误。


在将 display_errors = off 添加到我的 php.ini 文件之前,我得到了完整路径等显示(很多信息。不打算被用户看到)。将 display_errors = off 放入我的 php.ini 文件后,我得到的错误信息要少得多。显示,但我仍然收到以下错误:“对不起,有一个错误:用户 'username'@'localhost' 对数据库 'mydatabase' 的访问被拒绝。“对不起,有一个错误”是我的自定义 connect_error 模具文本,这就是我想要显示的全部内容。但是呈现我想避免的用户名和数据库。还有什么我需要添加到我的 php.ini 文件中,或者这可能是使用 connect_error 和死在我的 php 代码中?我的 LAMP 网站主机不允许我访问 .htaccess 和其他一些配置文件。但我有自己的 php。


一旦我让 display_error 以我想要的方式工作,我想将 log_errors & error_log 添加到我的 php.ini 文件中,以便我可以记录 php 错误以进行调试。


这是我在 php.ini 中的一行:


display_errors = off

这是我的 php 文件中的检查连接代码(以防万一):


if ($con->connect_error) {

die("Sorry, there was an error: " . $con->connect_error);

}

我希望我的 php.ini 中的 display_errors = off 在执行期间给我一个空白屏幕,或者只显示“对不起,有一个错误”,这将是我的偏好。任何意见建议表示赞赏。谢谢你。


更新:阅读我收到的原始帖子的评论后,我尝试修改一些代码并添加一些代码。


我在建立 mysql db 连接之前添加了以下代码行,以便在我的 php 错误日志中报告 mysql 错误:


mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

然后我将以下几行添加到我的 php.ini 中,这样所有错误都不会显示,而是写入 php 错误日志:


error_reporting = E_ALL

display_errors = off

log_errors = on

error_log = ../logs/my_php_error_log

我完全注释掉了我的“$con->connect_error”代码(如下),因为所有 mysql/php 错误现在都被记录到一个文件中,我经常检查。注意:如果不检查连接不是好的做法,请告诉我:


/*

if ($con->connect_error) {

die("Sorry, there was an error.");

}

*/

我所做的所有上述更改都是基于我从对原始帖子的评论中学到的知识,以及我在评论者提供的链接中阅读的更深入的信息。谢谢你。


斯蒂芬大帝
浏览 129回答 2
2回答

繁花不似锦

如果您不想呈现用户名和数据库,您只需$con->connect_error从自定义消息中删除。if ($con->connect_error) {    die("Sorry, there was an error.");}

炎炎设计

您的代码的逻辑规定,无论 ini 设置如何,它都应该显示错误消息。用错误消息死在你的代码中从来都不是一个好主意。PHP 具有非常好的错误报告和逻辑功能,您不需要自己死掉或显示它们。首先,如果您使用 MySQLi,那么您应该在代码中启用异常模式:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);不要发现您的错误,也不要自己显示它们。如果切换到配置并打开display_errors=On错误报告,您将在浏览器中看到错误。如果你真的想显示你自己的错误信息,你应该使用exceptions。if ($con->connect_error) {    throw new \Exception("Sorry, there was an error: " . $con->connect_error);}您也可以使用trigger_error手动触发 PHP 错误。if ($con->connect_error) {    throw new \Exception("Sorry, there was an error: " . $con->connect_error, E_USER_ERROR);}最糟糕的选择是die。如果必须,die则可以先检查错误显示是否已打开。if ($con->connect_error) {    if(ini_get('display_errors')){        die("Sorry, there was an error: " . $con->connect_error);    }}
随时随地看视频慕课网APP
我要回答