2

我在一个标准的共享 Hostgator 上,每小时限制为 500 封邮件。

我正在尝试限制我的电子邮件脚本,使其每 8 秒仅发送 1 封电子邮件...

$query=mysql_query("SELECT email FROM users WHERE verified='1' ORDER BY balance DESC");
while($arr=mysql_fetch_array($query)){
set_time_limit(30);
$mail->AddAddress($arr[0]);
$mail->Send();
$mail->ClearAddresses();
echo "Sent to ".$arr[0]."<br><br>";
sleep(8);
}

我正在使用 PHPMailer。该脚本本身运行良好,它每 8 秒发送一次电子邮件......

但是域的其余部分完全冻结了。

是否有另一种我可以使用的睡眠方法不会冻结我的整个域?

谢谢 :)

4

4 回答 4

1

我建议使用 cron 作业 (Unix) 或计划任务 (Windows) 在设定的持续时间内调用此脚本。

或者使用Mandrill之类的东西来处理批量电子邮件的发送。

于 2012-08-23T22:51:18.353 回答
1

Cronjobs 不能秒执行,只能分分钟执行。*/1在分钟字段中将每 1 分钟运行一次脚本,但您无法获得比这更精细的信息。

睡眠没有问题,但不要从浏览器运行命令。您锁定域的原因是因为您的 Apache 线程在脚本上处于休眠状态。在完成之前,您的请求将被阻止并排队。

我建议你保留你的脚本,然后每小时或每隔几个小时使用一次 cronjob 执行它。它真的需要多久运行一次?一天一次?

下面将在每晚午夜 5 点运行它,并将其扔到后台。

5 0 * * * user php -f /path/to/file &
于 2012-08-23T22:58:53.350 回答
0

这不能直接在脚本中实现,除非它不断运行并在每次请求后重新读取数据库。

我建议每 8 秒运行一次 cron 作业,然后从数据库中读取第一个条目,如果存在,发送电子邮件:

  1. 设置 cron 作业以每 8 秒调用一次脚本
  2. 脚本查询数据库以获取表中的第一个条目
  3. 如果数据存在,请根据该数据发送电子邮件
  4. 删除行
  5. 脚本结束
于 2012-08-23T22:52:48.677 回答
0

您正在使用 while 循环锁定您的服务器。每 8 秒执行一次循环,然后再等待 8 秒。其他一切都必须等到它完成。尝试使用 cron 作业。

于 2012-08-23T22:54:47.867 回答