0

MySQL データベースにアクセスしてメールを送信するフォームがあります。

mail()データベースへのアクセスは高速ですが、電子メール プロセスの実行は比較的遅いため、完了を待っている間に Web ページがハングしたとユーザーが考えるという問題が発生します。

ユーザーの動作を制御するという会話に入ることなく、PHP でスレッドまたはコールバックを作成して、メール ルーチンをバックグラウンドに送信し、ページの通常の操作を続行できるようにすることは可能ですか? ネットネットは、プロセスが終了してページが停止するのを待つ必要はありませんが、プロセスを開始して後で結果を確認するか、クリックして忘れることさえできます.

はい、JS を使用して代替手段がありますが、最初にオプションを確認したかったのです。

1. シェル アクセス権があり
ません。
2. これは、リモート機能のない Windows サーバー上で実行されます。
3. ローカル マシンでしかページを作成できず、ftp 経由でアップロードできます (例: Godaddy)

4

3 に答える 3

1

このブログ投稿mailでは、メソッドの追加の配信モード パラメータをBackgroundデフォルトの代わりに に設定することを提案していますInteractive。これはあなたが探しているものかもしれません。

mail($to, $subject, $message, $headers, 'O DeliveryMode=b')
于 2013-08-18T17:54:00.943 に答える
0

PHP にはスレッドがありません。プロセスである程度シミュレートできますが、あなたの状況では不可能です。あなたの問題は、典型的なプロデューサー/コンシューマーの問題として、メッセージ キューで解決できます。送信するメッセージのキューを格納する DB テーブルを作成し、2 つのスクリプトを用意します。最初にメッセージを DB に追加します。2 番目のプロセスは、その DB テーブルからこれらのメッセージを取得し、送信して削除します。

DB の代わりに、microtime() 呼び出しに基づいた一意の名前を持つファイルで表される各電子メールを含むフォルダーを単純に使用できます。

于 2013-08-18T17:57:30.693 に答える