php学習の基礎5エラー処理

3855 ワード

  • 簡単な「die()」文
  • die()プログラムを終了し、エラーを出力
    if(!file_exists("welcome.txt"))
     {
     die("File not found");
     }
    else
     {
     $file=fopen("welcome.txt","r");
     }

    2.カスタム・エラー・プロセッサの作成
    カスタムエラープロセッサを作成するのは簡単です.PHPでエラーが発生したときに呼び出すことができる専用関数を簡単に作成しました.この関数は、少なくとも2つのパラメータ(error levelおよびerror message)を処理する能力が必要ですが、最大5つのパラメータ(オプション:file、line-numberおよびerror context):
    error_function(error_level,error_message,
    error_file,error_line,error_context)

    パラメータ
    説明
    error_level
    必要です.ユーザー定義のエラーに対して、エラー・レポート・レベルを指定します.値の数でなければなりません.次の表を参照してください:エラーレポートレベル.
    error_message
    必要です.ユーザー定義のエラーに対してエラーメッセージを指定します.
    error_file
    オプション.エラーが発生したファイル名を指定します.
    error_line
    オプション.エラーが発生した行番号を指定します.
    error_context
    オプション.エラーが発生したときに使用される各変数とその値を含む配列を指定します.
    エラーレポートレベル
    これらのエラー・レポート・レベルは、エラー・ハンドラが処理しようとするエラーの異なるタイプです.

    定数
    説明
    2
    E_WARNING
    致命的でないrun-timeエラー.スクリプトの実行を一時停止しません.
    8
    E_NOTICE
    Run-time通知.スクリプトの検出にエラーが発生する可能性がありますが、スクリプトが正常に実行されている場合に発生する可能性があります.
    256
    E_USER_ERROR
    致命的なユーザーによって生成されたエラー.これは、プログラマがPHP関数trigger_を使用するのと同じです.Error()設定のE_ERROR.
    512
    E_USER_WARNING
    致命的でないユーザーが生成した警告.これは、プログラマがPHP関数trigger_を使用するのと同じです.Error()設定のE_WARNING.
    1024
    E_USER_NOTICE
    ユーザーが生成した通知.これは、プログラマがPHP関数trigger_を使用するのと同じです.Error()設定のE_NOTICE.
    4096
    E_RECOVERABLE_ERROR
    キャプチャ可能な致命的なエラー.類似E_ERRORは、ユーザ定義のプロセッサによってキャプチャされることができる.(set_error_handler()参照)
    8191
    E_ALL
    すべてのエラーと警告、レベルEを除くSTRICT以外.(PHP 6.0でE_STRICTはE_ALLの一部)
    次に、エラーを処理する関数を作成します.
    function customError($errno, $errstr)
     { 
     echo "<b>Error:</b> [$errno] $errstr<br />";
     echo "Ending Script";
     die();
     }

    上のコードは簡単なエラー処理関数です.トリガーされると、エラー・レベルとエラー・メッセージが取得されます.エラー・レベルとメッセージが出力され、スクリプトが終了します.
    これで、エラー処理関数を作成しました.この関数がいつトリガーされるかを決定する必要があります.
    Set Error Handler
    PHPのデフォルトエラーハンドラは内蔵のエラーハンドラです.上記の関数をスクリプト実行中のデフォルトのエラーハンドラに変更するつもりです.
    エラーハンドラは、いくつかのエラーにのみ適用されるように変更できます.これにより、スクリプトは異なる方法で異なるエラーを処理できます.ただし、この例では、すべてのエラーに対してカスタムエラーハンドラを使用する予定です.
    set_error_handler("customError");

    すべてのエラーを処理するためにカスタム関数を望んでいるので、set_error_handler()には1つのパラメータしか必要ありません.2番目のパラメータを追加してエラーレベルを指定できます.
    ≪インスタンス|Instance|emdw≫
    このエラーハンドラは、存在しない変数を出力しようとすることによってテストされます.
    <?php
    //error handler function
    function customError($errno, $errstr)
     { 
     echo "<b>Error:</b> [$errno] $errstr";
     }
    
    //set error handler
    set_error_handler("customError");
    
    //trigger error
    echo($test);
    ?>

    上記のコードの出力は、次のようになります.
    Error: [8] Undefined variable: test

    エラーレコード
    デフォルトではphp.iniのerror_log構成、PHPはサーバのエラー記録システムまたはファイルにエラー記録を送信する.error_を使用することでlog()関数で、指定したファイルまたはリモート宛先にエラーレコードを送信できます.
    エラーメッセージをEメールで送信することは、指定したエラーの通知を得るための良い方法です.
    E-Mailによるエラーメッセージの送信
    次の例では、特定のエラーが発生した場合、エラーメッセージのあるEメールを送信し、スクリプトを終了します.
    <?php
    //error handler function
    function customError($errno, $errstr)
     { 
     echo "<b>Error:</b> [$errno] $errstr<br />";
     echo "Webmaster has been notified";
     error_log("Error: [$errno] $errstr",1,
     "[email protected]","From: [email protected]");
    }
    
    //set error handler
    set_error_handler("customError",E_USER_WARNING);
    
    //trigger error
    $test=2;
    if ($test>1)
     {
     trigger_error("Value must be 1 or below",E_USER_WARNING);
     }
    ?>

    上記のコードの出力は、次のようになります.
    Error: [512] Value must be 1 or below
    Webmaster has been notified

    上記のコードから受信したメールは、次のようになります.
    Error: [512] Value must be 1 or below

    この方法はすべての間違いに合わない.通常のエラーは、デフォルトのPHP記録システムを使用してサーバに記録する必要があります.