headers_sent
(PHP 4, PHP 5, PHP 7)
headers_sent — ヘッダが既に送信されているかどうかを調べる
説明
headers_sent
([ string &$file
[, int &$line
]] ) : bool
ヘッダがすでに送信されているかどうかを調べます。
ヘッダブロックがいったん送信されてしまった後で header() 関数を使って新たなヘッダ行を送信することはできません。 この関数を使うには、少なくとも HTTP ヘッダ関連のエラーを予防する必要があります。 あるいは、出力バッファリング を使う方法もあります。
パラメータ
file
- オプション引数の
file
とline
がセットされている場合、 PHP のソースファイル名と出力が開始された行番号が、それぞれfile
とline
に格納されます。 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\%22>リンク</a> をクリックしてください。\n"; exit;}?>
注意
注意:
ヘッダにアクセスできたりヘッダを出力したりするのは、 それに対応した SAPI を使っている場合のみです。
参考
- ob_start() - 出力のバッファリングを有効にする
- trigger_error() - ユーザーレベルのエラー/警告/通知メッセージを生成する
- headers_list() - 送信した (もしくは送信される予定の) レスポンスヘッダの一覧を返す
- 関連する詳細な情報については header() - 生の HTTP ヘッダを送信する