PHP マニュアル
前のページ |  | 次のページ

# headers_sent

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

headers_sent -- ヘッダが既に送信されているかどうかを調べる

## 説明

bool headers_sent ( [string &file [, int &line]] )

headers_sent() は、HTTP ヘッダが既に送信されている場合に `TRUE` 、そうでない場合に `FALSE` を返します。 また、オプション引数の `file` と `line` がセットされている場合、 PHP のソースファイル名と出力が開始された行番号が、それぞれ `file` と `line` に格納されます。

ヘッダブロックがいったん送信されてしまった後で header() 関数を使って新たなヘッダ行を送信することはできません。 この関数を使うには、少なくとも HTTP ヘッダ関連のエラーを予防する必要があります。 あるいは、出力バッファリングを 使う方法もあります。

> 注意: オプションのパラメータ `file` と `line` が PHP 4.3.0 で追加されました。

例 1. headers_sent() 関数の使用例

`<?php
// ヘッダがまだ何も送信されていない場合に、送信します
if (!headers_sent()) {
header('Location: http://www.example.com/');
exit;
}
// オプションのfileとlineパラメータの使用例（PHP4.3.0以降）
// $filename と $linenum が後で使用されていることに注目。
// これらの変数に事前に値を与えたりしてはいけません。
if (!headers_sent($filename, $linenum)) {
header('Location: http://www.example.com/');
exit;
// おそらく、ここでエラー処理を行うでしょう。
} else {
echo "$filename の $linenum 行目でヘッダがすでに送信されています。\n" .
"リダイレクトできません。代わりにこの <a " .
"href=\"http://www.example.com\">リンク</a> をクリックしてください。\n";
exit;
}
?>`

これに関連するより詳細な議論は ob_start()、 trigger_error()、 header() を参照ください。

前のページ | ホーム | 次のページ
headers_list | 上に戻る | inet_ntop