中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

PHP之錯誤處理

發布時間:2020-05-24 14:01:07 來源:網絡 閱讀:298 作者:jjjssswww 欄目:web開發

錯誤報告

  PHP程序的錯誤發生一般歸屬于下列三個領域:

  1、語法錯誤

  語法錯誤最常見,并且也容易修復。如:代碼中遺漏一個分號。這類錯誤會阻止腳本的執行

  2、運行時錯誤

  這種錯誤一般不會阻止PHP腳本的執行,但會阻止當前要做的事情。輸出一條錯誤,但php腳本繼續執行

  3、邏輯錯誤

  這種錯誤最麻煩,既不阻止腳本執行,也不輸出錯誤消息

  [注意]若將php.ini配置文件中的display_errors從默認的on設置為off,將不顯示任何錯誤

  在PHP腳本中可調用ini_set()函數,動態設置php.ini配置文件

ini_set("display_errors","On"); //顯示所有錯誤信息

PHP之錯誤處理

 

錯誤級別

PHP之錯誤處理

  實際上,表格中的13個錯誤類型可以分為3類:注意級別、警告級別和錯誤級別。一般地,在開發過程中,忽略注意級別的錯誤

PHP之錯誤處理

<?php    getType($a);//未定義變量,注意級別
    echo "1111111111111111<br>";    getType();//未傳入參數,警告級別
    echo "222222222222222222222<br>";

    getType3();//函數名錯誤,錯誤級別
    echo "333333333333333333333<br>";?>

PHP之錯誤處理

PHP之錯誤處理

錯誤處理

1、第一種錯誤處理方法是修改配置文件

PHP之錯誤處理

  錯誤級別默認為提示所有級別的錯誤:error_reporting = E_ALL

  把error_reporting = E_ALL改為error_reporting = E_ALL & ~E_NOTICE 表示不提示注意級別的錯誤。然后,重啟服務生效

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)    報告除用戶導致的錯誤之外的所有錯誤

2、第二種錯誤處理方法是使用錯誤處理函數

  在PHP腳本可以通過error_reporting( )函數動態設置錯誤報告級別

PHP之錯誤處理

<?php    error_reporting(E_ALL & ~E_NOTICE);    getType($a);//注意級別
    echo "1111111111111111<br>";    getType();//警告級別
    echo "222222222222222222222<br>";

    getType3();//錯誤級別
    echo "333333333333333333333<br>";?>

PHP之錯誤處理

PHP之錯誤處理

 

自定義錯誤處理

  自定義錯誤報告的處理方式,可以完全繞過標準的PHP錯誤處理函數,這樣就可以按自己定義的格式打印錯誤報告,或改變錯誤報告打印的位置,以下幾種情況可以考慮自定義錯誤處理:1、記下錯誤的信息,及時發現一些生產環境出現的問題;2、屏蔽錯誤;3、控制錯誤的輸出; 4、作為調試工具

  使用set_error_handler()函數來設置用戶自定義錯誤處理

PHP之錯誤處理

<?php    //error_reporting(E_ALL & ~E_NOTICE);
    //在php中注冊一個函數來處理錯誤報告,替代默認的方式
    set_error_handler("myerrorfun");    $mess = "";    //自定義錯誤報告處理函數
    function myerrorfun($error_type, $error_message, $error_file, $error_line) {        global $mess;        $mess.="發生錯誤級別為{$error_type}類型, 錯誤消息<b>{$error_message}</b>, 在文件<font style='color:red'>{$error_file}</font>中, 第{$error_line}行。<br>";    
    }    getType($a);    echo "1111111111111111<br>";    getType();    echo "222222222222222222222<br>";    echo "--------------------------------------------<br>";    echo $mess;?>

PHP之錯誤處理

PHP之錯誤處理

 

錯誤日志

  一般地,程序都會保存錯誤日志,用來記錄程序運行時的錯誤信息。且錯誤日志都有其默認的存儲位置。對于錯誤信息和錯誤日志的位置,我們都可以進行修改

  在PHP.ini配置文件中,有以下幾項可以對錯誤日志進行設置

error_reporting = E_ALL  //將向PHP發送每個錯誤display_errors=Off       //不顯示錯誤報告log_errors=On            //決定日志語句記錄的位置log_errors_max_log=1024  //每個日志項的最大長度error_log=G:/myerror.log //指定錯誤寫進的文件

  在php文件中,我們可以使用函數error_log()來自定義錯誤信息

<?phperror_log("登錄失敗了!");?>

PHP之錯誤處理

 

