1.8 - 第一章:PHP基礎 - 錯誤與錯誤管理

錯誤是每一門計算機語言不可缺少的部分——儘管他領程序員生厭!

PHP擁有一些令人激動的除蟲工具——細緻精準的錯誤拋出、錯誤句柄與錯誤報告。合理的利用錯誤管理可以寫出穩定的和有檢測已知問題能力的應用,然後通過優雅的方式處理他們。

作者提示:本章我們只介紹傳統的程序錯誤管理。PHP 5中面向對象的錯誤管理會在面向對象開發章節中詳細介紹。

1.8.1 錯誤類型

錯誤的種類繁多,PHP中通常與錯誤等級對應:

編譯時錯誤 當解釋器編譯一個腳本的時候檢測到的錯誤。在其出錯腳本中不可被捕獲。
致命錯誤 此種錯誤直接終端程序運行,不能被捕獲。
可回收錯誤 此種錯誤描述一個嚴重的錯誤,但可以被捕獲。
警告 僅指示一個運行中的故障。不會中斷腳本運行。
提醒 顯示一個次要的問題。不會中斷腳本運行

根據上表描述可以看出,並不是所有的錯誤都可以被捕獲。如果遇到編譯錯誤與致命錯誤,至少可以知道有錯誤發生。因此,儘可能優雅的處理這些問題。

1.8.2 錯誤報告

默認情況下,PHP會將所有的錯誤報告輸出在腳本顯示中。除非你碰巧在調試環境中,你將利用這個罕見的情況:允許用戶看到你腳本中的錯誤——這可能是一個重大的安全問題。(Siemen注:看着有點蛋疼,作者想要表達的意思就是如果你要是正式發佈產品的時候還沒有關閉錯誤報告,所有用戶都可以看到錯的詳細情況,這是非常不安全的。)

幸運的是,php.ini文件中很多配置選項允許你設定要顯示哪些錯誤。最常用的一組是error_reporting, display_errors和log_errors.

error_reporting指令決定着PHP報告哪些錯誤。一系列的內建常量用來預設需要顯示的錯誤級別。比如以下設置報告除了提示外的所有錯誤:

作者提示:錯誤報告也可以在腳本中調用error_reporting()方法來動態改變。

display_errors和log_error指令則可以決定報告的去處。如果display_errors被開啓,錯誤信息會被顯示在腳本輸出結果中;通常來說,對於正式上線的環境這麼做是不可取的,因爲任何人都可以看到錯誤的詳細信息。這種情況下,開啓log_errors來替代display_errors是個不錯的選擇,它能夠將錯誤信息記錄到服務器錯誤日誌中供你查閱。

1.8.3 錯誤句柄

你的腳本應該始終可以從一個被捕獲的錯誤中恢復運行——甚至如果可以的話通知用戶有錯誤發生同時發送詳細的錯誤信息給應用維護人員。可以這麼說,你的腳本不會因爲一個未知的錯誤發生而終止運行——給訪問者一個友好的提示同時繞開一些致命的問題。

幸運的是,錯誤處理非常容易上手。你的腳本可以通過一個PHP內置的錯誤句柄函數set_error_handler()來調整一個錯誤的發生:

真如你所見,老的錯誤句柄函數的名稱(可以自定)是set_error_handler()函數的返回值——這可以讓你同時創建多個錯誤句柄,因此我們可以使用不同的函數來處理不同類型的錯誤。

需要重點說明的是,你定義的錯誤句柄是從PHP的錯誤機制中完全移交過來的——也就是說你必須承擔所有的錯誤句柄並且處理,與必要的終止腳本運行。

 

修正:

2010年04月06日 —— Siemen

1. 所有代碼部分使用csdn重新插入

發佈了19 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章