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コマンドで実行する方法もあるようです。
http://www.spencernetwork.org/memo/tips-3.php
PHP TIPS Vol.3
同じプロセス内では無理なので、別の実行用のプロセスを起動させるという手法があります。
処理Aをすませ、その後、処理BファイルのURLにプログラムから接続しヘッダーを送るが受信せずにクローズするという方法です。
URLはHTTP接続の例ですが、ここのfputsの後に即fcloseしてexitすれば実現できます。
うーむ。できないっすか・・・。
HTTPの仕組み自体がクライアント→サーバといった流れになり逆は出来ません。
一度切断したい場合は、クライアントが自発的に接続しにいく必要があります。
実装する場合は下記のような感じでしょうか。
(1)と(2)の間は接続されていません。
(1)
クライアントからサーバにリクエスト送信
サーバは別プログラムで処理(B)を実行。
処理(B)の結果はDBやファイルに保存。
クライアントへはセッションIDとrefreshのMETAタグを埋め込んだHTMLを送信
(2)
refreshで指定された時間になったらセッションIDをつけてサーバへリクエスト送信。
サーバはリクエストIDからユーザーを判別し、処理(B)が終わっていれば結果を送信。
終わってない場合は再度refreshタグを送信。
そうですか・・・。
cliとしてPHPスクリプトを作っておいて、system関数でバックグラウンド起動すればOKです。なお、出力をリダイレクトさせないと、ブラウザは処理待ちになってしまいます。
別プロセスを上げれば 可能ということなんですね・・・。
標準出力をクローズするには・・。