4

我希望在执行睡眠功能之前(每次)在浏览器中输出回显。

以下代码不起作用

    set_time_limit(0);
    ob_implicit_flush(1);
    ob_start();
    echo "Start<Br>";
    ob_flush();

    for($i=0;$i<10;$i++){
        $randSlp=rand(1,3);
        //echo str_repeat(" ", 1024);
        echo "Sleeping for ".$randSlp." second. ";
        ob_flush();

        sleep($randSlp);
    }
    ob_end_flush(); 

如果取消注释str_repeat功能比在浏览器中
第一次:开始睡眠 1 秒。睡了 3 秒。
第二次:睡2秒。睡2秒。

并继续...

如果没有 str_repeat() 函数,可能会一一回显,为什么每次都不会显示输出。

4

2 回答 2

12

尝试以下代码及其工作。

header( 'Content-type: text/html; charset=utf-8' );
header("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
set_time_limit(0);
ob_implicit_flush(1);
//apache_setenv('no-gzip', 1);
//ini_set('zlib.output_compression', 0);
//ini_set('implicit_flush', 1);
for ($i = 0; $i < 10; $i++) { 
    $randSlp=rand(1,3);
    echo "Sleeping for ".$randSlp." second. ";;
    sleep(1);
    if(ob_get_level()>0)
       ob_end_flush(); 
}
于 2013-04-24T07:53:30.857 回答
2

即使是输出缓冲区(ob_* 函数)也不一定直接将输出提供给浏览器。

首先尝试调用flush()before 或 after ob_flush()

其次,例如查看 mod_gzip 或 zlib.output_compression 是否打开。这也将缓冲所有输出。

如果使用 IIS 服务器而不是 Apache,则可能还有 IIS 中的设置需要检查。

于 2013-04-23T13:03:02.337 回答