PHPのバッチ処理

大抵の方はPHPはエンドユーザ向けの掲示板、チャット、ブログ等で
利用されているかと思うので、PHPバッチ処理に使用するようなことは
ほとんど無いと思います。しかし業務システムにPHPを利用するなら最低でも月に2〜3回はバッチ処理
を行います。

元々PHP、というよりWebの仕組み自体あまりバッチ処理に向かないものなので、
その辺りを考慮しないと非常に痛い目を見ます。今回は私がPHPバッチ処理に使って痛い目をみた
事例を紹介します。


max_execution_time

デフォルトでは30に設定されていますが、データが多少(100KB〜)増えるだけで簡単に30秒は
超えます。最低でも1800くらいにはしておきましょう。

また、3600より上の値を入力しても実際には3600秒(一時間)に設定され、0に設定しても実際には実行時間
無制限にはなりません。
もし1時間以上バッチ処理を実行する可能性が少しでもあるならset_time_limit()関数を使いましょう。


set_time_limit( 0 );

これで実行時間無制限に設定出来ます。

また、PHPのマニュアルには
http://jp2.php.net/manual/ja/function.set-time-limit.php
set_time_limit( )をファイル中で使用していてもphp.ini等でmax_execution_timeの値が定義されている時には
set_time_limit( )よりmax_execution_timeが優先される、と書いていますがこれは間違いです。
実際にはset_time_limit( )が優先されます。


Internet Exploreの仕様

Internet Exploreは1時間以上Webサーバとのコネクションが続くと、強制的にタイムアウトします。
これは非常に原因追求まで時間がかかりました・・・
結局解決方法としてはレジストリを弄ってInternet Exploreのタイムアウト時間を延ばすことにしました。

参考ソース:http://support.microsoft.com/default.aspx?scid=kb;ja;181050

一応、私が詰まった部分は以上ですが、それぞれの環境によって
原因は多岐に渡ります。