2017-03-16 89 views
1

我有一个小订单服务应用程序,通过ajax将订单提交给PHP脚本。 当PHP脚本接收到它的命令后,它将它放入数据库中,发送一个'OK'消息返回给客户端,然后向客户发送确认电子邮件,向我发送确认邮件。 问题是,客户端没有看到“确定”(它更新浏览器显示)约15秒。如果我注释掉电子邮件发送,请不要拖延。PHP邮件()函数中的延迟

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

消息只是几行。

问题:

  • 调用mail()函数时为什么会有延迟?
  • 如何在不等待PHP脚本完成的情况下发送'OK'消息?我正在猜测某种冲动。

回答

2

这是因为http://php.net/manual/en/function.mail.php返回成功或失败的布尔值,并且您的邮件服务器需要时间处理电子邮件请求。

您可以实现某种MYSQL队列的电子邮件,你会把电子邮件的发送,并与后台任务(例如使用CRON劳克YourMailQueueProcessingScripts.php,将检查是否有任何电子邮件发送和执行发送检查操作 - 请记住,您最多可以每分钟运行一次CRON,并且我不知道发送电子邮件的延迟是否可以延迟1分钟)

+0

感谢您的信息和建议。一分钟的延迟可能是可以接受的。如果我可以将缓冲区刷新到客户端,然后让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