更新:
根據這一答案的評論@mpc,正在顯示的錯誤在瀏覽器中,當display_errors
是對的,但他們沒有出現在日誌中。我假設錯誤沒有出現。
是否E_NOTICE
錯誤是唯一沒有出現在日誌中的錯誤,或者是所有錯誤類型都受到影響?如果它是所有錯誤類型,那麼我要檢查的第一件事是是否啓用錯誤日誌記錄。嘗試在腳本頂部設置ini_set('log_errors', 'On');
。如果這不起作用,然後嘗試設置您的日誌文件,你肯定你的服務器可以通過調用ini_set('error_log', 'your_file_path');
寫入。如果這些都不起作用,那麼我認爲你的PHP安裝有些問題。如果這些修補程序中的任何一個都能正常工作,則可以將它們放入實際的php.ini
中,前提是有權訪問。
原來的答案:
基於對你的問題error_reporting
水平,你的PHP安裝應該已經安裝報告E_NOTICE
錯誤。如果它沒有記錄這些錯誤,則有些錯誤。我建議打開display_errors
看是否有任何E_NOTICE
錯誤顯示。如果您無法更改php.ini
文件,請嘗試在腳本的頂部運行ini_set('display_errors', 'On');
。顯然,這些錯誤只會顯示和/或記錄,如果你觸發一個,所以你應該仔細檢查你是否真的在某個地方做。
一個警告是E_DEPRECATED
錯誤級別僅在PHP 5.3中引入。當我剛剛在PHP 5.2安裝中測試設置E_DEPRECATED
時,PHP響應錯誤,並將error_reporting
設置爲0
,這意味着它報告完全沒有錯誤。雖然5.3以前版本的文件無法使用此設置,但我認爲至少應提高在不支持該設置的服務器上使用E_DEPRECATED
的可能性。如果您不確定自己的版本,則可以運行phpinfo()
,它將顯示包含許多信息(包括安裝的版本號)的頁面。儘管如此,如果我誤解了你的問題,而你只是在談論創建自己的自定義日誌記錄,那麼你需要創建一個函數來在發生錯誤時運行,並將它作爲錯誤處理程序使用set_error_handler()
功能。
需要注意的是,當您使用set_error_handler()
時,您完全繞過了PHP的默認錯誤處理程序。這意味着您的error_handler
級別變得毫無意義。所有錯誤,無論其嚴重程度如何,都將傳遞給您創建的錯誤處理函數。 PHP傳遞給這個函數的第一個參數是錯誤號,它是找到的錯誤的常量的數值。您需要編寫自定義代碼才能捕獲所需的錯誤。
例如,爲了趕上只E_NOTICE
錯誤,你的函數應該是這樣的:
function my_error_handler($errno, $errstr, $errfile, $errline) {
if ($errno == E_NOTICE) {
// handle/log the error
}
}
set_error_handler("my_error_handler");
除非我失去了一些東西,它應該已經記錄通知。你有沒有檢查它是否使用了一些自定義錯誤處理程序? –
@ÁlvaroG. Vicario - 我的想法。沒有自定義錯誤處理程序,當我打開顯示錯誤(display_errors = On)時,顯示通知,但未記錄! – chattsm
只要開始縮小問題範圍,您可能會忘記實際的代碼庫並嘗試[這個簡單的代碼片段](http://pastebin.com/6NCRcaUd)。 –