程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 利用PHP自定義錯誤處理器處理出錯信息

利用PHP自定義錯誤處理器處理出錯信息

編輯:關於PHP編程

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

幸運的是,這裡有解決辦法。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,其表達的意思是錯誤不被顯示而不是錯誤沒有發生。因此,發生致命錯誤時(例如不正確的函數調用),程序將被終止;但是,此時沒有任何消息顯示給用戶。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved