溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP錯誤處理

發(fā)布時間:2020-06-14 14:31:31 來源:網(wǎng)絡(luò) 閱讀:297 作者:pcn01 欄目:web開發(fā)

PHP錯誤處理



錯誤的分類:


    語法錯誤:程序沒法運行,直接提示語法錯誤

    運行時錯誤:只有程序運行到某行,或在某此特定的情形下運行才會發(fā)生的錯誤。

    邏輯錯誤:程序從頭到尾運行都沒有發(fā)生(并提示)錯誤,但程序運行計算的結(jié)果是錯誤的。


程序員主要面對的和要處理的錯誤,就是運行時錯誤。


錯誤的分級:

    

    在php中,將各種錯誤,分門別類,依據(jù)不同的嚴重程序和產(chǎn)生的來源(機制),將各種錯誤分為大約十幾個級別。

    每個級別的錯誤,都對應(yīng)一個內(nèi)部的名稱--系統(tǒng)常量!


系統(tǒng)錯誤:


    E_ERROR 系統(tǒng)嚴重錯誤 (一發(fā)生,程序立即停止執(zhí)行。該錯誤一般希望馬上解決)

    E_WARNING 系統(tǒng)警告   (一發(fā)生,提示錯誤,并繼續(xù)執(zhí)行。通常該錯誤希望能夠在“下一工作日”去處理掉)

    E_PARSE 語法錯誤    (一發(fā)生,提示錯誤,而且代碼完全不會運行--在運行之前先檢查語法。)

    E_NOTICE 系統(tǒng)提示    (一發(fā)生,提示錯誤,并繼續(xù)執(zhí)行。發(fā)個郵件通知下,自己安排時間有空去解決。)


    它們的本質(zhì)是什么呢?


echo "<br />E_ERROR =  ".E_ERROR;

echo "<br />E_WARNING =  ".E_WARNING;

echo "<br />E_PARSE =  ".E_PARSE;

echo "<br />E_NOTICE =  ".E_NOTICE;


輸出的結(jié)果分別為:


E_ERROR = 1
E_WARNING = 2
E_PARSE = 4
E_NOTICE = 8


可見它們只是一個系統(tǒng)內(nèi)部的常量(整數(shù)常量);實際上,這些常量(代號)是供我們對該類錯誤進行“控制”的標示符而已。


用戶自定義錯誤:

    只有三個:

    E_USER_ERROR

    E_USER_WARNING

    E_USER_NOTICE

我們可以在程序中,自己創(chuàng)建(生成)錯誤 -- 是為了針對某些數(shù)據(jù)的不合理情形而創(chuàng)建的錯誤

    比如:讓用戶填寫年齡,填18是OK,但填寫188,則就是不合理 -- 從數(shù)字角度本身是沒有問題的


其它錯誤:

    E_ALL       代表所有錯誤 -- 表示它可以“包括”所有錯誤。

    E_STRICT    代表“嚴格性”語法檢查錯誤 -- 某種語法是可以執(zhí)行的,但在當前的php版本是不歡迎使用


錯誤的觸發(fā):

    正常觸發(fā):程序運行時確實發(fā)生了運行錯誤 -- 也可能是語法檢查錯誤

    三種常見的運行時錯誤:

    PHP錯誤處理人工觸發(fā):

    就是由程序員通過程序代碼而“產(chǎn)生”一個錯誤

語法:

    trigger_errer("錯誤提示",用戶錯誤代號);

PHP錯誤處理

應(yīng)用中,通常是需要檢測(判斷)數(shù)據(jù)的有效性,以決定是否觸發(fā)相應(yīng)錯誤,比如:

PHP錯誤處理


錯誤的顯示控制:

    網(wǎng)頁中顯示(提示)錯誤信息,是可以進行控制的,有兩種途徑:

    1:在php.ini文件中設(shè)定,對所有php程序都有效

    2:在當前腳本文件中,只對當前腳本文件有效

