代码之家  ›  专栏  ›  技术社区  ›  Paulo Bueno

php阻止邮件的最大执行时间限制[重复]

php
  •  1
  • Paulo Bueno  · 技术社区  · 16 年前

    这个问题已经有了答案:

    我有一个每小时发送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 回复  |  直到 16 年前
        1
  •  1
  •   Paul Lammertsma    16 年前

    为了再次检查您是否不能设置执行时间,这里有两个建议。


    你可以打电话 set_time_limit() 在发送电子邮件之前。根据 PHP docs :

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

    例如:

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

    另一种选择是通过cron。因为您是从cron作业运行php,所以可以 specify your own php.ini . 您可以执行脚本,如下所示:

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

    在哪里? my_php.ini 可指定:

    max_execution_time = 0     ; (unlimited)
    
        2
  •  5
  •   Arno    16 年前

    如果您的脚本是用cron启动的,这意味着您使用的是php-cli“php命令行界面”。

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

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

        3
  •  0
  •   jldupont    16 年前

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

    这种方法的优点是 可缩放 :你可能会在成长过程中发送更多的电子邮件,不是吗?

    推荐文章