2011-01-20 8 views
6

私はにはにはajaxを含む同じPHPスクリプトを使用しています。これは、ページと一緒に読み込まれ、ajaxで読み込むことができるいくつかのランダムなカタログ項目です。私はheader()関数を使用する必要があるのは、ajax経由でロードされている場合のみです。PHP:出力が既に開始されているかどうかを知る方法?

ヘッダー機能を使用して出力が既に開始されたとき、私はそれについてPHPの警告を受け取ります。 PHPはどのように出力が既に開始されていることを知っていますか?それを決定する最も良い方法は何ですか、ヘッダー関数を呼び出さないようにしますか?

ありがとうございました。

答えて

9

http://php.net/manual/en/function.headers-sent.php

// If no headers are sent, send one 
if (!headers_sent()) { 
    header('...'); 
    exit; 
} 
+0

ありがとうございました!ちょうど私が必要としたもの。そして、なぜ出口を出るのですか? – SaltLake

+1

exitの使用は、参照されているPHPマニュアルから、それを必要とする 'header:Location'呼び出しに対してまっすぐです。あなたのケースでは、それを追加しないでください。そうしないと、出力が中断されます。 – tomwalsham

+0

ええ、申し訳ありませんが、私はマニュアルから直接コピーし、それを削除するのを忘れました:) – Jake

2

1つのオプションは、冒頭にob_start()buffers all your outputを呼び出すことです。そうすれば、いつでもヘッダーを送信できます。

4

ビルトインそのためには簡単ではあります:

if (!headers_sent()) { 
    header('Your header here'); 
} 

ないはるかに追加するには:)

0

クライアントに何かを送信した場合、出力が開始されました。

たとえば、単一のhtmlタグであっても、すでに出力されています。

これは、起こる か、出力のバッファリングをオンにすることができないように、あなたはあなたのアプリケーションを構築することができ、次のいずれか

http://php.net/manual/en/function.ob-start.php

0

だけでコードが始まる前に空行を削除して終了を追加します。出力終了後に

+0

質問にはコードはありません - どのようにそこにあり、何がないかをどのように知っていますか?現在の回答のほとんどは 'headers_sent()'を使って提案しています - あなたの提案がより良いかもしれない理由はありますか? – andrewsi

関連する問題