PHPのエラー/例外をクライアント側に返す必要がある場合(推奨されていませんが、わかりやすく、開発が簡単です)、PHP用のカスタムerror/uncaught-exceptionハンドラが必要になります。これにより、エラー/例外の表示方法をカスタマイズすることができます。
JSONオブジェクトとしてエラーとキャッチされない例外を出力するサンプルコードを示します。
// Set error handler
set_error_handler('api_error_handler');
function api_error_handler($errno, $errstr) {
return api_error($errstr, $errno, 500);
}
// Set uncaught exceptions handler
set_exception_handler('api_exception_handler');
function api_exception_handler($exception) {
return api_error($exception->getMessage(), $exception->getCode(), 500);
}
// Error/Exception helper
function api_error($error, $errno, $code) {
// In production, you might want to suppress all these verbose errors
// and throw a generic `500 Internal Error` error for all kinds of
// errors and exceptions.
if ($environment == 'production') {
$errno = 500;
$error = 'Internal Server Error!';
}
http_response_code($code);
header('Content-Type: application/json');
return json_encode([
'success' => false,
'errno' => $errno,
'error' => $error,
]);
}
それだけではありません。ユーザー定義のエラーハンドラは致命的なエラーを処理できないため、致命的なエラーメッセージは引き続き表示されます。あなたはini_set()
への呼び出しでエラーを表示する無効にする必要があります。
ini_set('display_errors', 0);
致命的なエラーを処理するために、どのように?致命的なエラーは、シャットダウン時にregister_shutdown_function()
で処理できます。シャットダウンハンドラでは、error_get_last()
を呼び出して、最後のエラー情報を取得する必要があります。したがって:
次にjavascript側で、エラーコールバックを追加し、エラー情報をユーザーに表示する必要があります。
これらのすべてを実装するのではなく、成熟したエラー/例外ハンドラパッケージを使用してみませんか? Meet Whoopsをご覧ください。
コードは問題ありません。解析されたjsonのphpエラーを見て、角度式の中にエラーがないかどうかを確認するのが便利です。情報漏えいのヒント。 – ItsmeJulian