在php.ini中,display_errors = off仍会显示错误以显示-以及如何记录错误?

时间:2019-06-30 20:06:09

标签: php mysqli

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

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

一旦我以我想要的方式运行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数据库连接之前添加了以下代码行,以便在我的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.");
}
*/

所有上述更改都是基于我对评论的了解,对原始帖子的了解,以及对我所发表的评论中提供的链接所读内容的更深入了解。谢谢。

2 个答案:

答案 0 :(得分:0)

如果您不希望呈现用户名和数据库,只需从自定义消息中删除$con->connect_error

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

答案 1 :(得分:-1)

您的代码逻辑表明,无论ini设置如何,它都应显示错误消息。 It is never a good idea to die in your code with an error message. PHP具有非常好的错误报告和逻辑功能,您无需自行死亡或显示它们。

首先,如果您使用MySQLi,则应该enable exception mode in your code

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);
    }
}