Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP mail()函数中的延迟_Php - Fatal编程技术网

PHP mail()函数中的延迟

PHP mail()函数中的延迟,php,Php,我有一个小的订购应用程序,它通过ajax将订单提交给PHP脚本。 当PHP脚本收到订单时,它将其放入数据库中,向客户端发送“OK”消息,然后向客户发送确认电子邮件,再向我发送另一封。 问题是客户端在大约15秒钟内没有看到“OK”(更新浏览器显示)。如果我对发送的电子邮件进行注释,则不会延迟 ... write to database echo "OK"; mail($semail,'Msg Subject',$message, $header, $bounceto); mail($semail2

我有一个小的订购应用程序,它通过ajax将订单提交给PHP脚本。 当PHP脚本收到订单时,它将其放入数据库中,向客户端发送“OK”消息,然后向客户发送确认电子邮件,再向我发送另一封。 问题是客户端在大约15秒钟内没有看到“OK”(更新浏览器显示)。如果我对发送的电子邮件进行注释,则不会延迟

... write to database
echo "OK";
mail($semail,'Msg Subject',$message, $header, $bounceto);
mail($semail2,'Msg Subject',$mesage, $header, $bounceto);
信息只有几行

问题:

  • 调用mail()函数时为什么会有延迟
  • 如何在不等待PHP脚本完成的情况下发送“OK”消息?我猜是某种潮水
这是因为返回成功或失败的布尔值,并且邮件服务器需要时间来处理电子邮件请求

您可以为电子邮件实现某种MYSQL队列,您可以将要发送的电子邮件放入其中,并使用后台任务进行检查(例如,使用启动YourMailQueueProcessingScript.php来检查是否有任何电子邮件要发送并执行发送操作-请记住,您最多每分钟可以运行一次CRON,我不知道您是否可以接受发送电子邮件的1分钟延迟)

它应该可以使用,但需要


添加此选项将向用户输出缓冲区并切断连接,脚本的其余部分仍将执行,但不会发送额外的输出,因此请确保在调用
fastcgi\u finish\u request()
以及之后的
mail()之前输出所有内容函数

谢谢你的信息和建议。一分钟的延迟可能是可以接受的。如果我能把缓冲区刷新到客户端,然后让PHP跳转,它可能会更好。它应该工作,但是它需要…而且你可以在那里放置邮件功能。我仍然认为它们是黑客攻击而不是正确的解决方案。从来都不是即时的,所以我还是选择了队列。我说得太快了。看来fastcgi_finish_请求解决了问题,但事实上,由于PHP-FPM没有加载,它以错误终止了PHP脚本(您确实标记了)。这是一个虚拟托管环境,所以我不确定是否可以(或想要)加载PHP-FPM。谢谢。我实现了MySQL电子邮件队列函数。