PHPのheader()関数は以下のような処理が可能。
基本的に echo などでHTML等のデータを出力する前に header() を使用する。
また、ファイルを出力したり、リダイレクトした後は基本的にそこで処理は終了なので、最後に exit を書いておくと良い。
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;
個人的にわりとよく使うのが「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ステータスコード(レスポンスコード)を変更すれば、その他の処理にも使える。
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などがある。