Apache+PHPで、HTMLを返却(A)して、その後少し時間のかかる処理(B)をする場合、(A)と(B)の間で、クライアントとの接続を切断しておきたいのですが、方法がわかりません。手段はありますか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:andi No.1

回答回数448ベストアンサー獲得回数0

ポイント18pt

http://www.asahi-net.or.jp/~wv7y-kmr/note/2004-05.html

�Ŀ�Ū�ʥ�������˺Ͽ 2004ǯ 5��

今、手元にテスト環境が無いので実際に実現できるか分かりませんが、標準出力をクローズしてみては如何でしょう(Perlでは出来るのですが・・・・)。

http://ns1.php.gr.jp/pipermail/php-users/2003-April/015178.html

[PHP-users 14646]Re: PHPから、長時間かかる処理をバックグラウンドで呼びたい

あるいは別プログラムを作成し、systemコマンドで実行する方法もあるようです。

id:nekomilk

標準出力をクローズするには・・。

2005/11/15 21:24:28
id:flashcafe No.2

回答回数50ベストアンサー獲得回数0

ポイント18pt

同じプロセス内では無理なので、別の実行用のプロセスを起動させるという手法があります。


処理Aをすませ、その後、処理BファイルのURLにプログラムから接続しヘッダーを送るが受信せずにクローズするという方法です。


URLはHTTP接続の例ですが、ここのfputsの後に即fcloseしてexitすれば実現できます。

id:nekomilk

うーむ。できないっすか・・・。

2005/11/15 21:25:36
id:karla No.3

回答回数130ベストアンサー獲得回数4

ポイント17pt

HTTPの仕組み自体がクライアント→サーバといった流れになり逆は出来ません。

一度切断したい場合は、クライアントが自発的に接続しにいく必要があります。

実装する場合は下記のような感じでしょうか。

(1)と(2)の間は接続されていません。


(1)

クライアントからサーバにリクエスト送信

サーバは別プログラムで処理(B)を実行。

処理(B)の結果はDBやファイルに保存。

クライアントへはセッションIDとrefreshのMETAタグを埋め込んだHTMLを送信


(2)

refreshで指定された時間になったらセッションIDをつけてサーバへリクエスト送信。

サーバはリクエストIDからユーザーを判別し、処理(B)が終わっていれば結果を送信。

終わってない場合は再度refreshタグを送信。

id:nekomilk

そうですか・・・。

2005/11/16 08:09:46
id:ito-yu No.4

回答回数323ベストアンサー獲得回数14

ポイント17pt

cliとしてPHPスクリプトを作っておいて、system関数でバックグラウンド起動すればOKです。なお、出力をリダイレクトさせないと、ブラウザは処理待ちになってしまいます。

id:nekomilk

別プロセスを上げれば 可能ということなんですね・・・。

2005/11/16 08:11:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません