2

スクリプトが機能していたときに codeigniter にテキストを出力させようとしましたが、機能させることができませんでした。こことグーグルで検索し、ob_end_flush(); を使用して見ました。そしてフラッシュ(); また、ブラウザが出力できるようにバイトを追加することもできます。しかし、そのどれも CI 2.x では機能しません。誰かがこれで運が良かったら、事前に感謝します

私が試してみました

function test()
{
    ob_end_flush();
        echo "test1";
    ob_start();
    sleep(3);
    ob_end_flush();
        echo "test1";
    ob_start();
    sleep(3);
    ob_end_flush();
        echo "test1";
    ob_start();
}

運がない。スクリプトは 6 秒間待機してから、すべてを一度に吐き出します。出力を画面にエコーしてから3秒待ってから、次のエコーを出力してからさらに3秒待つなどしたいと思います。

4

3 に答える 3

0

特に Code Igniter で発生している問題は、出力バッファーが既に有効になっていることです。テストの前に次のスニペットを使用すると、少なくとも php レベルのバッファリングから抜け出すことができます。

// try to bust out of output buffering
while(ob_get_level()) {
    ob_end_flush();
}
ob_end_flush();

@Wesleyが指摘したように、これはサーバーの構成によって損なわれる可能性がありますが、現在のセットアップでは、すべての出力バッファーをバストアウトした後に出力をストリーミングできます。

于 2013-02-13T20:22:28.437 に答える
0

今日これを試しましたが、うまくいきませんでした。次に、コアの出力クラスを調べたところ、private _display() 関数がありました。出力が何らかの変数に表示される前に収集され、最後にこの関数が呼び出されると考えました。そのため、コントローラー メソッドのコードの前に、次の行を追加しました。

$this->output->_display("");

そしてコードを実行しました。出来た。したがって、変更された関数は次のようになります。

function test()
{
    $this->output->_display("");
    ob_end_flush();
        echo "test1";
    ob_start();
    sleep(3);
    ob_end_flush();
        echo "test1";
    ob_start();
    sleep(3);
    ob_end_flush();
        echo "test1";
    ob_start();
}
于 2012-03-24T19:30:39.303 に答える