人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ブラウザからPHPプログラムにアクセスして処理を起動。
時間がかかる処理なので、バッチ処理のようにしたいです。
エラーなどはサーバーのログファイルに出力して画面に返却する必要はありません。

そのままHTTPで処理待ちをするとapacheがタイムアウトしてしまいます。
タイムアウト時間を延ばすことはしたくありません。

理想としては
HTTPからアクセスがあり、処理起動する。
すぐにHTTPに処理終了を返す。
しかし処理は継続して行う。

どのような組み込みを行えばよいでしょうか。

使えるものは、php5 apache2.2 Jqueryです。

●質問者: pinkymonk
●カテゴリ:コンピュータ インターネット
✍キーワード:Apache HTTP jQuery PHP アクセス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tdoi
●100ポイント

大雑把な流れとしては、

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の行の登録日時や、ファイルのタイムスタンプの古いものからなどと判別しなければならないでしょう。

何かの参考になれば。

http://dummy


2 ● じゅぴたー
●100ポイント

PHPスクリプトをCGI化して、CLI版のPHPで動作させるようにしてみてはどうでしょう。

Apacheとは別プロセスで動くようになります。


具体的な手順は「PHP をコマンドラインから使用する」をご覧ください。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