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

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

●質問者: nekomilk
●カテゴリ:コンピュータ
✍キーワード:Apache HTML PHP クライアント 接続
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● andi
●18ポイント

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コマンドで実行する方法もあるようです。

◎質問者からの返答

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


2 ● flashcafe
●18ポイント

http://www.spencernetwork.org/memo/tips-3.php

PHP TIPS Vol.3

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


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


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

◎質問者からの返答

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


3 ● karla
●17ポイント

http://www.sem-seminar.com/glossary/e_refresh-meta-tag.html

リフレッシュ・メタタグ

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

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

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

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


(1)

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

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

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

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


(2)

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

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

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

◎質問者からの返答

そうですか・・・。


4 ● ito-yu
●17ポイント

http://www.stackasterisk.jp/tech/php/searchAction.do?cid=21

PhpTips

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



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