2011-06-16 16 views
2

從我對PHP文檔的理解中,設置自定義錯誤處理程序(無法捕捉所有錯誤)會停用默認的php錯誤處理程序(我猜可以捕獲所有錯誤:)。PHP - 應該使用set_error_handler?

如果這是正確的,是否有任何設置自定義錯誤處理程序的目的?我總是保持error_reporting(-1),所以我應該在錯誤日誌中得到所有錯誤,對吧?

至於用戶體驗,我看不到以自定義方式顯示這些錯誤的目的 - 爲什麼你會希望用戶看到它們?在製作中,我總是將display_errors設置爲關閉。

+2

來自[docs](http://www.php.net/set_error_handler):「*如果函數返回FALSE,那麼正常的錯誤處理程序將繼續。*」 – binaryLV 2011-06-16 13:40:02

回答

3

設置自定義錯誤處理程序用於設置處理其他位置未處理的錯誤的處理程序。它可以捕獲所有的錯誤,除了你的腳本根本沒有運行(例如致命的語法錯誤)的錯誤。

我還要指出的是,如果你從你的錯誤處理函數返回false,那麼內置的PHP錯誤處理程序會自動介入。

你可能想這對任何特定類型的異常的特殊記錄你的申請。

+1

只是想添加自定義錯誤記錄器與[ 'debug_backtrace()'](http://www.php.net/debug_backtrace)。 – binaryLV 2011-06-16 13:43:01

4

在生產中你可能想告訴用戶東西當你的網站崩潰,並set_error_handler提供渲染漂亮的錯誤信息,同時防止用戶看到醜陋的東西如代碼和行號的方式。它捕獲常規PHP錯誤處理程序捕獲的任何運行時錯誤。

沒有理由避免使用set_error_handler,當發生錯誤時,僅僅顯示什麼也沒有當然更可取。

2

如果這是正確的,是否有任何設置自定義錯誤處理程序的目的?我總是保持 error_reporting(-1),所以我應該在錯誤日誌中得到所有錯誤,對吧?

error_reporting指示應該報告哪些錯誤(例如警告,通知等)。這與他們在日誌中出現無關;如果將error_reporting設置爲0,則不會被記錄。如果您希望將其記錄下來,但不顯示給客戶,請使用display_errors = Off。

至於用戶體驗,我看不到以自定義方式顯示這些錯誤的目的 - 爲什麼你會希望用戶看到它們?在製作中,我總是將display_errors設置爲關閉。

我希望看到一條消息,指出「出現了問題」,而不是看到「死亡白屏」。這可能很容易處理自定義錯誤處理程序。所以,是的,它確實有一個目的。