php.ini中的display_errors=off仍然呈现要显示的错误-以及如何记录错误?

php.ini中的display_errors=off仍然呈现要显示的错误-以及如何记录错误?,php,mysqli,Php,Mysqli,当我在php.ini文件中添加“display_errors=off”时,仍然会显示一些php错误 在将display_errors=off添加到我的php.ini文件之前,我得到了完整的路径,等等(很多信息,不希望用户看到)。在php.ini文件中关闭display_errors=off之后,我得到的错误信息要少得多。显示,但我仍然收到以下错误:“抱歉,出现错误:拒绝用户‘username’@‘localhost’访问数据库‘mydatabase’。”“是我的自定义连接错误文本,这就是我希望显

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

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

一旦我得到了display_error,我想把log_errors&error_log添加到我的php.ini文件中,这样我就可以记录php错误进行调试

以下是我在php.ini中的行:

display_errors = off
以下是我的php文件中的检查连接代码(以防有帮助):

我希望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.");
}
*/

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

代码的逻辑要求它显示错误消息,与ini设置无关。PHP有非常好的错误报告和逻辑特性,您不需要死或自己显示它们

首先,如果您使用MySQLi,那么您应该:

不要捕捉错误,也不要自己显示错误。如果配置切换到
display_errors=On
且错误报告也打开,您将在浏览器中看到错误

如果确实要显示自己的错误消息,则应使用

您还可以使用手动触发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);
    }
}

代码的逻辑要求它显示错误消息,而不考虑ini设置。PHP有非常好的错误报告和逻辑特性,您不需要死或自己显示它们

首先,如果您使用MySQLi,那么您应该:

不要捕捉错误,也不要自己显示错误。如果配置切换到
display_errors=On
且错误报告也打开,您将在浏览器中看到错误

如果确实要显示自己的错误消息,则应使用

您还可以使用手动触发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);
    }
}

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

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

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

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

程序逻辑的一部分是显示错误。即使它们在PHP级别被关闭,您的代码段也会显示它们。die()不是一个错误,它只是一个类似于echo的输出。使用异常或
trigger\u error()
谢谢你们澄清我的程序逻辑错误。为了澄清die()的含义,加上链接。程序逻辑的一部分是显示错误。即使它们在PHP级别被关闭,您的代码段也会显示它们。die()不是一个错误,它只是一个类似于echo的输出。使用异常或
trigger\u error()
谢谢你们澄清我的程序逻辑错误。为了澄清die()的含义,以及链接。感谢您指出了这个简单的解决方法。我已经从我的自定义消息中删除了这段代码。感谢您指出这个简单的修复方法。我已经从我的自定义邮件中删除了这段代码。感谢您提供的深入信息和链接。我已经做了一些修改,将尝试编辑我的原始问题,以包括我所做的一些更改。@obcbeatle您的编辑看起来不错。做得好。这是否意味着您的问题已经得到了回答,或者您在错误日志记录方面仍然存在一些问题?我想这就是我目前面临的所有问题:-)尽管我可能需要拿出一个脚本或其他东西来关注php错误日志,以便它不会失控(文件大小)。但现在,错误日志主要在调试准备好的语句时出错,我正在学习如何使用不同的查询编写语句,等等。。但现在一切似乎都在按我认为应该的方式运转:-)谢谢你的帮助!你应该接受其中一个答案,让别人知道你解决了你的问题。感谢你提供的深入信息和链接。我做了一些修改