php阻止邮件的最大执行时间限制

时间:2009-12-18 13:40:06

标签: php

我有一个脚本可以发送300-500封电子邮件包。这意味着此脚本将使用cron或其他功能每小时触发一次。

服务器的最大执行限制为30秒,并且不可配置。

我一直在想下面的伪代码是否应该起作用:

$time=time();
$count=0;
while(condition){
    $count++;
    send(email);
    $now=time();
    if($now-$time>=29){break;} //1sec margin
}
echo "$count e-mails sent";

评论

3 个答案:

答案 0 :(得分:5)

如果你的脚本是用cron启动的,那就意味着你正在使用PHP-CLI“PHP命令行界面”。

正如PHP documentation中所述,使用CLI时没有时间限制。

所以您不必担心:max_execution_time设置为unlimited

答案 1 :(得分:1)

只是要仔细检查你是否无法设置执行时间,这里有两个建议。


您可以在发送电子邮件之前致电set_time_limit()。根据{{​​3}}:

  

调用时,set_time_limit()从零重新启动超时计数器。换句话说,如果超时是默认的30秒,并且脚本执行25秒,则进行诸如set_time_limit(20)之类的调用,脚本将在超时之前运行总共45秒。

例如:

foreach ($emails as $email) {
    set_time_limit(30);
    send($email, ...);
}

另一种选择是通过cron。由于您是从cron作业运行PHP,因此可以PHP docs。您可以按如下方式执行脚本:

php -c /custom/directory/my_php.ini my_script.php

my_php.ini可指定的位置:

max_execution_time = 0     ; (unlimited)

答案 2 :(得分:0)

以较小的块分解任务。使用数据库保持实际作业执行的“状态”。

这种方法具有可扩展性的优势:您可能最终不得不随着成长发送更多电子邮件,不是吗?