[PHP-users 12255] Re: flushについて
Mashiki
php-users@php.gr.jp
Tue, 17 Dec 2002 10:11:00 +0900
Mashikiです。
>このMLでも過去何回か話題にあがりましたが、
>結局のところループ中のflushってうまく動作しないのでしょうか?
>
>動かそうとしているのは
>for($i = 0; $i < 100 ; $i++){
> echo "$i\n";
> flush();
> sleep(3);
>}
>
>このようなスクリプトで環境は
>PHP4.2.3 (winXP SP1)
>PHP4.4.0dev (FreeBSD4.6.2)
>で、ブラウザはIE6SP1です。
可能であれば、アウトプットバッファリングをしないで上記を
試してみてはいかがでしょうか。またブラウザによっては、
充分長い文字列を送信しないと、表示を始めないものもある
らしいです。
またアウトプットバッファリングを利用する場合、以下を記述し
ループの中のflushをMyFlushに置き換えます。
function MyFlush($buf) {
flush();
ob_end_flush();
ob_start();
}
アウトプットバッファリングにmb_output_handlerを使用している
場合(これが普通のケース)、4.1.xと4.2.xにより挙動が変わるので
function MyFlush() {
flush();
$buf = ob_get_contents();
ob_end_clean();
echo mb_convert_encoding($buf, mb_http_output());
ob_start();
}
と自前で変更をコントロールしないと、文字化けなどで悩むこと
になります。(4.1.xなどではもっとキレイにかけるのですが)
また、最後のマルチバイト文字列の出力のあと、必ずMyFlush()を
呼ぶ必要があります。
4.3、4.4系は試していませんが、参考まで。