PHP回调过程

时间:2013-08-18 17:47:15

标签: php mysql callback

我有一个访问MySQL数据库然后发送电子邮件的表单。

访问数据库的速度很快,但相比较而言,执行电子邮件过程的速度很慢,这会导致用户在等待mail()完成时认为网页已挂起的问题。

在没有进入控制用户行为的对话中,是否可以在PHP中创建一个线程或回调,以便我可以将邮件例程发送到后台,以便页面的正常操作可以继续?净网,我不想等待整个过程完成并停止页面,但我愿意开始并稍后查看结果,甚至点击忘记它。

是的,有使用JS的替代品,但我想先看看选项。

以下是一些警告:
1.我没有shell访问权限 2.它在没有远程功能的Windows服务器上运行 3.我只能在本地机器上创建页面并通过ftp上传(即Godaddy)

3 个答案:

答案 0 :(得分:1)

This blog post建议将mail方法的其他投放模式参数设置为Background,而不是默认Interactive。这可能就是你要找的东西。

mail($to, $subject, $message, $headers, 'O DeliveryMode=b')

答案 1 :(得分:0)

PHP中没有线程,我怀疑它会有什么。您可以在某种程度上使用流程模拟它,但在您的情况下,这是不可能的。您的问题可以通过消息队列作为典型的生产者/消费者问题来解决。创建一个DB表来存储要发送的消息队列,并有2个脚本 - 首先将消息添加到DB中。第二个进程负责从该DB表中获取这些消息,将其发送并删除。

您可以简单地使用一个文件夹,每个电子邮件由一个文件代表,该文件具有一些基于microtime()调用的唯一名称。

答案 2 :(得分:0)

您可以使用session_write_close()提前结束连接。之后,您可以执行耗时的任务,而无需用户注意到“页面正在加载”。请注意,除非您更改,否则页面的最长执行时间仍然存在。有关详细信息,请参阅this documentation

echo 'Hello StackOverflow';

session_write_close();

mail( $to, $subject, $message, $headers );

while( TRUE ) { }