[英]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運行它! 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.