1

ユーザーが特定のプロファイル ページを表示したときに、エンド ユーザーに電子メールを送信する必要がありますが、可能であればこれを非同期で行いたいと考えています。これはPHPで行うことができますか?ページの残りの部分をレンダリングする前に PHP 関数が完了するのを待ちたくありません。ユーザーにとってシームレスである必要があります。

または、これはクライアント側からのより良い解決策ですか:

$.post("msg.php?user=xxx", function(data) {
    ....   
}, "json");

好ましい方法はありますか?

4

3 に答える 3

4

双方向性が必要な場合は、ajax()メソッドを選択してください。リスナ スクリプトをヒットする (それによって PHP 機能のセットを初期化する) だけの場合post()は、同じメソッドの簡略版である which を使用します。

$(function() {

   // If you just want to activate a listener script (with no interaction)
   $.post('/path/to/script.php');

   // If you want to receive data back from your script for use in the DOM
   $.ajax({
      type: "POST",
      url: "/path/to/script.php",
      data: { name: "John", location: "Boston" }
   }).done(function( response ) {
      alert( response );
   });

});
于 2013-01-28T20:51:26.230 に答える
0

あなたが提案したように、ページに非同期アクションを実行させる最良の方法は、AJAX を使用することです。

于 2013-01-28T20:42:50.160 に答える
0

サーバー側のソリューションで行き詰まっている場合は、proc_open または shell_exec を使用してスクリプトを実行できます。環境によってはこれにいくつかの制限があるかもしれませんが、これは一般的に PHP をマルチスレッド化するための迅速で汚い方法であり、非同期で物事が起こることを可能にします。

つまり、スクリプトのどこかで、フラグ (notify フラグなど) が設定されている場合、「../private/notify.php」のようなプロセスをディスパッチします ... のコマンド ライン呼び出しに引数を渡す方法を参照してください。 php。sendmail を直接呼び出すオプションもあります。

試す前に、必ず少しテストしてください。次のことを確認する必要があります。

  1. 新しいスレッドを安全かつ正常に生成できます
  2. 現在のスクリプトの実行を終了するために、そのスレッドが完了するのを待つ必要はありません
  3. そのスレッドは、エラーが発生した場合でも成功した場合でも、安全に終了して単独で終了します
  4. 問題をデバッグできるように、エラー (メールの失敗など) を処理する方法があります。ここでは、ログファイルが最良の答えかもしれません。
于 2013-01-28T21:05:01.137 に答える