[PHP-users 18135]プログレスバーは実現可能か?

Haruki Nakayama haruki @ parkcity.ne.jp
2003年 10月 1日 (水) 01:24:50 JST


こんばんは。
中山と申します。

今ちょっと表題の件で悩んでいるので、皆さんの知恵を貸していただけたらと思いま
す。

どういうことがしたいかといいますと、現在16MB近いデータをDBにINSERTするスクリ
プトを書いています。
ファイルのアップロードをしてから、ループでひたすらINSERTを繰り返すようにして
いるのですがこのINSERT実行中にWindowsで言うところのプログレスバーのような物
をイメージしていただけるとわかりやすいと思うのですが、"■"を処理が完了した件
数が増えるにつれてどんどんと表示するようにしたいのです。

私の考えとしては、出力制御関数を用いて一定件数の処理が完了するたびに表示させ
たい文字をechoしてob_flush();をすればいいかと考えていたのですが、順々に表示
されずに一度に全部に表示されてしまいました。

いかがそのソースコード(表示の処理にかかわっている部分だけ)です。

    pg_query($db, $sql);    //INSERTクエリ実行
    if ($i % DATA_UNIT == 0) {    //DATA_UNIT=100
        echo "■";
        if (($i % (DATA_UNIT * 10) == 0) && ($i % (DATA_UNIT * 50) != 0)) {
            echo " ";
        } elseif($i % (DATA_UNIT * 50) == 0) {
            echo "<br>";
        }
    ob_flush();
    }
    $i++;

ループの中にこの一連のコードが入っています。
本質的に要るのは上から3行目までと下から2行目で他のはHTMLの体裁を整えるために
書いたものです。
すなわちDATA_UNITを100で定義してある場合だと、100件処理したときに■が1つ表示
され、10個目と11個目の■の間にスペースが入り、50個の■を表示したときに改行、
という風に処理しています。

環境は
サーバが
    PHP 4.3.1
    Apache 2.0
    PostgreSQL 7.3.2
クライアントが
    Internet Explorer 4,5,6

となっています。
どうか皆さんよろしくお願いいたします。
________________________________________________________________________

    _/      _/        _/      _/            Haruki Nakayama
   _/      _/        _/_/    _/              [中山 晴貴]
  _/_/_/_/_/        _/  _/  _/      E-Mail :: haruki @ parkcity.ne.jp
 _/      _/        _/    _/_/       Messenger :: clef2 @ hotmail.com
_/      _/   _/   _/      _/        URL :: http://www.s8.xrea.com/
________________________________________________________________________




PHP-users メーリングリストの案内