php基礎之錯誤處理

2021-07-22 21:32:12 字數 4674 閱讀 1033

php中,將各種錯誤進行了不同級別的劃分,大約有十多個級別,這就是技術層面的錯誤分級。

每個級別的錯誤都有相應代號,就是系統內部定義的乙個常量。

常見的錯誤級別有如下幾種:

echo

"";// 系統常見錯誤

echo

"e_error = " . e_error . ",\t\t其對於的二進位制值為:" . getbinstr(e_error);

echo

"e_warning = " . e_warning . ",\t\t其對於的二進位制值為:" . getbinstr(e_warning);

echo

"e_notice = " . e_notice . ",\t\t其對於的二進位制值為:" . getbinstr(e_notice);

echo e_notice;

// 使用者自定義錯誤

echo

"e_user_error = " . e_user_error . ",\t其對於的二進位制值為:" . getbinstr(e_user_error);

echo

"e_user_warning = " . e_user_warning . ",\t其對於的二進位制值為:" . getbinstr(e_user_warning);

echo

"e_user_notice = " . e_user_notice . ",\t其對於的二進位制值為:" . getbinstr(e_user_notice);

// 其他

echo

"e_strict = " . e_strict . ",\t其對於的二進位制值為:" . getbinstr(e_strict);

echo

"e_all = " . e_all . ",\t\t其對於的二進位制值為:" . getbinstr(e_all);

echo

"

";

function getbinstr($e)

輸出結果為:

e_error =1,       其對於的二進位制值為:0000000000000001

e_warning = 2, 其對於的二進位制值為:0000000000000010

e_notice = 8, 其對於的二進位制值為:00000000000010008

e_user_error = 256, 其對於的二進位制值為:0000000100000000

e_user_warning = 512, 其對於的二進位制值為:0000001000000000

e_user_notice = 1024, 其對於的二進位制值為:0000010000000000

e_strict = 2048, 其對於的二進位制值為:0000100000000000

e_all = 32767, 其對於的二進位制值為:0111111111111111

程式執行中,確實出現了某種錯誤,此時系統就會報錯。常見的有以下三種:

提示性錯誤,會輸出錯誤提示,並繼續執行後面的**
echo

$a;

notice: undefined variable: a in d:\phpstormprojects\study\day05\php_error_record.php on line 31
比如使用了未定義的變數。

警告性錯誤:會輸出錯誤提示,並繼續執行後續**(也可能看具體情況,比如require),比如引用了不存在的檔案
include

".test.php";

warning: include(.test.php): failed to open stream: no such file or directory in d:\phpstormprojects\study\day05\php_error_record.php on line 37

致命錯誤,導致程式無法執行後續語句,比如呼叫乙個不存在的函式
undefinedfuntion();
fatal error: call to undefined function undefinedfuntion() in d:\phpstormprojects\study\day05\php_error_record.php on line 37

當我們在處理某些資料時,資料本身沒有問題,可能和我們當前的場景業務來說是不滿足的,這時候,就需要我們自己去主動觸發乙個錯誤,來表示資料的非法性。

示例如下:

//trigger_error("錯誤提示內容",3種使用者錯誤代號之一);

//如果出發了e_user_error,也會終止後面**的執行

trigger_error("主動觸發錯誤",e_user_notice);

( ! ) notice: 主動觸發錯誤 in d:\phpstormprojects

\study

\day05\php_error_record.php on line 35

call stack

# time memory function location

1 0.0020 143856 ( ) ..\php_error_record.php:0

2 0.0111 144280 trigger_error ( ) ..\php_error_record.php:35

; default

value: on// 預設

; development value: on//開發環境

; production value: off//生產環節

; display_errors = on

在此檔案中修改後,需要重啟才能生效。

ps:需要在apache中裝載了php.ini檔案,在apache的配置httpd.config中加入如下配置:

phpinidir  「php.ini檔案所在的目錄」
ini_set("display_errors", 1);//0or

false 關閉 1

ortrue 開啟

使用php.ini配置,作用的是全域性。

php指令碼中通過ini_set()設定,作用的是當前檔案

指令碼中的設定優先於php.ini中的設定

前提是需要開啟錯誤日誌的輸出。display_errors為1或true

; default value: e_all & ~e_notice

; development value: e_all | e_strict

; production value: e_all & ~e_deprecated

; error_reporting = e_all

ini_set("error_reporting", e_all | e_strict);
ps:e_all | e_strict才是代表顯示所有錯誤。

將錯誤資訊儲存到檔案中,方便查閱

php.ini中:log_errors = on    或 off

php指令碼中:ini_set("log_errors",1);

// 提供乙個檔名,系統會自動在當前目錄下建對應的檔案,並把錯誤資訊寫入該檔案

ini_set("error_log", "my_error.txt");

//使用乙個特殊的名字,如果發生錯誤,則會記錄在系統的日誌檔案中。

//控制面板->管理工具->事件檢視器->

window日誌->應用程式

ini_set("error_log", "syslog");

當發生錯誤時,由開發者對錯誤進行處理,而不是交由系統處理,其實就是定義乙個函式。

a. 設定要處理錯誤的函式名

set_error_handler("onerrorhandler");
b. 定義該函式,實現自己的錯誤處理

/**

*@param $errcode 錯誤代號

*@param $errmsg 錯誤資訊

*@param $errfile 錯誤所在的檔案

*@param $errline 錯誤錯在的行

*/function onerrorhandler($errcode, $errmsg, $errfile, $errline)

好了,php簡單的錯誤處理,簡記這些了~

PHP基礎 錯誤處理

錯誤分類 1.語法錯誤 2.執行時錯誤 3.邏輯錯誤 系統錯誤 e error 系統嚴重錯誤 e warning 系統警告 e parse 語法錯誤 e notice 系統提示 使用者自定義錯誤 e user error e user warning e user notice其他 e all 所有...

PHP基礎 錯誤處理

指的是系統 或者使用者 在對某些 進行執行的時候,發現有錯誤,就會通過錯誤處理的形式告知程式設計師 錯誤分類 1 語法錯誤 在編譯過程中不通過,所以 不會執行 parse error 2 執行時錯誤 編譯通過,但是 在執行的過程中會出現一些條件不滿足導致的錯誤 runtime error 3 邏輯錯...

PHP 錯誤處理

在 php 中,預設的錯誤處理很簡單。一條訊息會被傳送到瀏覽器,這條訊息帶有檔名 行號以及一條描述錯誤的訊息。在建立指令碼和 web 應用程式時,錯誤處理是乙個重要的部分。如果您的 缺少錯誤檢測編碼,那麼程式看上去很不專業,也為安全風險敞開了大門。本教程介紹了 php 中一些最為重要的錯誤檢測方法。...