10.1.2 自定義PHP的錯誤報告處理方式

10.1.2 自定義PHP的錯誤報告處理方式

自定義錯誤報告的處理方式,可以完全繞過標(biāo)準(zhǔn)的PHP錯誤處理函數(shù),這樣就可以按自己定義的格式打印錯誤報告,或改變錯誤報告打印的位置,以下幾種情況可以考慮自定義錯誤處理。
可以記下錯誤的信息,及時發(fā)現(xiàn)一些生產(chǎn)環(huán)境出現(xiàn)的問題
可以屏蔽錯誤。
可以控制錯誤的輸出。
可以作為調(diào)試工具。
使用set_error_handler()函數(shù)來設(shè)置用戶自定義錯誤處理。

<?php
    /**
        定義Error_Handler函數(shù),
       作為set_error_handler()的第一個參數(shù)"回調(diào)"
        @param  int     $error_level  錯誤級別
        @param string $error_message  錯誤信息
        @param  string  $file            錯誤所在文件
        @param  int     $lin               錯誤所在行數(shù)
    */
    function error_handler($error_level,
     $error_message, $file, $line) {
          $EXIT = FALSE;
          switch( $error_level ) {
              //提醒級別
              case E_NOTICE:
              case E_USER_NOTICE :
                   $error_type = 'Notice'; break;
        
               //警告級別
              case E_WARNING:
              case E_USER_WARNING:
                   $error_type = 'Warning'; break;
                //錯誤級別
               case E_ERROR:
               case E_USER_ERROR:
                      $error_type = 'Fatal Error';
                      $EXIT = TRUE; break;
               
               //其他末知錯誤
               default:
                      $error_type = 'Unknown';
                      $EXIT = TRUE; break;
        }
        //直接打印錯誤信息,也可以寫文件或數(shù)據(jù)庫
        printf ("<font color='#FF0000'><b>%s</b></font>: %s in <b>%s</b> on line <b>%d</b><br>\n", $error_type, $error_message, $file, $line);
        
        //若出現(xiàn)錯誤則跳轉(zhuǎn)到友好錯誤提示頁面
        if(TRUE === $EXIT) {
           echo '<script>location="er.html" </script>';
        }
 }

error_reporting(0); //屏蔽程序中的錯誤
    
    set_error_handler('error_handler'); //這個才是關(guān)鍵點(diǎn),把錯誤的處理交給error_handler()
    
    echo $novar; //使用末定義的變量要報 notice 的
    
    echo 3/0;  //除以0要報警告的
    
    trigger_error('Trigger a fatal error', E_USER_ERROR); //自定義一個錯誤
?>

通過上面測試代碼可以很好解決安全和調(diào)試方面的矛盾,但注意
E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不會被這個句柄處理的,也就是會用原始的方式顯示,不過通常情況下不會發(fā)生。
使用set_error_handler()后,error_reporting()將會失效。也就是所有錯誤都是由自定義的函數(shù)處理。

test.php

<?php
//  error_reporting(E_ALL & ~E_NOTICE);
    //在php中注冊一個函數(shù), 來處理錯誤報告, 而不按原來的方式處理了
    set_error_handler("myerrorfun");

    $mess = "";
    //自己的錯誤報告處理函數(shù)
    function myerrorfun($error_type, $error_message, $error_file, $error_line) {
    
        global $mess;
        $mess.="發(fā)生錯誤級別為{$error_type}類型, 錯誤消息<b>{$error_message}</b>, 在文件<font color='red'>{$error_file}</font>中, 第{$error_line}行。<br>";

        
    }



    getType($a);

    echo "1111111111111111<br>";

    getType();

    echo "222222222222222222222<br>";

//  getType3();

    echo "333333333333333333333<br>";


    
    echo "---------------------------------------------------------<br>";
    echo $mess;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,600評論 19 139
  • PHP錯誤簡介 PHP提供了錯誤處理和日志記錄的功能. 這些函數(shù)允許你定義自己的錯誤處理規(guī)則,以及修改錯誤...
    四月不見閱讀 4,631評論 0 7
  • 簡介 PHP提供了錯誤處理和日志記錄的功能. 這些函數(shù)允許你定義自己的錯誤處理規(guī)則,以及修改錯誤記錄的方式. 這樣...
    零一間閱讀 739評論 0 2
  • php.ini設(shè)置,上傳大文件: post_max_size = 128Mupload_max_filesize ...
    bycall閱讀 7,008評論 3 64
  • 此內(nèi)容是對文件 zblogphp1.5.1\zb_system\function\c_system_debug.p...
    f675b1a02698閱讀 534評論 0 0

友情鏈接更多精彩內(nèi)容