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 を返します。 また、オプション引数の fileline がセットされている場合、 PHP のソースファイル名と、出力が開始された行番号が、それぞれ fileline 変数に格納されます。

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

注意: オプション引数 fileline は 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() にもありますので参照ください。