時間がかかる処理なので、バッチ処理のようにしたいです。
エラーなどはサーバーのログファイルに出力して画面に返却する必要はありません。
そのままHTTPで処理待ちをするとapacheがタイムアウトしてしまいます。
タイムアウト時間を延ばすことはしたくありません。
理想としては
HTTPからアクセスがあり、処理起動する。
すぐにHTTPに処理終了を返す。
しかし処理は継続して行う。
どのような組み込みを行えばよいでしょうか。
使えるものは、php5 apache2.2 Jqueryです。
大雑把な流れとしては、
1.ブラウザでアクセスしたPHPスクリプトで、system関数などで別プロセスを起動して終了。
2.起動された別プロセスの処理で時間のかかる処理を実行する。
3.2の処理状況を表示するスクリプトを用意する
4.1の結果画面のJavaScriptにおいて定期的に3のスクリプトにアクセスして実行状況を確認
というのが抽象的な流れが一般的でしょうか。
ただし、レンタルサーバによっては制約がかかっていて、sysytem関数が使えない、処理が一定時間で打ち切られてしまうなどの場合があります。この場合は、2の処理をcronからの起動に変えたり、処理を細切れにして複数回の実行によって実現するなど工夫が必要です。
この流れを複数回実行するためには、この流れの識別IDみたいなものが必要になります。
1でIDを生成
2のスクリプトはパラメタとしてIDを受取り、処理結果はそのIDの状況として記録する
3のスクリプトはパラメタとして受け取ったIDに関する状況を表示する
4のJavaScriptにIDを埋め込んでおき、そのIDを添えて3のスクリプトへアクセスする
というような形で関連付けられます。
そして、このIDをどう扱うかで実装方針は色々あるでしょう。
DBを使うか、ファイルシステムを使うかが簡単でしょう。
DBを使うのであれば、1で状況テーブルのようなものでも作って、2でその状況を更新し、4からのリクエストに応じて3がその行にアクセスするという形でいいでしょう。
ファイルシステムを使うのであれば、1でIDのディレクトリを作成し、2でそのディレクトリ内に状況をファイルとして格納して、4からのリクエストに応じて3がそのファイルの内容を表示するという感じでしょうか。終わったかどうかのような単純な情報しか残す必要がないのであれば、ディレクトリを作らずにファイルでもいいでしょう。
また、cronからの起動にした場合は、2の起動にIDをパラメタとして渡すことができなくなるので、DBの行の登録日時や、ファイルのタイムスタンプの古いものからなどと判別しなければならないでしょう。
何かの参考になれば。