[PHP-users 12253] Re: flushについて

Kazumasa Gotoh php-users@php.gr.jp
Tue, 17 Dec 2002 07:00:39 +0900


From: Kiryu Tsukimiya <php@angelicwing.net>
Date: Sun, 15 Dec 2002 20:24:27 +0900

> このMLでも過去何回か話題にあがりましたが、
> 結局のところループ中のflushってうまく動作しないのでしょうか?
> 
> 動かそうとしているのは
> for($i = 0; $i < 100 ; $i++){
>  echo "$i\n";
>  flush();
>  sleep(3); 
> }

これまでの話しがどうなっていたか覚えていませんが、HTML Document
として何らかの形で完結していないものを flush() しても有為な
意味があるのでしょうか?

HTML ページ全体として完結しているとか、例えば TABLE タグなどで
<TABLE> 〜 </TABLE> として部分的にでも取り敢えず意味のある形で
完結しているのであれば Web ブラウザ側も表示できるでしょうが、
未完結な状態であれば、Web ブラウザ側で後続データ待ちとして
バッファリングされる事はありそうな気がします。

PHP3/PHP4 のマニュアルで flush() の項を見ても、

  注意: flush() は、Web サーバまたはクライアント側のブラウザの
        バッファリング手法に影響を与えません。

と書いてあり、いくつかの例も載っています。

一般のファイルに書き込みような際には、単なるバイト列として
扱われているので、fclose() されるまでどこで fflush() しようが
性能の劣化を気にしないのであれば構わないでしょう。

けれども、Web ブラウザは流し込まれるデータの形式を読み取りそれが
何であるのか判断してから表示しているのですから、中途半端なところで
「描画しろ」と言われても困るような…
逆に変なところで「描画しろ」と言われて「このページのデータは
ここで終了した」と Web ブラウザが判断してしまったりすると、
今度はユーザの方が困りませんかね?

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
(株) セントラル情報センター
                             後藤和政    kgotoh@cic-kk.co.jp