在php的单独线程上发送电子邮件

时间:2011-07-07 23:27:01

标签: php multithreading email

我想知道是否有办法在php中启动一个单独的线程来发送和发送电子邮件。 我有一个小型的Web服务,从iPad应用程序获取一些信息,然后将数据插入数据库并随后发送电子邮件。问题是有时电子邮件发送时间太长而iPad的请求超时。有没有办法可以在单独的线程上发送电子邮件?我基本上想在电子邮件发送之前告诉iPad一切顺利。

一些示例代码:

... Process info and insert into DB
echo "success"; //this should be returned to the iPad right away.

//start new thread here or possibly fork???
$email->send();

谢谢!

2 个答案:

答案 0 :(得分:6)

正如所指出的,PHP没有多线程功能,但它确实具有多处​​理功能。您可以创建并调用第一个用于处理电子邮件的第二个PHP。该脚本需要能够在命令行上运行。

exec('nohup php emailscript.php >/dev/null 2>&1 &');

拥有nohup以及之后的所有内容非常重要。这样做是将进程置于后台并重定向所有输出。否则PHP将等待它完成并返回一些东西。当父调用进程结束时,nohup将确保脚本不被操作系统杀死。

您确实需要以某种方式将电子邮件信息传递给脚本。您可以将信息放在数据库中,并将其传递给记录ID,将信息作为参数传递,或者传递给其他一些选项。

答案 1 :(得分:1)

我相信您希望执行ob_flush()将数据发送回客户端并允许您的PHP脚本继续执行。请注意,您必须完成将内容发送回客户端,因为您无法在ob_flush()之后再发送内容。