[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 メーリングリストの案内