headers_sent

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

説明

bool headers_sent(string &$filename = null, int &$line = null)

ヘッダがすでに送信されているかどうかを調べます。

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

パラメータ

filename

オプション引数の filenameline がセットされている場合、 PHP のソースファイル名と出力が開始された行番号が、それぞれ filenameline に格納されます。

注意:

PHP のソースファイルを実行する前(たとえば、実行開始時にエラーが発生した場合) に出力が開始された場合、 filename は空文字列になります。

line

出力を開始した行番号。

戻り値

headers_sent は、HTTP ヘッダがまだ送信されていない場合に false、 そうでないでない場合に true を返します。

例1 headers_sent 関数の使用例

<?php

// ヘッダがまだ何も送信されていない場合に、送信します
if (!headers_sent()) {
    
header('Location: http://www.example.com/');
    exit;
}

// オプションのfileとlineパラメータの使用例
// $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;
}

?>

注意

注意:

ヘッダにアクセスできたりヘッダを出力したりするのは、 それに対応した SAPI を使っている場合のみです。

参考

  • ob_start
  • trigger_error
  • headers_list
  • 関連する詳細な情報については header