18.

httpステータスコードの付与

編集

本稿ではPHPにおいてHTTPステータスコードを付与する方法を説明します。レスポンスのステータスを200以外に明示的に設定したいとき(404 / 401 / 500 など)に使います。

基本

http_response_code()の引数にステータスコードを付与するだけです。

http_response_code(401);

主な使用例

<?php
// ファイルが見つからないとき
if (!file_exists($path)) {
    http_response_code(404);
    echo "Not Found";
    exit;
}

// 認証必須
if (!isset($_SESSION['user'])) {
    http_response_code(401);
    echo "Unauthorized";
    exit;
}

// 内部エラー
http_response_code(500);

現在のステータスコードを取得

引数を省略すると現在設定されているステータスコードを返します。

$current = http_response_code();
echo $current; // 200 など

header() を使う書き方

古いPHPや、ステータスメッセージを明示したい場合は header() でも書けます。

header("HTTP/1.1 404 Not Found");
header("HTTP/1.1 401 Unauthorized");
header("HTTP/1.1 500 Internal Server Error");

代表的なHTTPステータスコード

コード意味典型用途
200OK正常応答
201Created新規作成成功(POST後)
204No Content成功だがボディなし
301Moved Permanently恒久リダイレクト
302Found一時リダイレクト
304Not Modifiedキャッシュ有効
400Bad Requestクライアントリクエスト不正
401Unauthorized認証必要
403Forbidden権限なし
404Not Foundリソース不在
405Method Not Allowed許可されないHTTPメソッド
409Conflict競合(重複登録等)
422Unprocessable Entityバリデーションエラー
429Too Many Requestsレートリミット
500Internal Server Errorサーバー側エラー
502Bad Gateway上流サーバー応答不正
503Service Unavailableメンテナンス・過負荷
504Gateway Timeout上流タイムアウト

Laravel等のフレームワーク

フレームワークを使っている場合、abort()response() ヘルパーで指定する方が一般的です。

// Laravel
abort(404);
abort(401, 'ログインしてください');

return response('...', 500);
return response()->json(['error' => '...'], 422);

注意点

  • 出力後は変更不可: echo等で本文出力後に http_response_code() を呼ぶと「Cannot modify header information - headers already sent」エラーになる
  • Webサーバーの上書き: nginx/apacheで error_page が設定されている場合、PHPのステータスコードがサーバー側エラーページに置き換わる
  • キャッシュとの兼ね合い: 404を返す場合、ブラウザやCDNがキャッシュしないようヘッダ確認

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. インストール方法
  2. 文法
  3. Composerのインストール
  4. 内部関数
  5. フレームワーク
  6. エラー一覧
  7. 改行出力
  8. printとechoの違い
  9. シングルクォートとダブルクォートの違い
  10. returnとyieldの違い
  11. var_dumpをログ出力
  12. CSV読み込み
  13. 待機・処理の遅延
  14. ログファイルにエラーを出力する方法
  15. エラーログ出力関数
  16. URLパラメータの配列化
  17. empty, is_null. issetの判定比較表
  18. httpステータスコードの付与
  19. バージョンの確認
  20. php.ini
  21. APIを呼び出す方法
  22. 外部ファイルを呼び出す方法
  23. カンマ区切りの文字列を配列に変換
  24. 配列からランダムに値を取り出す方法
  25. Webスクレイピング