2013-04-23 63 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