長時間実行によるブラウザタイムアウト対策
PHPで長時間実行されるバッチ処理で起こる問題。
PHPではサーバー負荷防止のための “max_execution_time” によるタイムアウトがあるが、これとは別にブラウザに画面出力がないまま時間が経過すると、408 Request Timeout が発生してしまう。
タイムアウトまでの時間は、Firefoxではdefaultで115秒、IEでは60秒となっている。
これを防ぐためには、画面に何か定期的に出力しておく必要がある。
バッチ処理の場合は、リアルタイムに処理件数等をカウントしていくプログレスバーを表示する方法がある。
実現方法としてはAjaxを用いる。具体的にはこちらを参考にした。
はじめに全体の処理件数を求める。
ループ処理の最後で処理件数をカウントアップしていき、「処理件数 / 全体件数 * 100」 でプログレスバーのゲージを進める。
これで3分を超える処理でも 408 Request Timeout は起こらなくなった。
ディスカッション
コメント一覧
まだ、コメントがありません