2011-07-05 11 views
2

以下のコードで "echo ..."を実行する2行で説明できない "Headers already on lines#..."エラーが発生しました。例出力バッファリングとFirePHPでエラーが発生しました

簡体字版:

<?php 
ob_start(); 

//Initializing FirePHP... 
include_once(F_FS_PATH."lib/FirePHPCore/fb.php"); 
// <--- I've also tried to move the ob_start(), after the FirePHP init, 
// <--- instead before it. But it made no difference. 
?> 
<html> 
<div>A lots of HTML (and php) code goes here... Actually my entire page. 
FirePHP is also used here many times by multiple invocations 
of the function fb('debug text');</div> 
</html> 

<?php 
$all_page_content=ob_get_clean(); 

if ($GLOBALS["marketing_enabled"]) 
    echo marketingReplaceContent($all_page_content); 
else 
    echo $all_page_content; 

ob_flush(); flush(); 

//Do some other non-printing - but slow stuff. 
do_the_silent_slow_stuff_Now(); 

// <--- presumably the php execution ends here. 
?> 

私はバッファを印刷し、それをフラッシュした後FirePHPは、ページの完了時に何かをしようとしている理由を理解できないのですか?それとも何をしようとしていますか?どうすればこの問題に対処できますか? :(ここ

+1

'do_the_silent_slow_stuff_Now()'では何をしていますか? phpを呼び出す呼び出しがあれば、既に 'flush()'で出力を送信しているので、動作しないヘッダを送信しようとします。 –

+0

hehe :)はい。 do_the_silent_slow_stuff_Now()に1つのfb()コールがありました。どのようにして問題が発生したのか、私には起こりませんでした。とても簡単!私は問題がエコー・ステートメントの前のどこかにあると予想していましたが、そこを見るにはあまりにも非合理です。とにかく、私の質問への回答としてこれを書いてください、私は答えとしてそれをマークします。私のようにバッフルになっているGoogleのユーザーにとっては便利かもしれません:) – PatlaDJ

答えて

3

はあなたの問題です:。すでにライン#上で送信され

ヘッダ...

exacltyザッツあなたはFirePHPを使用して、事前に何かをエコーときに何が起こるかこれでも空白であるかもしれません<?phpタグの前にFirePHPはすべての内容をヘッダーとして送信し、出力後にヘッダーを送信できません。

Fireあなたのdo_the_silent_slow_stuff_Now();メソッドでPHPを使用することをお勧めします。一度にバッファリング、フラッシュ、FirePHPを使用しないことをお勧めします。

開発段階でob_start()ob_flush()のいずれかを辞任するか、すべての処理が完了した後にob_flush()メソッドを呼び出します。

function my_fb($text) { 
    if(!$development) 
     fb($text); 
} 

と::

第三の可能性は$development = true;ような何かをすることによって、あなたの開発とライブ段階を区切ると、独自のFirePHP機能を作ることであろう

if($development) { 
    do_the_silent_slow_stuff_Now(); 
    ob_flush(); flush(); 
} 
else { 
    ob_flush(); flush(); 
    do_the_silent_slow_stuff_Now(); 
} 

は、この情報がお役に立てば幸い!

+0

この動作を完全に理解したら、推奨事項に加えてもう1つの推奨事項を追加します:第2レベルの出力バッファリングを追加します。 – PatlaDJ

+0

@PatlaDJ私は助けることができてうれしい...私はまた、私の答えにいくつかの詳細を追加しました。 –

関連する問題