これは、出力バッファリングに関連しています。出力バッファリングがオンになっている場合、出力はすぐにクライアントに送信されませんが、一定量のデータがバッファリングされるまで待機します。これは通常パフォーマンスを向上させますが、あなたのような問題を引き起こします。
単純なソリューションでは設定を変更する必要はありませんがphp.ini
、スクリプトの先頭にこれを配置するだけです。
<?php
while (@ob_end_flush());
?>
これにより、すべての出力バッファリングが一度にフラッシュされて無効になります。
(出典:http ://www.php.net/manual/en/function.ob-end-flush.php#example-460 )
また、出力制御に関するPHPマニュアルを読むこともできます。関連するphp.ini
設定はここにリストされています。
物事が送信されていることを確認したい場合(つまり、時間のかかるタスクの前)、flush()
適切な時間に電話してください。
編集:
実際、特にContent-Typeが明示的に設定されていない場合、ブラウザーには独自のバッファーがある場合があります(ブラウザーは、ファイルのMIMEタイプをスニッフィングする必要があります)。この場合、ブラウザの動作を制御することはできません。
それを解決する可能性のある1つの方法は、Content-Typeを明示的に設定することです。
header("Content-Type: text/plain"); // if you don't need HTML
// OR
header("Content-Type: text/html");
ただし、これが機能することは保証されていません。Firefoxで動作しますが、Chromeでは動作しません。
とにかく、最終的なコードは次のようになります。
header("Content-Type: text/html"); // Set Content-Type
while (@ob_end_flush()); // Flush and disable output buffers
while ($a++ < 5) {
$b = 0;
while ($b++ < 1015) {
echo "H";
//flush(); // In fact because there is no significant delay, you should not flush here.
}
echo "<br><br>\n";
flush(); // Flush output
sleep(1);
}