ホームページ  >  記事  >  バックエンド開発  >  PHP IEでの無効なバッファリングの解決策

PHP IEでの無効なバッファリングの解決策

伊谢尔伦
伊谢尔伦オリジナル
2017-06-24 11:03:561810ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。