2012-04-13 13 views
0

MAMPで簡単なPHPスクリプトを実行しようとしています。私はPHP 5.2.17を使用しており、圧縮をオフにしています。このシンプルなスクリプトを実行しようとしていますflush()を使用してMAMPの進捗をエコーアウトする方法

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

これは想定されていないためです。連続して数字をエコーアウトするのではなく、ループが終了したときにそれらをエコーするだけです。何か不足していますか?これを行う別の方法はありますか?

答えて

1

出力バッファリングは、(ヘッダとクッキーを除く)どのくらいの出力データ を制御する機構PHPです がそのデータをクライアントにプッシュする前に内部的に保持する必要があります。アプリケーションの出力がこの設定の を超えた場合、PHPは指定したサイズのおよそ のチャンクでそのデータを送信します。この設定を有効にして、最大バッファーのサイズを に設定すると、アプリケーションとWebサーバーの に応じていくつかの面白い副作用が生じる可能性があります。既にprintまたはechoを使用して出力を送信した後に、ヘッダーと の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 

注:にoutput_bufferingが設定されている場合、このディレクティブは、CLI SAPI

http://php.net/output-buffering

Aのワーキング例えばオフにハードコードされます〜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(); 
?> 
関連する問題