2009-08-14 58 views
1

比方說,我基本上繼承了現場網站,有很多的生產錯誤的,我基本上做這整個網站可能採取的重新編碼一個月左右。抑制誤差超出設定的error_reporting(可能的display_errors?)

有些情況下,這個站點依賴外部XML文件提要,這些提要不再存在,但代碼沒有正確設置提供一個很好的乾淨的錯誤消息(有各種類似的情況) - 客戶端正在請求至少這些錯誤信息消失,即使例如xml文件的內容沒有發佈,所以我們不會看到PHP錯誤和頁面上的空白區域(所以頁面的其餘部分可以看起來像「罰款「)。

在一個點上我一直在使用的set_error_han dler以抵消某些情況下,它不是極端聽到有人和我將它設置爲存儲錯誤信息在文件/記錄或電子郵件他們的想法(和嘗試沒有重複的錯誤信息)基本上,最終用戶不必看到那些醜陋的東西。

我正在尋找來自任何實際做過此事的人的提示,所以在此先感謝。

回答

3

當在發展,這是很好的使用

error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 

因此,你可以立刻看到錯誤:它有助於糾正他們。


當生產服務器上,你不希望錯誤顯示,所以:

ini_set('display_errors', 'Off'); 

error_reporting可以保持激活狀態:如果display_errors是關閉,錯誤將不會在顯示效果 - 但你仍然可以讓他們登錄到一個文件。


順便說一句,那些可以在PHP中設置。ini文件,當然,:


在生產機器,你可能想使用log_errorserror_log,所以錯誤將被記錄到文件中(這意味着您將能夠知道發生了什麼錯誤 - 有時會有用);當然,不要忘記不時檢查該文件;-)。


一點題外話,如果你只是有幾個功能/你不想方法來顯示錯誤,你可以設想使用@ operator只是掩蓋那些可能會引發錯誤...

。 ..但我強烈建議不要這樣做(除非在特定情況下):它會使調試變得更加困難:所觸發的錯誤永遠不會顯示,即使在您的開發計算機上也是如此!

在我看來,只是在生產機器上禁用display_errors會更好;這也意味着不會顯示任何錯誤,這對用戶來說更好!

4

在生產服務器,你應該有以下INI設置:

ini_set('error_reporting', E_ALL | E_STRICT); 
ini_set('log_errors', true); 
ini_set('error_log', '/tmp/php_errors.log'); // or whatever file is appropriate 
ini_set('display_errors', false); 

通過關閉display_errors,用戶將不會看到其他錯誤消息,但將能夠看到錯誤消息查看日誌文件。

重新編碼完成後,應該不會有更多錯誤進入日誌文件(因爲您已經修復了所有錯誤)。

編輯:一些開發商設置error_reportingE_ALL^E_NOTICE爲隱藏錯誤的方式。這是不好的做法,因爲它隱藏了有關可能的編程錯誤的消息。你應該只有使用E_ALL^E_NOTICE當有這麼多來自遺傳代碼的聲明,你無法修復它們全部。