phpのエラー処理

4612 ワード

作成したプログラムは実行中にエラーや警告などが発生する可能性があります.php解釈器がphpファイルの実行を説明すると、phpエラーが発生すると、問題が外部に投げ出されます.
具体的にはphp.iniプロファイルで構成します.phpエラーは多くのレベルに分けられ、詳細は以下の通りです.
  • E_ERROR:致命的な実行エラー、スクリプト実行を停止します
  • E_WARNING:実行時の警告メッセージ、スクリプト実行を停止しない
  • E_PARSE:構文解析エラー
  • E_NOTICE:実行Yesのメッセージ情報
  • E_CORE_ERROR:類似E_ERROR、ただしphpコアエラー
  • は含まれない
  • E_CORE_WARNING:類似E_WARNING、ただしphpコア警告
  • は含まれていません
  • E_COMPILE_ERROR:致命的なコンパイルエラー
  • E_COMPILE_WARNING:致命的なコンパイル警告
  • E_USER_ERROR:ユーザによるエラー
  • E_USER_WARNING:ユーザーによる警告
  • E_USER_NOTICE:ユーザによるメッセージ
  • E_ALL:すべてのエラー、メッセージ、メッセージ.
  • E_SCRIPT:phpバージョンマイグレーションの互換性と操作性に関する推奨
  • プログラムが開発中にphpエラーメッセージを見たい場合はphp.iniファイルでdisplay_errors構成項目はonに設定されています(プログラムがオンラインで実行される場合は、必ずdisplay_errorsをオフにしてください.そうしないと、サーバに関する情報が漏れやすく、さらなる攻撃のために敷き詰められます).また、error_ではphpレポートエラーのレベルを定義することもできます.Reporting構成項目.
    <html>
        <head>
            <title>php     </title>
            <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        </head>
        <body>
            <?php 
                echo ini_get("log_errors") . "<br />";
                echo ini_get("display_errors") . "<br />";
                ini_set("display_errors", 1); //  php     (       )
                error_reporting(E_ALL&~(E_WARNING | E_NOTICE));//  php       ,   E_WARNING E_NOTICE     
                gettype($name);//         
                gettype();//     ,         
                getName();//            
            ?>
        </body>
    </html>

    上のコードにgetName()という行のコードから放出されたエラーメッセージが入力されます.
    11
    ( ! ) Fatal error: Call to undefined function getName() in/home/youthflies/work/workspace/php/test/test3.php on line 15Call Stack#TimeMemoryFunctionLocation10.0268126916{main}( )../test3.php:0
     
     
    また、エラー処理関数をカスタマイズすることで、エラー情報をいつでも記録したり、エラー出力を遮断したり(ハッカー攻撃を防止したり)、フレンドリーなエラーページを指定したりすることができます.一般的にset_を使うerror_handler()関数は、エラー処理関数を手動で指定します.
    <?php
        //      ,             
        error_reporting(0);
                                   
        /**
         *    Error_Handler  ,  set_error_handler()       ,          
         * @param   int $error_level        
         * @param   string  $error_message      
         * @param   string  $file          
         * @param   int $line          
         */
        function error_handler($error_level, $error_message, $file, $line)
        {
            $EXIT = FALSE;
            switch ($error_level)
            {
                //    
                case E_ERROR:
                case E_USER_ERROR:
                    $error_type = "Fatal Error";
                    $EXIT = true;
                    break;
                                               
                //    
                case E_NOTICE:
                case E_USER_NOTICE:
                    $error_type = "Notice";
                    break;
                                               
                //    
                case E_WARNING:
                case E_USER_WARNING:
                    $error_type = " Warning";
                    break;
                                               
                //      
                default:
                    $error_type = "Unknown";
                    $EXIT = true;
                    break;
            }
            //          ,      ,       ,     
            printf("<font clolr='#FF0000'><b>%s</b></font>:%s in <b>%s</b> on line <b> %d </b><br>n", $error_type, $error_message, $file, $line);
            if($EXIT == true)
                echo '<script>location="error.html"</script>';
        }
        //        
        set_error_handler('error_handler');
                                   
        //       notice
        echo $name;
        //  0  
        echo 10/0;
        //      
        trigger_error('    ', E_USER_ERROR);
    ?>

    phpを変更します.Iniプロファイル.エラー情報を指定したファイルに出力できます.
    error_reporting = E_ALL ;各エラー、警告を投げ出す
    display_errors = Off ; エラー表示を閉じる
    log_errors = On ;ログ文の記録場所の決定
    log_errors_max_len = 1024 ;各ログ・アイテムの最大長
    error_log =/home/yourname/work/error.log ; エラー・ログ・ファイルの指定
    変更が完了したら、Webサーバを再起動すると有効になります.その後、エラーを含むphpコードを実行すると、エラー情報がerrorに書き込まれる.ロゴにあります.
    エラー情報をカスタマイズすることもできますerror_log()関数では、エラーをカスタマイズできます.
    error_log("This is an error", 3, "/home/yourname/work/error.log");

    1番目のパラメータはエラー内容であり、2番目のパラメータはエラー情報の出力位置を指定し、空にするとphpがデフォルトとなる.iniが指定した場所、0はオペレーティングシステムログ、1はphp mail()関数を使用して送信すること、2はエラーメッセージをtcpに送信すること(このとき3番目のパラメータはターゲットIPおよびポートを表す)、3はネイティブファイルに保存することを示す.