タイトル: httpステータスコードの付与
本稿ではPHPにおいてHTTPステータスコードを付与する方法を説明します。レスポンスのステータスを200以外に明示的に設定したいとき(404 / 401 / 500 など)に使います。
基本
http_response_code()の引数にステータスコードを付与するだけです。
|
http_response_code(401); |
主な使用例
|
// ファイルが見つからないとき |
現在のステータスコードを取得
引数を省略すると現在設定されているステータスコードを返します。
|
$current = http_response_code(); |
header() を使う書き方
古いPHPや、ステータスメッセージを明示したい場合は header() でも書けます。
|
header("HTTP/1.1 404 Not Found"); |
代表的なHTTPステータスコード
| コード | 意味 | 典型用途 |
|---|---|---|
| 200 | OK | 正常応答 |
| 201 | Created | 新規作成成功(POST後) |
| 204 | No Content | 成功だがボディなし |
| 301 | Moved Permanently | 恒久リダイレクト |
| 302 | Found | 一時リダイレクト |
| 304 | Not Modified | キャッシュ有効 |
| 400 | Bad Request | クライアントリクエスト不正 |
| 401 | Unauthorized | 認証必要 |
| 403 | Forbidden | 権限なし |
| 404 | Not Found | リソース不在 |
| 405 | Method Not Allowed | 許可されないHTTPメソッド |
| 409 | Conflict | 競合(重複登録等) |
| 422 | Unprocessable Entity | バリデーションエラー |
| 429 | Too Many Requests | レートリミット |
| 500 | Internal Server Error | サーバー側エラー |
| 502 | Bad Gateway | 上流サーバー応答不正 |
| 503 | Service Unavailable | メンテナンス・過負荷 |
| 504 | Gateway Timeout | 上流タイムアウト |
Laravel等のフレームワーク
フレームワークを使っている場合、abort() や response() ヘルパーで指定する方が一般的です。
|
// Laravel |
注意点
- 出力後は変更不可:
echo等で本文出力後にhttp_response_code()を呼ぶと「Cannot modify header information - headers already sent」エラーになる - Webサーバーの上書き: nginx/apacheで
error_pageが設定されている場合、PHPのステータスコードがサーバー側エラーページに置き換わる - キャッシュとの兼ね合い: 404を返す場合、ブラウザやCDNがキャッシュしないようヘッダ確認
関連
- 親カテゴリ: PHP
- 関連エラー: Warning: Cannot modify header information - headers already sent
- Content-Type関連: コンテントタイプ(Content-Type)一覧