2012-10-06 23 views
5

在開發php網絡系統時,將E_ALL | E_STRICT設置爲error_reporting並處理所有類型的錯誤(包括通知錯誤)是一種很好的做法。哪些類型的錯誤應該在發佈的php web系統中停止系統?

但是在發佈的系統中,我應該在發生通知錯誤時停止系統嗎?

或者我應該在發生E_ERROR時才停止系統並忽略所有其他錯誤,例如E_WARNING,E_NOTICE或E_STRICT?

我應該在自定義錯誤處理程序中處理哪些類型的錯誤並停止(退出)系統?

+2

警告應該肯定會停止系統(但不要留下原來的錯誤/異常處理程序,編寫你自己的,不要泄露任何錯誤信息)。較小的錯誤級別確定性較差,但您至少應該記錄它們並將這些報告發送給自己 - 這將激勵您修復它們: – DCoder

+0

@DCoder感謝您的好意見! 您能告訴我爲什麼當E_WARNING發生時應該停止系統? –

+1

在正確性比高可用性更重要的大多數情況下,「快速失敗」比「無論如何移動」更可取。警告通常意味着事情發生了真正的錯誤,繼續前進只會讓事情變得更糟。考慮這個網站上最常見的問題 - [「mysql_fetch_ expect參數...,布爾給定」](http://stackoverflow.com/search?q=mysql+fetch+boolean+given)。如果您在第一次警告時沒有停止腳本,您將得到一長串重複警告,甚至可能通過在進一步處理中使用失敗查詢的結果來混淆其他數據。 – DCoder

回答

4

當您開發代碼時,您應該注意包括通知在內的任何警告。

對於生產你不應該真的停止錯誤。相反,您可以使用set_error_handler()來管理任何錯誤,例如E_USER_ERRORE_USER_WARNING,E_USER_NOTICE。將客戶端重定向到自定義頁面,顯示任何類型錯誤的自定義消息。重點不在於保留默認的錯誤信息。

您應始終擁有一個系統,用於報告生產服務器上遇到的任何錯誤(通過電子郵件或其他方式)並儘快處理。

php.net/set_error_handler你有很多的例子,這將使你的生活更容易,並幫助你跟蹤錯誤和警告。

+0

感謝您提供有用的信息! 在[php.net/set_error_handler](http://php.net/set_error_handler)中的錯誤處理程序的所有示例中,不要在出現E_WARNING(而不是E_USER_WARNING)時調用exit。 您是否認爲您不需要向用戶顯示錯誤屏幕或消息,並在發生E_WARNING時停止(退出)系統? –

+0

這是你的決定,警告不需要'exit',它們只是警告(未定義索引,已棄用函數等) –

+0

感謝您的回答! –