2

以下のコードで「echo...」を実行する2行で、説明のつかない「ヘッダーはすでに行#...で送信されています」というエラーが表示されます。

ケースの簡略版:

<?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が何かを行おうとしている理由がわかりません。それとも何をしようとしているのですか?この問題にどのように対処できますか?:(

4

1 に答える 1

3

これがあなたの問題です:

行#..ですでに送信されたヘッダー

これは、FirePHPを使用して、事前に何かをエコーし​​たときに何が起こるかを示しています。<?phpこれは、タグの前の空白でさえあるかもしれません。FirePHPはすべてのコンテンツをヘッダーとして送信し、出力が行われた後はヘッダーを送信できません。

メソッドでFirePHPを呼び出すと確信しているので、do_the_silent_slow_stuff_Now();バッファリング、フラッシュ、およびFirePHPを一度に使用しないことをお勧めします。

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

3番目の可能性は、次のようなことを行っ$development = true;て独自のFirePHP関数を作成することにより、開発フェーズとライブフェーズを分離することです。

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

と:

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

お役に立てれば!

于 2011-07-05T14:51:30.130 に答える