一、錯誤和異常處理1.1錯誤型別和基本的除錯方法
php程式的錯誤發生一般歸屬於下列三個領域:
語法錯誤:
語法錯誤最常見,並且也容易修復。如:**中遺漏乙個分號。這類錯誤會阻止指令碼的執行。
執行時錯誤:
這種錯誤一般不會阻止php指令碼的執行,但會阻止當前要做的事情。輸出一條錯誤,但php指令碼繼續執行
邏輯錯誤:
這種錯誤最麻煩,既不阻止指令碼執行,也不輸出錯誤訊息。
乙個異常則是在乙個程式執行過程中出現的乙個例外,或是乙個事件,它中斷了正常指令的執行,跳轉到其他程式模組繼續執行。
php的錯誤報告級別
e_all
//所有資訊值:6143
e_error
//致命的執行時錯誤值:1
e_recoverable_error //
接近致命的執行時錯誤,若未**獲則視同e_error 值:4096
e_warning
//執行時警告(非致命性錯誤) 值:2
e_parse
//編譯時解析錯誤值:4
e_notice
//e_strict
//編碼標準化警告(建議如何修改以向前相容) 值:2048
e_core_error
//php啟動時初始化過程中的致命錯誤值:16
e_core_warning
//php啟動時初始化過程中的警告(非致命性錯)值:32
e_compile_error
//編譯時致命性錯值:64
e_compile_warning
//編譯時警告(非致命性錯) 值:128
e_user_error
//使用者自定義的致命錯誤值:256
e_user_warning
//使用者自定義的警告(非致命性錯誤) 值:512
e_user_notice
配置檔案
display_errors:是否開啟php輸出錯誤報告的功能
值為:on(預設輸出錯誤報告)、off(遮蔽所有錯誤資訊)
在php指令碼中可呼叫ini_set( )函式,動態設定php.ini配置檔案.如:
ini_set("display_errors","on"); //
顯示所有錯誤資訊
error_reporting:設定不同的錯誤報告級別。
error_reporting= e_all & ~e_notice
--可以丟擲任何非注意的錯誤,預設值
error_reporting= e_error | e_parse | e_core_error
--只考慮致命的執行時錯誤、新解析錯誤和核心錯誤。
error_reporting= e_all & ~(e_user_error | e_user_warning | e_user_notice
)--報告除使用者導致的錯誤之外的所有錯誤。
在php指令碼可以通過error_reporting( )函式動態設定錯誤報告級別。如:
error_reporting(e_all
);]設定錯誤級別例項:error.php
<?php
/*開啟php.ini中的display_errors指令,只有該指令開啟如有錯誤報告才能輸出
*/ini_set('display_errors',1);
/*通過error_reporting()函式設定在本指令碼中,輸出所有級別的錯誤報告
*/error_reporting(e_all
);/*
「注意(notice)」的報告,不會阻止指令碼的執行,並且不一定是乙個問題
*/gettype($var);//
呼叫函式時提供的引數變數沒有在之前宣告
/*「警告(warning)」的報告,指示乙個問題,但是不會阻止指令碼的執行
*/gettype();//
呼叫函式時沒有提供必要的引數
/*「錯誤(error)」的報告,它會終止程式,指令碼不會再向下執行
*/get_type();
//呼叫乙個沒有被定義的函式
?>php錯誤報告行為的配置指令
display_startup_errors=off
是否顯示php引擎在初始化時遇到的錯誤。
log_errors=on
決定日誌語句記錄的位置。
error_log
(預設null)
指定錯誤寫進的檔案或記錄錯誤日誌於系統日誌syslog。
log_errors_max_len=1024每個日誌項的最大長度,單位是位元組。0表示最大。
1.2錯誤日誌
兩種方式記錄錯誤日誌:
使用指定的檔案記錄錯誤報告日誌
錯誤日誌記錄到作業系統的日誌裡
使用指定的檔案記錄錯誤報告日誌
1、先配置php.ini:
error_reporting= e_all
//將向php傳送每個錯誤
display_errors=off//
不顯示錯誤報告
log_errors=on//
決定日誌語句記錄的位置。
log_errors_max_log=1024//
每個日誌項的最大長度
error_log=g:/myerror.log
//指定錯誤寫進的檔案
2、使用函式:在php檔案中使用error_log()來記錄日誌,就可以將資訊寫入到myerror.log檔案中
如:error_log("登入失敗了!");
2、使用四個函式來記錄日誌:
define_syslog_variables();//
為系統日誌初始化配置
openlog();//
開啟乙個日誌鏈結
syslog();//
傳送一條日誌例子
<?php
if(!ora_logon($username, $password
))if(!($foo=allocate_new_foo())
error_log("搞砸了!",2, "localhost:5000");
//傳送到本機對應5000埠的伺服器中
error_log("搞砸了!", 3, "/usr/local/errors.log");
//傳送到指定的檔案中
?><?php
define_syslog_variables
();openlog("php5", log_pid ,log_user);
closelog
();?>檢視日誌:如windows系統,通過右擊「我的電腦」-> 選擇管理選項->在系統工具選單中選擇事件檢視器->在應用程式選項中即可看到日誌了
1.3異常處理
異常(exception
)處理用於在指定的錯誤發生時改變指令碼的正常流程。是php5中的乙個新的重要特性。異常處理是一種可擴充套件、易維護的錯誤處理統一機制,
並提供了一種新的物件導向的錯誤處理方式。
異常處理格式:
trycatch
(異常物件引數)[
catch
(。,,)]
php錯誤和異常處理
php為異常處理提供了內建類 exception。其建構函式需要兩個引數 除了建構函式外,改類還提供了如下所示的內建方法 getcode 返回傳遞給建構函式的 getmessage 返回傳遞給建構函式的訊息 getfile 返回產生異常的 檔案的完整路徑 getline 返回 檔案中產生異常的 行號...
PHP 錯誤,異常處理
ini set display errors false 影響的是否在php頁輸出錯誤資訊,但不影響在錯誤日誌檔案輸出 error reporting 0 錯誤級別,影響在php頁輸出及日誌檔案輸出 error log aaa 函式向錯誤日誌寫一條資訊,但是不受set error handler s...
php 高階(錯誤處理和異常處理)
1.回顧 上篇學習了php中關於cookie和session的操作 2.這篇學習php高階中的錯誤處理和exception異常處理 3.錯誤處理 3.1 了解 預設錯誤處理很簡單,將訊息傳送到瀏覽器,告知檔名,行號,以及描述錯誤的訊息 錯誤處理是很重要的,如果 缺少錯誤檢測編碼,那麼看著很不專業,帶...