溫馨提示×

溫馨提示×

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

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

PHP錯誤處理

發布時間:2020-06-14 14:31:31 來源:網絡 閱讀:314 作者:pcn01 欄目:web開發

PHP錯誤處理



錯誤的分類:


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

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

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


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


錯誤的分級:

    

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

    每個級別的錯誤,都對應一個內部的名稱--系統常量!


系統錯誤:


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

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

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

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


    它們的本質是什么呢?


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

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

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

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


輸出的結果分別為:


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


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


用戶自定義錯誤:

    只有三個:

    E_USER_ERROR

    E_USER_WARNING

    E_USER_NOTICE

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

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


其它錯誤:

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

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


錯誤的觸發:

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

    三種常見的運行時錯誤:

    PHP錯誤處理人工觸發:

    就是由程序員通過程序代碼而“產生”一個錯誤

語法:

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

PHP錯誤處理

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

PHP錯誤處理


錯誤的顯示控制:

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

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

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

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

    1:設定是否顯示:display_error

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

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

        腳本中的設定優先級高,但只對當前文件有效。    

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

    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()含義可以設定幾乎所有php.ini中的設定項,形式如下:

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

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


記錄錯誤日志:

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

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

    我們可以自己查看錯誤日志以解決開發階段沒有發現的錯誤問題

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

    1:在php.ini文件中設定

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

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

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

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

    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);    //記錄到操作系統日志中


自定義錯誤處理:

    以上的錯誤處理,不管是顯示錯誤,還是記錄錯誤日志,都是php語言內部實現的。

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

    則:

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

    做法非常簡單:

        1:設定要來運行自定義處理錯誤的函數名;

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

這兩件事做好后,一旦發生錯誤,則系統就會調用該 函數去執行里面的代碼


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

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

PHP錯誤處理

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

測試代碼:

PHP錯誤處理

則界面顯示結果:

PHP錯誤處理

幾點說明:

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

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


向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女