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;
// You would most likely trigger an error here. } else {
echo "Headers already sent in $filename on line $linenum\n" . "Cannot redirect, for now please click this <a " . "href=\"http://www.example.com\">link</a> instead\n"; exit; }
?>
|
|
関連するディスカッションは
ob_start(),
trigger_error(),
header() にもありますので参照ください。