Php 尽管有错误报告(E_ALL)和;错误日志类型3的使用

Php 尽管有错误报告(E_ALL)和;错误日志类型3的使用,php,error-handling,error-logging,error-log,Php,Error Handling,Error Logging,Error Log,我的PHP版本是5.5.7 我设置错误报告(E_ALL) 然后我故意把数据库密码写错了 在使用error\u log()之前使用die()时,我的屏幕显示两条消息:警告和错误: 警告:mysqli::mysqli():(42000/1044):拒绝用户“@%”访问第2行/folder/folder/folder/www/folder/file.php中的数据库“database” Connect Error(1044)拒绝用户“@%”访问数据库“database” 在删除die()代码并应用下面

我的PHP版本是5.5.7

我设置
错误报告(E_ALL)

然后我故意把数据库密码写错了

在使用
error\u log()
之前使用
die()
时,我的屏幕显示两条消息:警告和错误:

警告:mysqli::mysqli():(42000/1044):拒绝用户“@%”访问第2行/folder/folder/folder/www/folder/file.php中的数据库“database”

Connect Error(1044)拒绝用户“@%”访问数据库“database”

在删除
die()
代码并应用下面的代码后,我希望自定义日志文件中包含所有日志。然而虽然日志文件中有我创建的消息,但我仍然在屏幕上看到带有敏感信息的警告

$DBconn = new mysqli($DBhost, $DBuser, $DBpass, $DBname, $DBport);

if ($DBconn->connect_error) 
{           
    error_log("Connect Error! ".$DBconn->connect_errno.' '.$DBconn->connect_error."\n\r", 3, "/home/www/host/PHP_errors.log");
}
问题:


我做错了什么?如何将各种错误打印到日志文件中?

屏幕上的错误显示由指令控制。设置另外两个与此无关。

默认情况下,mysqli会对错误发出PHP警告。这并不理想,尤其是在您希望看到错误但不希望在屏幕上显示有关数据库的敏感信息的情况下

我建议您将mysqli的报告模式改为抛出异常——这样您可以捕获异常,然后处理并记录它们。我下面的示例演示了如何做到这一点:

mysqli_report(MYSQLI_REPORT_STRICT);

try {

    $DBconn = new mysqli($DBhost, $DBuser, $DBpass, $DBname, $DBport);

} catch (Exception $e) {

    error_log(
        "Connect Error! ".$e->getMessage()."\n",
        3,
        "/home/www/host/PHP_errors.log"
    );

}
如果您不喜欢异常,那么您可以通过更改
error\u reporting
声明来排除PHP警告,如下所示:

error_reporting(E_ALL ^ E_WARNING);
但这将禁用所有警告的报告,而不仅仅是来自mysqli的警告。

我使用了第一个建议(例外)。成功了。现在,屏幕上没有敏感数据。(屏幕上的警告已消失)错误已记录到我的日志文件中。谢谢当做