この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:2
ページ更新者:atom
更新日時:2026-05-13 06:50:59

タイトル: httpステータスコードの付与

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

基本

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

http_response_code(401);

主な使用例

// ファイルが見つからないとき
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がキャッシュしないようヘッダ確認

関連