php錯誤與異常處理方法

03ngnntds發表於2019-04-26

php與其他計算機程式語言在遇到錯誤就丟擲異常不太一樣,PHP在處理物件時它也有異常機制,但是PHP會盡可能的愉快的去執行而無視發生的事情,除非遇到一個極端嚴重錯誤才會丟擲異常。本文主要給大家分享PHP相關的錯誤異常處理機制。

錯誤等級

PHP 有幾個錯誤嚴重性等級。三個最常見的的資訊型別是錯誤(error)、通知(notice)和警告(warning)。它們有不同的嚴重性: E_ERROR 、E_NOTICE和 E_WARNING。錯誤是執行期間的嚴重問題,通常是因為程式碼出錯而造成,必須要修正它,否則會使 PHP 停止執行。通知是建議性質的資訊,是因為程式程式碼在執行期有可能造成問題,但程式不會停止。 警告是非致命錯誤,程式執行也不會因此而中止。

使用 PHP 內建的函式 error_reporting(),可以設定程式執行期間的錯誤等級,方法是傳入預定義的錯誤等級常量,這意味著如果你只想看到警告和錯誤 - 而非通知 - 你可以這樣設定:

error_reporting(E_ERROR | E_WARNING);

你可以讓 PHP 利用錯誤控制運算子 @ 來抑制特定的錯誤, 如@fopen()。將這個運算子放置在表示式之前,其後的任何錯誤都不會出現。但是我不建議這麼做。

錯誤報告

錯誤日誌對於發現程式中的錯誤是非常有幫助的,但是有些時候它也會將應用程式的結構暴露給外部。為了有效的保護你的應用程式不受到由此而引發的問題。

在開發環境中,我喜歡讓PHP顯示並記錄所有錯誤訊息,而在生產環境中,我會讓PHP記錄大多數錯誤訊息,但不顯示出來。不管怎麼做,一定要遵循以下4個規則:

一定要讓PHP報告錯誤。

在開發環境中顯示錯誤。

在生產環境中不能顯示錯誤。

在開發環境和生產環境中都要記錄錯誤。

我在php.ini中為開發環境設定錯誤報告方式如下:

;顯示錯誤

display_errors = On

display_startup_errors = On

;報告所有錯誤

error_reporting = -1

;記錄錯誤

log_errors = On

我在php.ini中為生產環境設定錯誤報告方式如下:

;不顯示錯誤

display_errors = Off

display_startup_errors = Off

;除了注意事項之外,報告所有其他錯誤

error_reporting = E_ALL & ~E_NOTICE

;記錄錯誤

log_errors = On

異常捕獲

異常是許多流行程式語言的標配,但它們往往被 PHP 開發人員所忽視。像 Ruby 就是一個極度重視異常的語言,無論有什麼錯誤發生,像是 HTTP 請求失敗,或者資料庫查詢有問題,甚至找不到一個圖片資源,Ruby (或是所使用的 gems),將會丟擲異常,你可以透過螢幕立刻知道所發生的問題。

PHP 處理這個問題則比較隨意,呼叫 file_get_contents() 函式通常只會給出 FALSE 值和警告。許多較早的 PHP 框架比如 CodeIgniter 只是返回 false,將資訊寫入專有的日誌,或者讓你使用類似 $this->upload->get_error() 的方法來檢視錯誤原因。這裡的問題在於你必須找出錯誤所在,並且透過翻閱文件來檢視這個類使用了什麼樣的錯誤的方法,而不是明確的暴露錯誤。

另一個問題發生在當類自動丟擲錯誤到螢幕時會結束程式。這樣做會阻擋其他開發者動態處理錯誤的機會。應該丟擲異常讓開發人員意識到錯誤的存在,讓他們可以選擇處理的方式

php錯誤與異常處理方法

文章來源:搜尋引擎大全


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69911024/viewspace-2642588/,如需轉載,請註明出處,否則將追究法律責任。

相關文章