假如您是PHP老手,當然知道當PHP腳本出錯時發生了什麼事情。此時PHP解析器將在螢幕上給予錯誤訊息,如 Fatal error: Call to undefined function on line 19 --,因此程式在此終止。這個訊息會嚇到客戶,他可能會立即打電話和你進行諮詢。
幸運的是,這裡有解決方案。 PHP擁有內建工具,可以讓開發人員捕捉腳本錯誤然後將它們轉到自訂的錯誤處理器。此時則可以對處理器進行程式設計顯示更多關於錯誤的具體資訊。 (推薦學習:PHP程式設計從入門到精通)
也可以將錯誤寫入檔案或資料庫以採取補救措施。有時候還可以對處理器編寫程式忽略錯誤訊息。在
本文中,我將闡述如何使用PHP的錯誤處理API建立使用者自訂的錯誤處理器,並且說明如何以簡單而友善的方式顯示和治理腳本的錯誤訊息。
錯誤類型和報告等級
我們從最基本的開始。 PHP有三種最基本的錯誤類型,從低階到進階分別為:專注、警告和錯誤(或致命錯誤)。通常情況下,注重和警告不會終止程式;但是致命錯誤則是危險故障(例如,呼叫沒有定義的函數或參考一個不存在的物件),將導致程式中斷。這些錯誤有可能在啟動、解析、編譯或執行時發生。
要害字如E_NOTICE, E_ERROR等用來表示錯誤的不同型別和等級。在PHP手冊上可以獲得它們的具體資訊清單。
腳本階段錯誤顯示由error_reporting()函數進行控制。此函數針對不同的錯誤等級設定不同的參數。表A給出了使用此函數報告警告和致命錯誤的腳本程式。
表A
<?php // 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
<?php // 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
<?php // 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,其表達的意思是錯誤不被顯示而不是錯誤沒有發生。因此,發生致命錯誤時(例如不正確的函數呼叫),程式將被終止;但是,此時沒有任何訊息顯示給使用者。
以上是php自訂錯誤處理器的詳細內容。更多資訊請關注PHP中文網其他相關文章!