我使用的是标准的共享Hostgator,每小时限制为500封邮件。
我试图限制我的电子邮件脚本,每8秒只发送一封电子邮件......
$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秒发送一次电子邮件......
但域名的其余部分完全冻结了。
是否有另一种睡眠方法我可以使用它不会冻结我的整个域名?
谢谢:)
答案 0 :(得分:1)
我建议使用cron作业(Unix)或计划任务(Windows)在设定的持续时间内调用此脚本。
或使用类似Mandrill的内容来处理批量电子邮件的发送。
答案 1 :(得分:1)
Cronjobs不能仅在第二时间执行。分钟字段中的*/1
将每隔1分钟运行一次脚本,但您无法获得更细微的内容。
睡眠没有问题,但不要从浏览器运行命令。您锁定域的原因是因为您的Apache线程在睡眠时被保留在脚本上。在完成之前,您的请求将被阻止并排队。
我建议您保留脚本,然后每小时或每隔几个小时用cronjob执行一次。它经常需要运行多久一次?一天一次?
以下将在午夜之后每晚5点运行,并将其扔到后台。
5 0 * * * user php -f /path/to/file &
答案 2 :(得分:0)
这不能直接在脚本中实现,除非它在每次请求后不断运行并重新读取数据库。
我建议每8秒运行一次cron作业,然后从数据库中读取第一个条目,如果存在,请发送电子邮件:
答案 3 :(得分:0)
您使用while循环锁定服务器。每8秒执行一次循环,然后再等待8秒。其他一切都要等到它完成。尝试使用cron作业。