1

Webサイトの開発中に、エラー報告を有効にしました。ただし、エラーが生成されるたびに、ページの上部、開始タグの前にエラーが生成されます。これにより、ドキュメントが破損することがあり、パフォーマンスや要素の表示方法など、Webサイトの多くの側面が変更されます。

すべてのエラーを収集してページの下部に表示する方法はありますか?

ヒープに感謝します!

4

2 に答える 2

2

たとえば、独自のエラーハンドラを作成し、すべてのエラーをファイルに収集することができます。または、配列に入力して、要求に応じてページの下部にすべてのエラーを表示します。

方法は次のとおりです。

<?php
// At the top of your PHP code

class MyError
{
    protected static $collected = array();

    public static function getCollectedErrors()
    {
      return self::$collected;
    }

    protected static function addError($key, $error)
    {
      if (!isset(self::$collected[$key]))
        self::$collected[$key] = array();

      self::$collected[$key][] = $error;
    }

    // CATCHABLE ERRORS
    public static function captureNormal( $number, $message, $file, $line )
    {
        // Insert all in one table
        $error = array( 'type' => $number, 'message' => $message, 'file' => $file, 'line' => $line );
        // Display content $error variable
        self::addError('error', $message . " at " . $file . ':' . $line);
    }

    public static function captureException( $exception )
    {
        // Display content $exception variable
        self::addError('exception', $exception);
    }

    // UNCATCHABLE ERRORS
    public static function captureShutdown( )
    {
        $error = error_get_last( );
        if( $error ) {
            ## IF YOU WANT TO CLEAR ALL BUFFER, UNCOMMENT NEXT LINE:
            # ob_end_clean( );

            // Display content $error variable
            self::addError('shutdown', $error);
        } else { self::addError('shutdown', '<none>'); return true; }
    }
}

set_error_handler( array( 'MyError', 'captureNormal' ) );
set_exception_handler( array( 'MyError', 'captureException' ) );
register_shutdown_function( array( 'MyError', 'captureShutdown' ) );
?>

次に、これを使用して、カテゴリ別にすべてのエラーにアクセスできます。

Error::getCollectedErrors();

UPD:ページの下部にエラーを表示するには、エラーを出力する場所に次のコードを追加します。

<?php
    $errors = MyError::getCollectedErrors();

    foreach ($errors as $category => $items) {
        echo "<strong>" . $category . ":</strong><br />";

        foreach ($items as $error) {
            echo $error . "<br />";
        }
    }
?>
于 2012-10-21T07:30:29.380 に答える
0

それらすべてをページの下部に配置することについてはわかりませんが、できることは、すべてのエラーメッセージを次のようなエラーファイルに送信することです。

error_reporting(E_ALL);
ini_set('display_errors', 'off');
ini_set('log_errors', 'on');
ini_set('error_log', 'path/to/error/file.log');

また、コーディングとテストを行っている間、IDEでファイルを開いたままにして、各テストの後に新しいエラーが発生したかどうかを確認できます。

于 2012-10-21T07:26:20.240 に答える