PHP が実行される環境 (CGI、Web サーバーなど) に関係なく、PHP プログラムをバッファリングします。この関数は、これまでのプログラムの出力をすべてユーザーのブラウザに送信します。
flush() 関数は、サーバーまたはクライアントのブラウザーのキャッシュ モードには影響しません。したがって、出力バッファをフラッシュするには、ob_flush() 関数と flash() 関数の両方を使用する必要があります。
個々の Web サーバー プログラム、特に Win32 での Web サーバー プログラムは、プログラムが終了するまで、結果をブラウザーに送信する前にスクリプトの出力をキャッシュします。
小さなサンプルを作成し、ページを毎秒出力したいと考えました。数。
インターネット上のコードに従ってください:
ob_end_clean (); for ($i=10; $i>0; $i--) { echo $i; flush(); sleep(1); }
または:
for ($i=10; $i>0; $i--) { echo $i; ob_flush(); flush(); sleep(1); }
Firefox では動作することがわかりましたが、IE では動作しないことがわかりました。これは、バッファリングが効果的ではないことを意味します。
php.iniのoutput_buffering設定を再度調整し始め、Apacheを再起動しましたが、それでも機能しませんでした。
その後、次の一節を目にしました。
Microsoft Internet Explorer の一部のバージョンでは、256 バイトを受信した後でのみページの表示を開始するため、これらのブラウザがページのコンテンツを表示できるようにするには、追加のスペースを送信する必要があります。
罪深い IE ブラウザ の問題は、TMD が多すぎることです。
その後、プログラムを修正すると正常になりました:
echo str_pad('',4096); for ($i = 0; $i < 10; $i++) { echo $i; ob_flush(); flush(); sleep(1); }
コードは次のとおりです:
// ob_end_flush ();//IE8下没起作用 echo str_pad(" ", 256);//IE需要接受到256个字节之后才开始显示 for($i=0;$i<18;$i++) { echo $i; flush(); sleep(1); }
以上がPHP IEでの無効なバッファリングの解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。