[PHP-users 17049]Re: CSVファイル生成+ダウンロード処理のタイムアウトについて

Hiroaki WATANABE hiroaki @ be-simple.com
2003年 7月 30日 (水) 11:29:09 JST


Hiroaki です。

>> PHPで処理が重い場合、ブラウザのタイムアウトを回避する手法として、
>> flush()を使う手法があるのですが・・・

> 自分も最近似たようなことではまりました。。。
> が、結局flush()を使って処理できるようになったので、
> 深追いはしなかったのですが、
> ヘッダを送る前に、
>  set_time_limit(秒数);
> をコールして、php.iniの設定をオーバーロードする方法もあるようです。

以前、非常に多数のレコード(100万とか200万件とか)を持つ
CSVファイルをブラウザからをアップロードしてDBにストア
する処理をPHP4.1で実装したことがありました。

このとき、PHP側のタイムアウト期間を延長してもブラウザ
のほうで接続を切ってしまったので、ブラウザのタイムアウ
ト(5分だったかな?)以内で、ブラウザに何かしらのデータ
を返す必要がありました。

似たような処理をPerlで実装したときは、プロセスをforkして
子プロセスでは、改行コードを数秒おきに送る処理をしていま
した。

当時は、PHPでプロセスをどうこうする方法が思い浮かばな
かったので、DBへのインサート処理を小分けにしてブラウザ
へ進捗状況を返す処理にしました。

具体的には1万レコード程度をDBへインサートしたら、
「現在○○%処理が終了しました」
とブラウザにページを表示させ、ページがロードされた瞬間に
JavaScriptを使ってSubmitさせて次の処理に進ませた記憶があります。

ユーザー側も、どれくらい処理が進んでいるのかわかるので
妥当な処理かなぁと当時は思っていました。まぁ、業務系システム
だったのでブラウザのバージョンも制限できたから可能だった処理
ではあるんですが。

では。

--
Hiroaki WATANABE
hiroaki @ be-simple.com



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