PHP header()関数

定義と使用法

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

重要なポイントを認識する必要があります。header()関数を呼び出すのは、実際のオプションが送信される前に必須です(PHP 4およびそれ以降のバージョンでは、出力キャッシュを使用してこの問題を解決できます):

<html>
<?php
// 結果がエラーになります
// header()を呼び出す前に既にオプションを出力しています
header('Location: http://www.example.com/');
?>

文法

header(string,replace,http_response_code)
パラメータ 説明
string 必須です。送信するヘッダ文字列を定義します。
replace

オプションです。そのヘッダが以前のヘッダを置き換えるか、二つ目のヘッダを追加するかを指示します。

デフォルトでは true(置き換え)です。false(同じタイプの複数のヘッダを許可)。

http_response_code オプション。HTTP レスポンスコードを指定された値に強制します。(PHP 4 およびそれ以降のバージョンで利用可能)

ヒントおよび注記

注記:PHP 4.4 以降、この関数は一度に複数のヘッダーを送信することを防ぎます。これはヘッダー注入攻撃を防ぐための保護措置です。

例 1

<?php
// 過去の日付
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");
// ファイルは downloaded.pdf と呼ばれます
header("Content-Disposition:attachment;filename='downloaded.pdf'");
// PDF ソースは original.pdf にあります
readfile("original.pdf");
?>
<html>
<body>
...
...

注記:マイクロソフト IE 5.5 には、上記のメカニズムを阻止するバグがあります。Service Pack 2 またはそれ以上のバージョンにアップグレードすることで、このバグを解決できます。