1

スクリプトの最初の数行にこの単純なコードがあり、エラー ハンドラー関数を追加するまで、エラーのログ記録に非常に適しています。私のエラー処理機能は非常にうまく機能しており、これを期待して問題は見つかりませんでした。

ini_set("log_errors" , "1");
ini_set("error_log" , $_SERVER['DOCUMENT_ROOT']."/logs/Errors.log.txt");

エラー処理を開始するとすぐにエラーログが停止するのは、php のデフォルトの動作ですか?

はいの場合、どうすればそれを克服できますか?

私のエラーハンドラー関数が役立つかもしれません。

function userErrorHandler($errno, $errstr, $errfile = '', $errline = 0, $errcontext = array())
{
    // Check if the error code is not included in error_reporting
    if (!(error_reporting() & $errno))
    {
        return;
    }

    // Restore default handlers to prevent errors in errors
    restore_error_handler();
    if (function_exists('restore_exception_handler'))
    {
        restore_exception_handler();
    }

    // Load error page
    require('_errors/error.php');
    exit();
}
set_error_handler('userErrorHandler');
4

2 に答える 2

0

の使用を開始するset_error_handler()と、ビルトインのエラー処理は実行されませんが、おそらく解析エラーは例外です (ただし、error_logが PHP スクリプト自体の外部で定義されている場合のみ.htaccess)。

PHP が行うデフォルトのエラー エコーについても同じことが言えます。

アップデート

の戻り値は、以前のエラー ハンドラが組み込みのエラー ハンドラであった場合にset_error_handler()返さNULLれるため、独自の関数が受け取った引数で呼び出すことはできません。

于 2012-06-08T09:11:37.783 に答える
0

わかった。そのため、デフォルトのハンドラーが上書きされ、エラーのログが停止します。また、それを克服する方法もありません。しかし、ここでできることは他にもあり、期待どおりの結果が得られます。

function userErrorHandler($errno, $errstr, $errfile = '', $errline = 0, $errcontext = array())
{
    // Getting error type
    $errorType = array (
            E_ERROR            => 'ERROR',
            E_WARNING        => 'WARNING',
            E_PARSE          => 'PARSING ERROR',
            E_NOTICE         => 'NOTICE',
            E_CORE_ERROR     => 'CORE ERROR',
            E_CORE_WARNING   => 'CORE WARNING',
            E_COMPILE_ERROR  => 'COMPILE ERROR',
            E_COMPILE_WARNING => 'COMPILE WARNING',
            E_USER_ERROR     => 'USER ERROR',
            E_USER_WARNING   => 'USER WARNING',
            E_USER_NOTICE    => 'USER NOTICE',
            E_STRICT         => 'STRICT NOTICE',
            E_RECOVERABLE_ERROR  => 'RECOVERABLE ERROR'
            );

    if (array_key_exists($errno, $errorType)) {
        $err = $errorType[$errno];
    } else {
        $err = 'CAUGHT EXCEPTION';
    }

    // Logging error to a certain file
    $file           = ini_get('error_log');
    $error_string   = "[" . date("d-M-Y H:i:s", $_SERVER['REQUEST_TIME']) . '] PHP ' . $err . '::' . $errstr . " in " . $_SERVER['SCRIPT_FILENAME'] . " on line " . $errline . "\r\n";
    error_log($error_string, 3, $file);

    // Check if the error code is not included in error_reporting
    if (!(error_reporting() & $errno))
    {
        return;
    }

    // Restore default handlers to prevent errors in errors
    restore_error_handler();
    if (function_exists('restore_exception_handler'))
    {
        restore_exception_handler();
    }

    // Load error page
    require('_errors/error.php');
    exit();
}
set_error_handler('userErrorHandler');

私がやりたかったことと同じです:)

ここで完全な作業を読む: http://blog.abhishekg.com/2012/06/error-handling-in-php-with-error-logger-working/

于 2012-06-11T11:31:08.690 に答える