Codeigniter 2.x - 脚本工作时的Echo输出

时间:2011-04-22 05:33:34

标签: php output-buffering delayed-execution

我试图让codeigniter输出文本,因为脚本正在运行,但无法使其工作。我在这里和谷歌搜索并使用ob_end_flush();和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秒等。

2 个答案:

答案 0 :(得分:0)

我今天尝试了这个,但也没有用。然后我查看了核心的输出类,并且有一个私有的_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();
}

答案 1 :(得分:0)

您对Code Igniter的具体问题是已经有一个输出缓冲区生效。在使用以下代码段进行测试之前,至少会让您退出php级别的缓冲:

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

正如@Wesley所说,服务器的配置仍然可能会破坏这种情况,但在我目前的设置中,我可以在淘汰所有输出缓冲区之后将输出流回来。