2017-03-16 19 views
1

私は、注文をPHPスクリプトにajaxでサブミットする小さな注文アプリケーションを持っています。 PHPスクリプトが注文を受け取ってデータベースに格納すると、「OK」メッセージがクライアントに送り返され、確認メールが顧客に送信され、もう1つが私に送信されます。 問題は、クライアントが約15秒間(ブラウザの表示を更新する)「OK」を表示していないことです。私が電子メールを送信するとコメントすると、遅延はありません。PHP mail()関数の遅れ

... write to database 
echo "OK"; 
mail($semail,'Msg Subject',$message, $header, $bounceto); 
mail($semail2,'Msg Subject',$mesage, $header, $bounceto); 

メッセージはわずか2行です。

質問:メール()関数を呼び出すときに

  • がなぜ遅れがあるだろうか?
  • PHPスクリプトが完了するのを待たずに「OK」メッセージを送信させるにはどうすればよいですか?私が推測しているいくつかの並べ替えのフラッシュ。

答えて

2

これは、http://php.net/manual/en/function.mail.phpが成功または失敗のブール値を返し、メールサーバーがメールリクエストを処理するのに時間がかかるからです。

あなたは、送信を送信し、実行するための任意の電子メールがあるかどうかをチェックしますYourMailQueueProcessingScripts.phpを出せするCRONを使用して(たとえば、あなたが送信する電子メールを入れて、バックグラウンドタスクでそれをチェックする電子メールをMYSQLキューのいくつかの種類を実装することができますCRONを毎分1回実行できることを念頭に置いておいてください。あなたが電子メールを送信するのに1分遅れても受け入れられるかどうかわかりません)

+0

ありがとうございました。おそらく1分の遅れが許容されます。私はちょうどクライアントにバッファをフラッシュすることができますし、PHPのチャグを離れてそれが良いかもしれないことができますか? –

+0

http://php.net/manual/en/function.fastcgi-finish-request.phpでも動作しますが、https://php-fpm.org/ – Mark

+0

が必要です。http://があります。 php.net/register_shutdown_functionメール機能を置くことができます。それでも、私は彼らがハックであり、適切な解決策ではないと考えています。電子メールは決して瞬間ではなかったので、私はまだキューを選ぶだろう。 – Mark

関連する問題