在開發php網絡系統時,將E_ALL | E_STRICT
設置爲error_reporting並處理所有類型的錯誤(包括通知錯誤)是一種很好的做法。哪些類型的錯誤應該在發佈的php web系統中停止系統?
但是在發佈的系統中,我應該在發生通知錯誤時停止系統嗎?
或者我應該在發生E_ERROR時才停止系統並忽略所有其他錯誤,例如E_WARNING,E_NOTICE或E_STRICT?
我應該在自定義錯誤處理程序中處理哪些類型的錯誤並停止(退出)系統?
在開發php網絡系統時,將E_ALL | E_STRICT
設置爲error_reporting並處理所有類型的錯誤(包括通知錯誤)是一種很好的做法。哪些類型的錯誤應該在發佈的php web系統中停止系統?
但是在發佈的系統中,我應該在發生通知錯誤時停止系統嗎?
或者我應該在發生E_ERROR時才停止系統並忽略所有其他錯誤,例如E_WARNING,E_NOTICE或E_STRICT?
我應該在自定義錯誤處理程序中處理哪些類型的錯誤並停止(退出)系統?
當您開發代碼時,您應該注意包括通知在內的任何警告。
對於生產你不應該真的停止錯誤。相反,您可以使用set_error_handler()
來管理任何錯誤,例如E_USER_ERROR
,E_USER_WARNING
,E_USER_NOTICE
。將客戶端重定向到自定義頁面,顯示任何類型錯誤的自定義消息。重點不在於保留默認的錯誤信息。
您應始終擁有一個系統,用於報告生產服務器上遇到的任何錯誤(通過電子郵件或其他方式)並儘快處理。
在php.net/set_error_handler你有很多的例子,這將使你的生活更容易,並幫助你跟蹤錯誤和警告。
感謝您提供有用的信息! 在[php.net/set_error_handler](http://php.net/set_error_handler)中的錯誤處理程序的所有示例中,不要在出現E_WARNING(而不是E_USER_WARNING)時調用exit。 您是否認爲您不需要向用戶顯示錯誤屏幕或消息,並在發生E_WARNING時停止(退出)系統? –
這是你的決定,警告不需要'exit',它們只是警告(未定義索引,已棄用函數等) –
感謝您的回答! –
警告應該肯定會停止系統(但不要留下原來的錯誤/異常處理程序,編寫你自己的,不要泄露任何錯誤信息)。較小的錯誤級別確定性較差,但您至少應該記錄它們並將這些報告發送給自己 - 這將激勵您修復它們: – DCoder
@DCoder感謝您的好意見! 您能告訴我爲什麼當E_WARNING發生時應該停止系統? –
在正確性比高可用性更重要的大多數情況下,「快速失敗」比「無論如何移動」更可取。警告通常意味着事情發生了真正的錯誤,繼續前進只會讓事情變得更糟。考慮這個網站上最常見的問題 - [「mysql_fetch_ expect參數...,布爾給定」](http://stackoverflow.com/search?q=mysql+fetch+boolean+given)。如果您在第一次警告時沒有停止腳本,您將得到一長串重複警告,甚至可能通過在進一步處理中使用失敗查詢的結果來混淆其他數據。 – DCoder