0

MAMPで簡単なPHPスクリプトを実行しようとしています。PHP 5.2.17を使用していて、圧縮をオフにしています。この単純なスクリプトを実行しようとしています

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

中小企業の理由で、これは想定されていることを行っていません。番号を順番にエコーアウトするのではなく、ループが完了したときに単にエコーアウトします。私は何かが足りないのですか?これを行う別の方法はありますか?

4

2 に答える 2

1

出力バッファリングは、PHPがクライアントにデータをプッシュする前に内部に保持する必要のある出力データ(ヘッダーとCookieを除く)の量を制御するためのメカニズムです。アプリケーションの出力がこの設定を超える場合、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

注:このディレクティブは、CLISAPIではオフにハードコーディングされています

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();
?>
于 2012-04-13T16:56:45.487 に答える
0

確かに、それはバッファサイズです

PHP バッファの理由 \r\n

この例は私のために働いた

于 2012-04-13T16:37:25.647 に答える