異常處理

  異常(Exception)處理用于在指定的錯誤發生時改變腳本的正常流程,是PHP5中的一個新的重要特性。異常處理是一種可擴展、易維護的錯誤處理機制,并提供了一種新的面向對象的錯誤處理方式

PHP之錯誤處理

try{  
    使用try去包含可能會發生異常的代碼
    一旦出現異常try進行捕獲異常,交給catch處理。
    拋出異常語句:throw 異常對象。
}catch(異常對象參數){
    在這里做異常處理。
}[catch(。,,){    .. .. ..}]

PHP之錯誤處理

PHP之錯誤處理

<?php    try {        $error = 'Always throw this error';        throw new Exception($error);   
        //創建一個異常對象,通過throw語句拋出
        echo 'Never executed';         
        //從這里開始,try代碼塊內的代碼將不會再被執行
    } catch (Exception $e) {        echo ‘Caught exception: ’.$e->getMessage()."\n"; //輸出捕獲的異常消息    }    echo 'Hello World'; //程序沒有崩潰繼續向下執行?>

PHP之錯誤處理

 

自定義異常

  用戶可以用自定義的異常處理類來擴展PHP內置的異常處理類。以下的代碼說明了在內置的異常處理類中,哪些屬性和方法在子類中是可訪問和可繼承的

PHP之錯誤處理

<?phpclass Exception{    protected $message = 'Unknown exception';   // 異常信息
    private   $string;                          // __toString cache
    protected $code = 0;                        // 用戶自定義異常代碼
    protected $file;                            // 發生異常的文件名
    protected $line;                            // 發生異常的代碼行號
    private   $trace;                           // backtrace
    private   $previous;                        // previous exception if nested exception

    public function __construct($message = null, $code = 0, Exception $previous = null);    final private function __clone();           // Inhibits cloning of exceptions.

    final public  function getMessage();        // 返回異常信息
    final public  function getCode();           // 返回異常代碼
    final public  function getFile();           // 返回發生異常的文件名
    final public  function getLine();           // 返回發生異常的代碼行號
    final public  function getTrace();          // backtrace() 數組
    final public  function getPrevious();       // 之前的 exception
    final public  function getTraceAsString();  // 已格成化成字符串的 getTrace() 信息

    // Overrideable
    public function __toString();               // 可輸出的字符串}?>

PHP之錯誤處理

  [注意]如果使用自定義的類來擴展內置異常處理類,并且要重新定義構造函數的話,建議同時調用parent::__construct()來檢查所有的變量是否已被賦值。當對象要輸出字符串的時候,可以重載__toString() 并自定義輸出的樣式

PHP之錯誤處理

<?php    /* 自定義的一個異常處理類,但必須是擴展內異常處理類的子類 */
    class MyException extends Exception{        //重定義構造器使第一個參數 message 變為必須被指定的屬性
        public function __construct($message, $code=0){            //可以在這里定義一些自己的代碼
         //建議同時調用 parent::construct()來檢查所有的變量是否已被賦值
            parent::__construct($message, $code);
        }    
        public function __toString() {        
          //重寫父類方法,自定義字符串輸出的樣式
          return __CLASS__.":[".$this->code."]:".$this->message."<br>";
        }        public function customFunction() {    
             //為這個異常自定義一個處理方法
             echo "按自定義的方法處理出現的這個類型的異常<br>";
        }
    }?>

PHP之錯誤處理

PHP之錯誤處理

<?php   try { //使用自定義的異常類捕獲一個異常,并處理異常
        $error = '允許拋出這個錯誤';       
        throw new MyException($error);    
             //創建一個自定義的異常類對象,通過throw語句拋出
        echo 'Never executed'; 
            //從這里開始,try代碼塊內的代碼將不會再被執行
    } catch (MyException $e) {        //捕獲自定義的異常對象
        echo '捕獲異常: '.$e;        //輸出捕獲的異常消息
        $e->customFunction();  //通過自定義的異常對象中的方法處理異常    }    echo '你好呀';              //程序沒有崩潰繼續向下執行?>


向AI問一下細節

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

php
AI

东丰县| 大同市| 莱阳市| 鲁山县| 鸡泽县| 资讯| 彭泽县| 衡水市| 车险| 南木林县| 罗平县| 衡阳县| 资讯| 绍兴市| 会东县| 乌审旗| 大英县| 浦城县| 米易县| 二连浩特市| 越西县| 和静县| 铜陵市| 荔波县| 惠水县| 芒康县| 裕民县| 北票市| 抚顺县| 石柱| 前郭尔| 永靖县| 沧源| 社旗县| 宿州市| 屯留县| 台山市| 龙井市| 彭阳县| 宁津县| 汉中市|