headers_sent
(PHP 4, PHP 5)
headers_sent — ヘッダが既に送信されているかどうかを調べる
説明
bool headers_sent
([ string &$file
[, int &$line
]] )
ヘッダがすでに送信されているかどうかを調べます。
ヘッダブロックがいったん送信されてしまった後で header() 関数を使って新たなヘッダ行を送信することはできません。 この関数を使うには、少なくとも HTTP ヘッダ関連のエラーを予防する必要があります。 あるいは、出力バッファリング を使う方法もあります。
パラメータ
- file
-
オプション引数の file と line がセットされている場合、 PHP のソースファイル名と出力が開始された行番号が、それぞれ file と line に格納されます。
- line
-
出力を開始した行番号。
返り値
headers_sent() は、HTTP ヘッダがまだ送信されていない場合に FALSE、 そうでないでない場合に TRUE を返します。
変更履歴
バージョン | 説明 |
---|---|
4.3.0 | オプションのパラメータ file と line が追加されました。 |
例
Example#1 headers_sent() 関数の使用例
<?php
// ヘッダがまだ何も送信されていない場合に、送信します
if (!headers_sent()) {
header('Location: https://www.example.com/');
exit;
}
// オプションのfileとlineパラメータの使用例(PHP4.3.0以降)
// $filename と $linenum が後で使用されていることに注目。
// これらの変数に事前に値を与えたりしてはいけません。
if (!headers_sent($filename, $linenum)) {
header('Location: https://www.example.com/');
exit;
// おそらく、ここでエラー処理を行うでしょう。
} else {
echo "$filename の $linenum 行目でヘッダがすでに送信されています。\n" .
"リダイレクトできません。代わりにこの <a " .
"href=\"https://www.example.com\">リンク</a> をクリックしてください。\n";
exit;
}
?>