ホームページ  >  記事  >  バックエンド開発  >  PHPカスタムエラー処理

PHPカスタムエラー処理

小云云
小云云オリジナル
2017-11-15 16:33:282099ブラウズ

通常、PHP は致命的なエラーを直接出力し、開発者が問題を簡単に特定できるように、エラーの原因 (ファイル アドレス、行番号) と理由などを出力します。ただし、php.ini 設定またはサードパーティのフレームワーク構成の問題により、この情報が出力されない場合があります。このとき、問題を迅速に特定できるように、関連するパラメーターを自分で設定し、これらのエラー メッセージを出力する方法を学習する必要があります。

error_reporting は、php.ini の php グローバル構成パラメーターです。エラー出力レベルを設定するために使用され、エラー出力のレベルを設定するために使用できます。

error_reporting(int $level)、$level が 0 の場合、エラー出力はオフになります。つまり、エラーは出力されません。

set_error_handler

phpのデフォルトのエラー処理は、メッセージを出力することです。ただし、他の操作を定義する必要がある場合もあります。その場合は、エラー処理関数をカスタマイズする必要があります。

php は、独自のエラー処理関数を登録するのに役立つ組み込み関数 set_error_handler を提供します。関数のプロトタイプは次のとおりです:

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

エラー処理関数が登録されている場合でも、デフォルトの動作が引き続き実行されることに注意してください。つまり、エラーが発生してもエラー メッセージが出力されるため、プログラム内で明示的にエラー レベルを 0 に設定し、独自のエラー処理関数を登録する必要があります。このアプローチは、実稼働環境では特に重要です。これは、何か問題が発生した場合でも、機密の内部エラー情報が潜在的に悪意のあるユーザーに公開されることがないためです。カスタム エラー処理関数は致命的なエラー (コンパイル エラーなど) を処理できないことを指摘することも重要です。

以下はカスタム エラー処理関数の使用例です:

<?php
error_reporting(0);
function error_handler($error_level, $error_message, $file, $line) {
    $exit = false;
    switch ($error_level) {
        case E_NOTICE:
        case E_USER_NOTICE:
            $error_type = &#39;Notice&#39;;
            break;
        case E_WARNING:
        case E_USER_WARNING:
            $error_type = &#39;Warning&#39;;
            break;
        case E_ERROR:
        case E_USER_ERROR:
            $error_type = &#39;Fatal Error&#39;;
            $exit = true;
            break;
        default:
            $error_type = &#39;Unknown&#39;;
            $exit = true;
            break;
    }
    printf("%s: %s in %s on line %d\n", $error_type, $error_message, $file, $line);
    if ($exit) {
        die();
    }
}
set_error_handler(&#39;error_handler&#39;);

echo $novar;
echo 3 / 0;
trigger_error('Trigger a Fatal error', E_USER_ERROR);
new NonExist();

Executeこのスクリプトは次の出力を取得できます:

注意: 未定義の変数: /your/php_demo_file.php の 40 行目の novar

警告: /your/php_demo_file.php の 41 行目でのゼロによる除算

致命的なエラー: トリガー/your/php_demo_file.php の 42 行目に致命的なエラーがありました

最後の "new NoExistClass()" 例外がカスタム エラー処理関数によってキャッチされなかったことがわかります。

最後に、set_Exception_handler は、Web アプリケーションでトップレベルの例外処理を登録し、それを設定して、一律にエラー処理ページにジャンプすることができます。

上記は PHP のカスタム エラー処理の例です。皆様のお役に立てれば幸いです。

関連おすすめ:

配列比較機能を実装したphpカスタム関数の事例

phpカスタム/システム/クラス定数コード例の詳細説明

phpカスタム/システム/クラス定数コード例の詳細説明

以上がPHPカスタムエラー処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。