2009-05-22 11 views
1

私は、結果を待っているブラウザウィンドウを残さないフォーム送信時に関数を開始する方法を探しています。フォームのサブミットバックグラウンド関数PHPの実行

例: ユーザーがフォームに入力してsubmitを押すと、フォームからjavascript経由でデータがデータベースに送られ、数秒かかるphpの関数が開始されますが、ユーザーは待たされたくありませんその機能の終わり。私は彼を別のページに連れて行き、その機能をサーバーサイドで行うことができるようにしたいと考えています。

どのような考えですか?すべての返信用

おかげ


感謝を...

私はAjaxの一部を得ました。しかし、私はajaxを呼び出してブラウザを別のページに移動させることはできません。

これは私が欲しかったものです。

- ユーザは、フォームに記入し、データベースに渡されたフォームから -resultを提出 -long迷惑な処理機能は、「長い迷惑な処理機能」のステータスの独立したサイトの残りの部分を、訪問に運ぶ-user を開始します

ところで、誰かがそれを提案する前に。いいえ、それはcronジョブによって行うことができない

答えて

3

AJAXを使用してPHPスクリプトを呼び出し、スクリプトの先頭でignore_ user_ abortをオンにします。

ignore_user_abort(true); 

こうすれば、ページから遠ざかると、スクリプトはバックラウンドで実行され続けます。

set_time_limit(0); 

を使用して、スクリプトの完了に時間がかかることがわかっている場合に便利です。

+0

cool ...私はこれが好きです:) –

1

最も一般的な方法は次のとおりです。

exec("$COMMAND > /dev/null 2>&1 &"); 
+0

私は自分のコードでどのように設定しますか? ? –

+0

hugo、つまりサーバーサイドコードです。ブラウザ要求に応答し、サーバー上に存在するコード。あなたはクライアント側のコード(おそらくjavascript)について話しています。この場合、AJAXに関連する以下の回答を参照してください – simon622

+0

これはオプションですが、通常、Webデベロッパーが「毎日の」アプリケーションを作成するときに避けようとします。 PHPスクリプトでシェルコマンドを実行すると、大きなセキュリティリスクが発生する可能性があります。例えば、 "command"が "cat"であり、ユーザがcatにファイルを与えることが許されているなら、望ましくないかもしれない 'cat/etc/passwd'を実行することができます! – poundifdef

0

これはまさにAJAX(非同期JavaScriptの+ XMLの略記)であるためです。

AJAX Information

これは、ユーザーのブラウザがページ全体の要求によってinterupptedされていないように、あなたはクライアント側のコードを使用してコード、およびサーバーへの非同期リクエストを送信することができます。

ウェブ上にあるAJAXに関連する情報がたくさんあるので、深呼吸してグーグルになる!

0

AJAX(非同期JavascriptとXML - google)の機能のいくつかを使いたいと思うようなサウンドがあります。

基本的に、内容のページがあります。ユーザーがボタンをクリックすると、JavaScriptがサーバーにデータをPOSTして処理を開始するために使用されます。同時に、JavaScriptをサーバーからページをロードし、それが表示される場合があること(例えば、負荷データを、そしてその新しいページでDIVの内容を置き換える。)

事のこの種類はAJAXの背後にある前提でありますこれは複数のものを同時に処理するWebページがあるときにどこからでも見ることができます。

注意点:これは、スクリプトが「サーバーのバックグラウンドで」実行されているわけではありません。ウェブブラウザはウェブサーバとの接続を維持しています。つまり、コードはクライアントの側の「バックグラウンド」で実行されています。「バックグラウンド」とは、「HTTPリクエストを他のHTTPリクエストと並行して処理して、「バックグラウンド」実行プロセスの感触を与えること」を意味します。

1

ああ、基本的にはPHPのサポートしかし、一般的な答えはノーです...

この動作を模倣するために実行できるトリックがあります。その1つは、上で強調表示されており、サーバー上の別のプロセスにフォークアウトします。を含む多くの方法で習得することができます。

exec() 

メソッド。あなたはここを見たいかもしれません。

PHP threading

私はまた戻って、クライアントへの応答を強制しようとすると、人々はスクリプトを介して出力バッファ途中のフラッシュを強制しようと見てきた、私は、このアプローチがどのように成功を知らないが、多分誰かそうでなければ、その情報があります。

関連する問題