【发布时间】:2011-02-03 20:14:53
【问题描述】:
我正在尝试构建一个可靠的邮件系统,这给我带来了一些麻烦,而且通常不是很可靠。
我目前有一个专用服务器,它有几个 php 脚本设置来添加要使用 PEAR mail_queue 发送到 MySQL 数据库的邮件,另一个使用 PEAR 和 cron 作业将它们发送出去。这一切都很好。
我正在努力解决的问题是在不关闭发送时事通讯的网站的情况下填充数据库。
时事通讯是从网站后端的管理面板设置和发送的,保存在共享服务器上。单击发送时事通讯按钮时,它会向专用服务器发送一个 cURL 请求以填充数据库。然而,当发送一个有 600 多个订阅者的时事通讯时,整个网站会停止运行,并且在进程完成之前它不会返回 - 它至少会这样做。
如何设置 cURL 或其他可以在后台或异步运行的请求或任何不会杀死站点的请求?
这里有一些代码:
$hCurl = curl_init();
$curl_options = array(CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_URL => "http://DOMAIN/PATH/SCRIPT", CURLOPT_POSTFIELDS => "VARIABLE TO SEND");
curl_setopt_array($hCurl, $curl_options);
$sResp = curl_exec($hCurl);
curl_close($hCurl);
此脚本在检查订阅者是有效电子邮件后将其添加到 mail_queue 并返回状态和任何无效电子邮件。我想将 600 多封电子邮件添加到 MySQL 数据库中需要做很多工作。
任何帮助将不胜感激。
【问题讨论】:
-
该 cURL 请求是否应该启动一个远程脚本,进而发送邮件?无论如何,cURL 函数本身不能启动后台进程。您可能会遇到类似
exec("nohup curl http://www/ &")这样的好运来开始一项无人看管的副业。 -
感谢您的回复。 cURL 请求是用要发送的邮件填充数据库 - 然后使用 cron 作业每隔一段时间发送电子邮件以帮助减少 smtp 服务器上的负载 - 这是问题的一部分。我得看看 exec() 看看它是否有助于后台进程。