PHP header() 関数


❮ Complete PHP HTTP リファレンス

定義と用法

header() 関数は生のHTTPヘッダをクライアントに送信します。

特に重要なことは、実際の出力を送信する前に、header()を呼び出さなければならないことに注意することです (PHP 4以降では、出力のバッファリングを使用してこの問題を解決できるようになりました):

<html>
<?php
// This results in an error.
// The output above is before the header() call
header('Location: http://www.example.com/');
?>

構文

header(string,replace,http_response_code)

パラメータ 説明
string 必須。送信するヘッダ文字列を指定する
replace ヘッダを前のものに置き換えるか、2番目のヘッダを追加するかを示す。デフォルトは TRUE(置き換える)。 FALSE を指定すると、同じ型の 複数のヘッダを強制的に生成する。
http_response_code 任意。HTTP レスポンスコードを強制的に指定の値にする(PHP 4.3以降で使用可能)

チップスと注意

注: PHP 4.4以降、この関数は一度に複数のヘッダを送信することができなくなりました。これはヘッダインジェクション攻撃への対策です。


例 1

ページキャッシュを防止します:

<?php
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
?>

<html>
<body>

...
...

注: デフォルトの ブラウザのキャッシュの動作をユーザが変更できる手段はいくつもあります。 上記のヘッダを送信することにより、スクリプトの出力がキャッシュされる 可能性がある設定を上書きするべきです!


例 2

生成した PDF ファイルの保存をユーザに確認します (Content-Disposition ヘッダは、推奨されるファイル名を指定することと、ブラウザに保存ダイアログボックスを表示させるために使用します):

<?php
header("Content-type:application/pdf");

// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='downloaded.pdf'");

// The PDF source is in original.pdf
readfile("original.pdf");
?>

<html>
<body>

...
...

注: Microsoft IE 5.5には、これを妨げるバグがあります。バグは、Service Pack 2以降にアップグレードすることで解決できます。


❮ Complete PHP HTTP リファレンス