PHP睡眠前回音功能,不起作用

时间:2013-04-23 13:00:20

标签: php sleep

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

以下代码无效

    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 "Sleeping for ".$randSlp." second. ";
        ob_flush();

        sleep($randSlp);
    }
    ob_end_flush(); 

如果取消注释str_repeat功能而不是浏览器中的功能 第一次 : 开始 睡了1秒钟。 睡3秒钟。
第二次:睡2秒钟。 睡2秒钟。

并继续......

可以在没有str_repeat()函数的情况下逐个回显,为什么每次都不显示输出。

2 个答案:

答案 0 :(得分:11)

尝试以下代码及其工作。

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(); 
}

答案 1 :(得分:1)

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

首先尝试在flush()之前或之后调用ob_flush()

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

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