2013-04-23 64 views
4

我希望在执行睡眠功能之前在浏览器中输出回显(每次)。睡眠功能之前的PHP回声,不工作

下面的代码是不工作

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()函数,为什么输出不显示每次。

+0

您可能需要刷新输出缓冲区。 '使用ob_flush()'? – 2013-04-23 13:02:48

+0

@ J.D.Pace我正在使用'ob_flush();'后回声,或需要把其他地方 – 2013-04-23 13:03:53

回答

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

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

首先尝试在ob_flush()之前或之后拨打flush()

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

如果使用IIS服务器而不是Apache,那么IIS中可能还会有一些设置需要检查。

+0

我尝试'flush()'之前和之后'ob_flush()'不工作。 – 2013-04-23 13:10:29

+0

@RSSisodiya好的,正如我所说的,chkeck mod_gzip和zlib.output_compression。执行'phpinfo()'并检查_SERVER [“HTTP_ACCEPT_ENCODING”]是否执行gzip并检查zlib.output_compression是否已打开。这些将阻止直接输出 – 2013-04-23 13:17:19

+0

'$ _SERVER [“HTTP_ACCEPT_ENCODING”]'。返回gzip,放气。 – 2013-04-23 13:25:46