0


私は Web アプリケーションを開発しており、PHP と javascript/jQuery を使用しています。問題は、XDebug からの警告/エラーの出力にあります。AJAX から PHP スクリプトを呼び出してデータを取得していますが、これらのほとんどは、転送に JSON 文字列を使用している配列を返しています。私が抱えている問題は、警告/エラー XDebug が出力に HTML タグを書き込み、JavaScript で JSON 文字列をデコードしようとすると失敗する場合です。これらを変数に出力するように XDebug を構成して、必要に応じて JSON デコードを台無しにすることなく表示できるようにする方法はありますか? 簡単な例を示してみました。

RemoveFile.php:

if (!unlink($_GET['Filename'])){ //if file not found XDebug will output warning here
    $errors[] = "File not found";

    echo json_encode($errors);    
}

RemoveFile.js:

function RemoveFile(filePath){
    $.get('RemoveFile.php', {
        Filename: filePath
    }).done(function (data){
        var dataArray = JQuery.parseJSON(data); //Fails if XDebug outputs HTML
    }
}

アップデート


何をする必要があるかを理解しました。エラーをチェックするためにログ ファイルを開く必要がなく、デバッグを容易にするためにエラーが発生した時点でエラーを表示する必要がなかったので、カスタム エラー ハンドラを作成してファイルに含めました。エラーを出力したくありませんでしたが、他のファイルに出力しました。

VarErrorHandler.php:

function VarErrorHandler($errno, $errstr, $errfile, $errline){
    switch ($errno) {
        case E_USER_ERROR:
            $errors[] = "ERROR: Fatal error on line $errline in file $errfile [$errno] $errstr";
            exit(1);
            break;

        case E_USER_WARNING:
            $errors[] = "WARNING: [$errno] $errstr";
            break;

        case E_USER_NOTICE:
            $errors[] = "NOTICE: [$errno] $errstr";
            break;

        default:
            $errors[] = "Unknown error type: [$errno] $errstr";
            break;
    }

    /* Don't execute PHP internal error handler */
    return true;
}

$old_error_handler = set_error_handler("VarErrorHandler");

したがって、エラーを出力したくないファイルには、次のように追加します。

//include and set custom error handler
require_once("VarErrorHandler.php");

//to stuff here

//Reset original error handler
restore_error_handler();

次に、エラー配列を表示してクライアント側に表示します。

function RemoveFile(filePath){
    $.get('RemoveFile.php', {
        Filename: filePath
    }).done(function (data){
        var dataArray = JQuery.parseJSON(data); //Fails if XDebug outputs HTML

        //Alert Errors
        alert(dataArray.errors.join("\n"));
    }
} 
4

1 に答える 1

3

コードにエラー/警告/通知がある場合は、理由があります。本番環境に入る前に問題を修正してください。

実稼働環境では、エラーを表示するのではなくログに記録するようにPHPを構成する必要があります。php.ini本番環境の内部:

error_log = /path/to/php-error.log
log_errors = On
display_errors = Off

または、実行時にコードの設定を変更することもできます。

ini_set("display_errors", 0);
ini_set("log_errors", 1);
ini_set("error_log", "/path/to/php-error.log");

ここでそれについてもっと読む:

本番サーバーでPHPエラーを抑制するための最良の方法

于 2013-02-26T13:15:21.710 に答える