錯誤的顯示有2個方面可以進行控制:

    1:設(shè)定是否顯示:display_error

        php.ini中控制:display_error = on; //表示顯示,off表示不顯示

        腳本中:ini_set("display_error",1); //1表示顯示,0表示不顯示,也可以用true or false

        腳本中的設(shè)定優(yōu)先級高,但只對當前文件有效。    

2:設(shè)定顯示哪些級別的錯誤 -- 依賴與第一項設(shè)定為顯示的情況

    php.ini文件中:

        error_reporting = E_NOTICE; //只顯示E_NOTICE錯誤

        error_reporting = E_NOTICE | E_WARNING //顯示E_NOTICE 和 E_WARNING

        error_reporting = E_NOTICE | E_WARNING | E_ERROR //顯示E_NOTICE 和 E_WARNING 和 E_ERROR


ini_set()含義可以設(shè)定幾乎所有php.ini中的設(shè)定項,形式如下:

    ini_set("設(shè)定項名稱",值); //這種設(shè)定都只對當前腳本有效,而且無需重啟apache,很方便

另一個對應(yīng)函數(shù)是:int_get("設(shè)定項名稱"); //用于獲取某項的值。


記錄錯誤日志:

    在開發(fā)階段,我們通常都是顯示所有錯誤 -- 意圖解決錯誤

    在產(chǎn)品階段,我們通常都是隱藏所有錯誤 -- 并同時將錯誤信息記錄到文件中--錯誤日志文件

    我們可以自己查看錯誤日志以解決開發(fā)階段沒有發(fā)現(xiàn)的錯誤問題

記錄錯誤日志同樣有2種途徑:

    1:在php.ini文件中設(shè)定

        log_errors = on;    //用于設(shè)定是否記錄錯誤日志,on or off

        error_log = "錯誤日志文件名";  如:error_log = php_errors.log

        此時,該文件沒有給定路徑,則系統(tǒng)會在每個文件夾下建立該文件并記錄

        error_log還有一個特殊值可以使用:error_log = syslog; 表示不會記錄錯誤日志文件,而是把錯誤信息寫入到系統(tǒng)錯誤日志中

    2:在當前腳本文件中

        ini_set("log_errors",On);    //or Off

        ini_set("error_log",'err1.log');

        ini_set("error_log",'err2.txt');

        ini_set("error_log",'err3.html');

        ini_set("error_log",'syslog);    //記錄到操作系統(tǒng)日志中


自定義錯誤處理:

    以上的錯誤處理,不管是顯示錯誤,還是記錄錯誤日志,都是php語言內(nèi)部實現(xiàn)的。

    我們只是幾個簡單的設(shè)定是否顯示或是否記錄或顯示哪些,或記錄到哪里。

    則:

    自定義錯誤處理,就可以讓我們自己完全控制錯誤的提示內(nèi)容!

    做法非常簡單:

        1:設(shè)定要來運行自定義處理錯誤的函數(shù)名;

        2:自己去定義該函數(shù),并在其中進行任何錯誤信息的輸出

這兩件事做好后,一旦發(fā)生錯誤,則系統(tǒng)就會調(diào)用該 函數(shù)去執(zhí)行里面的代碼


設(shè)定錯誤由我們自定義函數(shù)來處理:set_error_handler("函數(shù)名");

定義該函數(shù),帶4個參數(shù):function errorHandler($errNo,$errMsg,$errFile,$errLine) {......}

PHP錯誤處理

注意:上述自定義處理函數(shù)中,只做了“顯示錯誤”的工作,而沒有做“記錄錯誤日志”的工作。這需要后續(xù)“操作文件”的知識。

測試代碼:

PHP錯誤處理

則界面顯示結(jié)果:

PHP錯誤處理

幾點說明:

    1:一般是用自定義錯誤處理程序,則系統(tǒng)不再處理錯誤

    2:如果一旦發(fā)生嚴重錯誤(E_ERROR , E_USER_ERROR),則立即停止程序,并也不去調(diào)用自定義錯誤處理函數(shù) -- 此時系統(tǒng)錯誤處理工作照常進行 -- 即對于嚴重錯誤,自定義函數(shù)處理不了。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI