web-dev-qa-db-ja.com

応答ステータスコードを設定する

いくつかのチェックを実行し、潜在的にさまざまなステータスコードを返すことができる必要があるAPI呼び出しがあります。カスタムビューなどは必要ありません。適切なコードを返すだけです。ユーザーが適切な資格情報を渡していない場合、401ステータスを返す必要があります。サポートされているリクエスト形式を送信していない場合は、400ステータスを返す必要があります。

APIなので、本当にやりたいのは、応答ステータスを設定し、リクエストが失敗した理由について単純な愚かなメッセージで終了することです(おそらくexitを使用)。仕事を成し遂げるのに十分ですが、私はこれを正しく機能させることができませんでした。 PHPのheader()とCakeの$this->header()(これはすべてコントローラーにあります)を使用しようとしましたが、終了メッセージは表示されますが、ヘッダーには200 OKステータスが表示されます。

以下のコードを使用すると、メッセージが表示されますが、ヘッダーが設定されていません。私は何が欠けていますか?

  if( !$this->auth_api() ) {
    header( '401 Not Authorized' );
    exit( 'Not authorized' );
  }
90
Rob Wilkerson

PHP <= 5.3

header() 関数には、ステータスコードのパラメーターがあります。指定すると、サーバーがそれを処理します。

header('HTTP/1.1 401 Unauthorized', true, 401);

PHP> = 5.4

Gajusの答えを参照してください: https://stackoverflow.com/a/14223222/362536

130
Brad

PHP 5.4以降では、 http_response_code を使用できます。

http_response_code(404);

これにより、適切なHTTPヘッダーが設定されます。

PHP <5.4を実行している場合、2つのオプションがあります。

  1. アップグレード。
  2. this http_response_code function をPHPに実装します。
115
Gajus

Cakes Response Class? を使用しない理由:=これにより、応答のステータスコードを簡単に設定できます。

$this->response->statusCode(200);

次に、JSONに最適なエラーメッセージを含むファイルをレンダリングします。

11
nahri

header を正しく設定しているとは思わないので、これを試してください:

header('HTTP/1.0 401 Unauthorized');
11
Wesley Murch

CakePHP 2.0.1でも同じ問題がありました

使ってみた

header( 'HTTP/1.1 400 BAD REQUEST' );

そして

$this->header( 'HTTP/1.1 400 BAD REQUEST' );

しかし、これらのどちらも私の問題を解決しませんでした。

私は最終的にそれを使用して解決しました

$this->header( 'HTTP/1.1 400: BAD REQUEST' );

その後、php/CakePHPからのエラーや警告はありません。

*編集:最後の$this->header関数呼び出しで、400とエラーの説明テキストの間にコロン(:)を挿入しました。

4
Michael Temple

前に書いたとおりですが、私のような初心者のために、リターンを含めることを忘れないでください。

$this->response->statusCode(200);
return $this->response;
0
coder