天天看點

php 後端服務錯誤定義,【後端開發】php自定義錯誤處理器

假如您是PHP老手,當然知道當PHP腳本出錯時發生了什麼事情。此時PHP解析器将在螢幕上給出錯誤資訊,如 Fatal error: Call to undefined function on line 19 --,是以程式在此處終止。這個資訊會吓到客戶,他可能立即打電話和你進行咨詢。

php 後端服務錯誤定義,【後端開發】php自定義錯誤處理器

幸運的是,這裡有解決辦法。PHP擁有内置工具,可以讓開發人員捕捉腳本錯誤然後将它們轉到自定義的錯誤處理器。此時則可以對處理器進行程式設計顯示更多關于錯誤的具體資訊。(推薦學習:PHP程式設計從入門到精通)

還可以将錯誤寫入檔案或資料庫以采取補救措施。有時候還可以對處理器編寫程式忽略錯誤消息。

本文中,我将闡述如何使用PHP的錯誤處理API建構使用者自定義的錯誤處理器,并且說明如何以簡單而友好的方式顯示和治理腳本的錯誤資訊。

錯誤類型和報告級别

我們從最基本的開始。PHP有三種最基本的錯誤類型,從低級到進階分别為:注重、警告和錯誤(或緻命錯誤)。通常情況下,注重和警告不會終止程式;但是緻命錯誤則是危險故障(例如,調用一個沒有定義的函數或參考一個不存在的對象),将導緻程式中斷。這些錯誤有可能在啟動、解析、編譯或運作時發生。

要害字如E_NOTICE, E_ERROR等用于表明錯誤的不同類型和等級。在PHP手冊上可以獲得它們的具體資訊清單。

腳本階段錯誤顯示由error_reporting()函數進行控制。這一函數針對不同的錯誤等級設定不同的參數。表A給出了使用此函數報告警告和緻命錯誤的腳本程式。

表A

// display warnings and errors

error_reporting(E_WARNING | E_ERROR);

// this will generate a notice, which will never be displayed

echo $undefinedVar;

// this will generate a fatal error, which will be displayed

callUndefFunc();

?>

将表B中的代碼與上面的進行比較發現,Listing B中隐藏錯誤資訊甚至隐藏緻命資訊,使得錯誤資訊不會被顯示出來。

表B

// turn off error display

// no errors will be displayed

error_reporting(0);

// this will generate a notice

echo $undefinedVar;

// this will generate a fatal error

callUndefFunc();

?>

表C中的代碼将所有錯誤資訊甚至簡單的注重事項都顯示出來:

表C

// all errors will be displayed

error_reporting(E_ALL);

// this will generate a notice

echo $undefinedVar;

// this will generate a fatal error

callUndefFunc();

?>

如以上3個例子所示,error_reporting()函數在控制錯誤發生時,在螢幕上顯示内容非常重要。這裡的要害字是displayed,其表達的意思是錯誤不被顯示而不是錯誤沒有發生。是以,發生緻命錯誤時(例如不正确的函數調用),程式将被終止;但是,此時沒有任何消息顯示給使用者。