PHP header関数 - HTTPヘッダ、Location(リダイレクト)、ファイルの出力
更新:2023-10-12
PHPのheader()関数は以下のような処理が可能。
- Content-type などのHTTPヘッダを追加。
- Location を使って別のページへリダイレクト。
基本的に echo などでHTML等のデータを出力する前に header() を使用する。
また、ファイルを出力したり、リダイレクトした後は基本的にそこで処理は終了なので、最後に exit を書いておくと良い。
HTTPヘッダ
header() の名のとおりヘッダ情報を追加できる。
$data = 'test';
header('Content-type: text/plain');
header('Content-Length: ' . strlen($data));
echo $data;
exit;
画像の出力例。
$filename = 'img/test.jpg';
header('Content-type: image/jpeg');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
JSONの出力例。
$data = array('test' => 'テスト', 'sample' => 'サンプル');
header('Content-type: application/json; charset=UTF-8');
echo json_encode($data);
exit;
HTTPステータスコード
個人的にわりとよく使うのが「404 Not Found」のページの出力。 ページが存在しない場合に使用する。
header('HTTP/2.0 404 Not Found');
readfile('404.html');
exit;
また、意図しないリクエストが発生した場合などにも使用できる。
header('HTTP/2.0 400 Bad Request');
readfile('error.html');
exit;
HTTPステータスコード(レスポンスコード)を変更すれば、その他の処理にも使える。
Location(リダイレクト)
header()関数は、Location を指定して他のページへリダイレクト(転送)することもできる。
以下は実行しているファイルと同じ階層にある example.php へリダイレクトする例。
header('Location: example.php');
exit;
また Location にパスを指定したり、URLを指定して別のサイトへリダイレクトすることもできる。
header('Location: /test/example.php?id=on');
exit;
header('Location: https://www.example.com/');
exit;
リダイレクトする際、301や302などHTTPステータスコードを指定することもできる。 なお、HTTPステータスコードを省略した場合は302となる。
header('Location: example.php', true, 301);
exit;
header()関数の2番目の引数は、true だと既に同じヘッダがある場合に置き換える(同じヘッダを生成しない)。 3番目の引数はHTTPステータスコード。 リダイレクトに使用する代表的な3xx系は、301 Moved Permanently、302 Found、303 See Otherなどがある。