2014-04-25 17 views
0

我的PHP版本是5.5.7。儘管error_reporting(E_ALL)和error_log類型的使用3仍然在屏幕上PHP警告

我設置error_reporting(E_ALL);

然後我故意寫我的數據庫密碼錯誤。當我使用

die()error_log()使用前,我的屏幕顯示2個消息:一個警告和錯誤:

Warning: mysqli::mysqli(): (42000/1044): Access denied for user 'user'@'%' to database 'database' in /folder/folder/folder/www/folder/file.php on line 2

Connect Error (1044) Access denied for user 'user'@'%' to database '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"); 
} 

問題:

我究竟做錯了什麼?我怎樣才能將所有類型的錯誤都打印到日誌文件中?

回答

0

默認情況下,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_reporting聲明排除他們這樣禁用PHP警告的報告:

error_reporting(E_ALL^E_WARNING); 

但是,這將禁用報告所有警告 - 不只是來自mysqli的。

+0

我使用了第一個提案(有例外)。有效。現在,屏幕上沒有敏感數據。 (屏幕上的警告已消失)將錯誤記錄到我的日誌文件中。謝謝。問候。 –

相關問題