簡體   English   中英

PHP flush()無法通過CLI腳本工作

[英]PHP flush() not working via CLI script

我的代碼:

@ini_set('zlib.output_compression',0);
@ini_set('implicit_flush',1);
@ob_end_clean();
set_time_limit(0);
function show_status($done, $total, $size=30) {
    static $start_time;

    if($done > $total) return;

    if(empty($start_time)) $start_time=time();
    $now = time();

    $perc=(double)($done/$total);

    $bar=floor($perc*$size);

    $status_bar="[";
    $status_bar.=str_repeat("=", $bar);
    if($bar<$size){
        $status_bar.=">";
        $status_bar.=str_repeat(" ", $size-$bar);
    } else {
        $status_bar.="=";
    }

    $disp=number_format($perc*100, 0);

    $status_bar.="] $disp%  $done/$total";

    @$rate = ($now-$start_time)/$done;
    $left = $total - $done;
    $eta = round($rate * $left, 2);

    $elapsed = $now - $start_time;

    $status_bar.= " remaining: ".number_format($eta)." sec.  elapsed: ".number_format($elapsed)." sec.";

    echo "$status_bar\r";

    flush();

    if($done == $total) {
        echo "\n";
    }
}

調用只是show_status($ count,$ total_count);。 -由於某種原因,它不能在我的服務器上工作,但是我知道上面的代碼可以工作(從網絡上獲取,我以前在另一台服務器上使用過它)。 問題Im現在在我當前的服務器上存在的問題是,它不會在每次執行時都輸出它,而是在處理完所有內容后才看到最終結果(100%)。

  • 輸出緩沖設置為“關”(盡管不需要,因為它是通過CLI執行的,所以不需要)
  • zlib.output_compression設置為Off
  • 參見其他設置的前4行代碼,同時嘗試顯式設置
  • .htaccess中也要有“ SetEnv no-gzip dont-vary”,因為這顯然是flush()無法正常工作的另一個原因

我想念什么!? 這不是瀏覽器問題,因為我再次通過CLI運行它! PS:我在apache 2.2.16上用PHP 5.3.6在WAMP上運行

在研究了腳本之后,我相信它沒有任何問題。 運行該測試后,我看到一行顯示狀態為8%的完成狀態:

show_status(10, 1000);
show_status(40, 1000);
show_status(80, 1000);
echo "\n";

但是,如果我運行此腳本:

show_status(10, 1000);
sleep(5);
show_status(40, 1000);
sleep(5);
show_status(80, 1000);
echo "\n";

輸出線每5秒鍾定期更換一次,狀態為1%,4%,8%

我可以想象,無論您跟蹤的狀態是什么,簡單完成都比輸出呈現的速度快得多,因此您看到的是完成的結果。

flush()對CLI無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM