30秒制限

2009年5月1日 TCG全般
WHISPERで再録込みのデータをダウンロードしようとした所、
データが途中でぶった切れました。

中を確認すると、
「PHPで30秒以上かかったので落としたよ」
という感じのメッセージが。
ああなるほどね、という感じ。
とりあえず落としきらなかった分は別途前方一致検索かけて、
分割してダウンロードして後でマージして対応。

PHPではデフォルトでは30秒以上時間が掛かると、
そこで動作を中断してしまう。
まあハングアップを防ぐためのタイムアウト機能なんだけど、
長い処理をさせたい時にはこの制限が結構ウザい。

PHPの場合、この制限を調整するのがset_time_limit関数なんだけど、
php.iniで指定されている時間以上に伸ばすのは基本的に無理。

ただこういうタイムアウトする様な処理をする時には、
大体ループをかけて回している事が多い、
ということで一定時間毎に上記の時間をリセットしてやればOK。

今回のカードデータ解析部分でも似た様な自体が発生。
一応ローカルなのでphp.iniを編集して対応とかも思ったけど、
将来的にサーバーに配置する事を考えると
もう少し違ったアプローチが欲しい所。

ということで1000件毎にset_time_limit(30)としてやって、
30秒間タイムアウトを伸ばしてやる事に。
タイムアウトのカウンタはset_time_limitを実行した時点で一旦クリアされるので、
次の1000件が30秒以上掛からない限りこれで継続して実行可能。
まあ、この方法も万能というわけではなくて、
ブラウザ側がタイムアウトする可能性があるんだけど、
今回は1分かからなかったので、これで問題無さそう。

とりあえずこれでカードデータベースの構築は終了。
次はカードセット様のテーブルの作成と、カード検索ロジックの作り込みかな。

コメント

最新の日記 一覧

<<  2025年6月  >>
1234567
891011121314
15161718192021
22232425262728
293012345

お気に入り日記の更新

テーマ別日記一覧

この日記について

日記内を検索