header()関数は、HTMLファイル の送信に先立って、生のHTTPヘッダ文字列を送信 するために使用します。HTTPヘッダの詳細は、 HTTP 1.1 Specificationを参照 して下さい。
オプションのパラメータ replace は、ヘッダ が前に送信された類似のヘッダを置換するか、または、同じ形式の二番 目のヘッダを追加するかどうかを指定します。デフォルトでは、この関 数は、置換を行ないますが、二番目の引数にFALSE を指定すると、同 じ型の複数のヘッダを強制的に生成します。例えば、
特殊なheaderコールが2種類あります。最初のは、"Location" ヘッダーです。このヘッダーはブラウザに返されるだけではなく、 ApacheにREDIRECTステータスコードを返します。スクリプトの作者にとっ ては、この点はあまり重要ではありませんが、Apacheの内部動作を知る 人にとっては、理解しておくべき重要なこととなります。
header("Location: http://www.php.net/"); /* ブラウザをPHP Web サイトに リダイレクトする */ exit; /* リダイレクトを行う際に以下のコードが 実行されないようにする */ |
2番目の特別なヘッダは、文字列"HTTP/"から始まる全てのヘ ッダ(大文字・小文字は区別されません)です。例えば、 ApacheディレクティブErrorDocument 404であるPHPスクリプトを指定し ている場合、そのPHPスクリプトがステータスコード404を生成するよう にすると良いでしょう。この場合、そのスクリプトの中に以下のように 記述します。
PHP スクリプトはしばしば動的に HTML を生成するため、クライアントブラウザや サーバーおよびクライアントブラウザの間でプロキシがキャッシュを行ったり するべきではありません。多くのプロキシとクライアントは、以下のコードにより 強制的にキャッシュを無効にできます。
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 過去の日付 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // 常に修正されている header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Pragma: no-cache"); // HTTP/1.0 |
覚えておいて頂きたいのは、header() 関数は、通 常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の出 力の前にコールする必要があることです。 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数 に空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTMLファ イルを使用している場合でも存在します。
<?php require("user_logging.inc") ?> <?php header ("Content-Type: audio/x-pn-realaudio"); ?> // 動作しません。上の空行に注意して下さい。 |
headers_sent()も参照下さい。