php 錯誤和異常處理

2021-09-07 05:26:15 字數 3530 閱讀 5948

一、錯誤和異常處理

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 了解 預設錯誤處理很簡單,將訊息傳送到瀏覽器,告知檔名,行號,以及描述錯誤的訊息 錯誤處理是很重要的,如果 缺少錯誤檢測編碼,那麼看著很不專業,帶...