Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. header() / http_response_code()

header() / http_response_code()対応: PHP 4(2000)

HTTPレスポンスヘッダーを送信する関数です。リダイレクト・Content-Type指定・キャッシュ制御・CORSヘッダーの設定など、HTTP通信の制御に使用されます。

構文
// HTTPヘッダーを送信します。
header($header, $replace, $response_code);

// 設定済みのヘッダーを削除します。
header_remove($name);

// ヘッダーが既に送信されたかを確認します。
headers_sent($filename, $line);

// HTTPレスポンスのステータスコードを取得・設定します。
http_response_code($code);
関数一覧
関数概要
header($header, $replace, $response_code)HTTPヘッダーを送信します。第2引数で同名ヘッダーの置換有無、第3引数でステータスコードを指定できます。
header_remove($name)設定済みのHTTPヘッダーを削除します。引数を省略するとすべてのヘッダーを削除します。
headers_sent($file, $line)ヘッダーが既に送信されたかを真偽値で返します。引数を指定すると出力が行われたファイル名と行番号が取得できます。
http_response_code($code)引数なしで現在のステータスコードを返します。引数にコードを指定するとステータスコードを設定します。PHP 5.4以降で使用できます。
サンプルコード
<?php
// 別のページにリダイレクトします。
header("Location: https://example.com/login.php");
exit; // リダイレクト後は必ず exit で処理を終了してください。

// 301リダイレクトを設定します。URLの恒久的な移転に使用します。
header("Location: https://example.com/new-page.php", true, 301);
exit;

// Content-Typeを指定してJSONを返します。
header("Content-Type: application/json; charset=UTF-8");
echo json_encode(['status' => 'ok', 'message' => '成功']);

// ファイルダウンロードのヘッダーを設定します。
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"report.csv\"");
header("Content-Length: " . filesize("report.csv"));
readfile("report.csv");
exit;

// キャッシュを無効化します。
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");

// CORSヘッダーを設定します。異なるオリジンからのアクセスを許可します。
header("Access-Control-Allow-Origin: https://frontend.example.com");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");

// セキュリティヘッダーを設定します。
header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: DENY");
header("Strict-Transport-Security: max-age=31536000; includeSubDomains");

// http_response_code() でステータスコードを設定します。
http_response_code(404);
echo "ページが見つかりません。";

// ヘッダーが送信済みかを確認します。
if (!headers_sent($file, $line)) {
	header("X-Custom-Header: value");
} else {
	echo "ヘッダーは {$file} の {$line} 行目で既に送信済みです。";
}
概要

『header()』はHTTPレスポンスヘッダーを送信するための関数です。HTMLを1バイトでも出力した後では『header()』を呼び出せません。ヘッダーの送信はスクリプトの最初に行い、BOM付きUTF-8や空白行が出力の原因にならないよう注意してください。

リダイレクトを行う場合は、『header("Location: ...")』の直後に必ず『exit』を記述してください。『exit』がないとリダイレクト後もスクリプトの実行が続き、意図しない処理が行われる可能性があります。

『http_response_code()』はPHP 5.4以降で使える関数で、ステータスコードの取得と設定を簡潔に行えます。API開発では適切なステータスコードの設定が重要です。JSON形式のレスポンスを返す場合は『json_encode()』と組み合わせて使用してください。サーバー情報やリクエストの詳細は『$_SERVER』で取得できます。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。