このエントリーをはてなブックマークに追加

PHP header関数 - HTTPヘッダ、Location(リダイレクト)、ファイルの出力

更新:

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などがある。


このエントリーをはてなブックマークに追加