2012-04-13 36 views
0

我正試圖在MAMP上運行一個簡單的PHP腳本。我正在使用PHP 5.2.17,並關閉了壓縮。我試圖執行這個簡單的腳本如何在MAMP上使用flush回顯進度()

<?php 
    ob_flush(); 
    foreach(range(1,9) as $n){ 
    echo $n."\n"; 
    flush(); 
    sleep(1); 
} 

由於sme理由,這不是做它應該的。而不是順序地回顯數字,只是在循環完成時將它們回顯出來。我錯過了什麼嗎?有沒有另一種方法來做到這一點?

回答

1

輸出緩衝控制多少輸出數據 (不包括頭和cookie)PHP的機制應在0​​之前將內部數據保存到客戶端。如果您的應用程序的輸出超過 此設置,PHP將以您指定的大小 大小的塊發送該數據。打開此設置並管理其最大緩衝區大小可以產生一些有趣的副作用,具體取決於您的應用程序和Web服務器。在已經通過打印或回送發送輸出之後,您可能能夠發送標頭和 Cookie。如果您的服務器由於緩衝輸出而發送較少的 數據包,而PHP將數據流傳輸爲 ,則您也可能會看到性能優勢。在生產服務器上,對於 性能原因,4096字節是一個很好的設置。

注意:輸出緩衝也可以通過輸出緩衝控制 功能來控制。

php.ini中可能的值:

On = Enabled and buffer is unlimited. (Use with caution) 
Off = Disabled  
Integer = Enables the buffer and sets its maximum size in bytes. 
eg: output_buffering = Off 

注:本指令是硬編碼爲Off CLI SAPI

http://php.net/output-buffering

工作的例子,如果output_buffering設置到4096

<?php 
ob_start(); 
// Output string to overflow browser php.ini output_buffering setting. 
echo str_repeat(PHP_EOL, 4097); 

for ($i=0; $i<5; $i++) { 
    echo PHP_EOL.$i; 
    ob_flush(); 
    flush(); 
    sleep(1); 
} 
ob_end_flush(); 
?>