APIとして呼び出される認証スクリプトをPHPで作成していますが、それ以外の場合は200 _only in the case that it approves the request, and
_ 403 _(Forbidden) or
_ 500`を返す必要があります。
私が直面している問題は、エラー状態の場合にphpが_200
_を返し、代わりにエラーをhtmlとして出力することです。自分で明示的にHTTP _500
_またはHTTP _200
_を返さない限り、phpがHTTP _403
_コードを返すことを確実に確認するにはどうすればよいですか?つまり、すべての警告またはエラー条件を例外なしの_500
_ sに変換したいので、デフォルトのケースでは認証要求が拒否され、例外は_200
_コードで承認されます。
私はset_error_handler()
とerror_reporting()
をいじりましたが、これまでのところ運はありません。たとえば、HTTP応答コードを送信する前にコードが何かを出力した場合、PHPは当然、出力後にヘッダー情報を変更できないと報告します。ただし、これはPHPとして、問題を説明するhtml付きの_200
_応答コードとして。この種のものも_500
_コードに変換する必要があります。
これはPHPで可能ですか?または、何らかの方法で_mod_rewrite
_を使用するなど、より高いレベルでこれを行う必要がありますか?その場合、どのように設定するのでしょうか?
the PHP header for)のドキュメント をチェックしました。作成するよりも簡単です。2番目のパラメーターがtrueの場合、同様のヘッダーを置き換えます。デフォルトはtrueです。そのため、正しい動作はheader ('HTTP/1.1 403 Forbidden');
、認証ロジックを実行し、認証された場合、ヘッダー('HTTP/1.1 200 OK')
。 403応答を置き換え、403がデフォルトであることを保証します。
ステータスコードを応答として送信するだけです header()
:
header('HTTP/1.1 500 Internal Server Error');
これを送信するときは、その前に出力する必要はありません。つまり、echo
呼び出しもHTMLも空白もありません。
PHP 5.4.0なので、特殊な機能があります:
<?php http_response_code( 500 ); ?>
他の出力の前に呼び出されることを確認してください。
参照:
Set_error_handler()のphpページには、2003年9月8日10:28に投稿されたncoastsoft dot comのsmpによるコメントを見つけることができます。必要に応じてコードを変更しました:
error_reporting(E_ALL);
ini_set('display_errors', 'on');
function fatal_error_handler($buffer) {
header('HTTP/1.1 500 Internal Server Error');
exit(0);
}
function handle_error ($errno, $errstr, $errfile, $errline){
header('HTTP/1.1 500 Internal Server Error');
exit(0);
}
ob_start("fatal_error_handler");
set_error_handler("handle_error");
//would normally cause a fatal error, but instead our output handler will be called allowing us to handle the error.
somefunction();
ob_end_flush();
このしきい値は、存在しない関数の致命的なエラーをキャッチします。 500を返し、スクリプトの残りの実行を停止します。
header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
内部サーバーエラーを示す500は使用しないでください。
出力バッファリングを有効にしている場合を除き、これ(および他のヘッダー)は出力の前に送信する必要があります。
Parseエラーで500を返すためにPHPを取得する方法を考えたことがありますか...まったく同じニーズがあります... APIはアプリに投稿されており、すべてが正しく処理されました...
解析エラーの場合、PHPはエラー200を返し、これらの関数の両方を使用しました。
register_shutdown_function()set_error_handler()
また、コードで「解析/構文」エラーが発生してもこれらはヒットしません...
したがって、これは低レベルのPHP関数であり、PHP.INIまたはどこかに設定する必要があります...私はPHP 5.3.10 ...
出力バッファリングを使用して、ページの本文への書き込み後にヘッダーを変更できるようにします。これは、すべてのスクリプトを更新するのではなく、 iniファイル で設定できます。
(出力バッファを明示的にフラッシュすると、header()呼び出しは失敗します)
C.