如何规避PHP中的max_execution_time?

时间:2014-03-04 10:32:04

标签: php cron crontab mailing

我尝试将邮件邮寄给许多订阅者。我需要长时间执行我的脚本 max_execution_time允许的时间更长。我可以使用 Cron Tab ,每次按计划执行我的脚本,但是我可以在没有cron标签的情况下执行吗?我尝试这样的事情:

    $maxTime = ini_get('max_execution_time');
    $startTime = time();
    foreach ($emails as $email) {
        if (time() < $startTime + $maxTime - 2) {
            // do something
        } else {
            // reload this page
        }
    }

并且它运行良好,但是如果我在浏览器选项卡中关闭此页面,它就会死掉并且不会重新加载。我提醒一下,我正在寻找这个没有Cron Tab 的实现。我想手动开始执行一次,然后再在后台运行它。

注意:另外我想注意,我不考虑服务器上的负载并在此阶段发送邮件可能的间隔!

1 个答案:

答案 0 :(得分:1)

您有几个选择:

命令行 您最好的选择是手动在命令行上运行它。命令行脚本可以更好地运行长时间运行的进程。

Shell Exec 如果必须通过浏览器运行此命令,则可以使用exec例如触发命令行脚本 shell_exec('php -f /var/www/domain.com/myLongRunningProcess.php > /dev/null 2>/dev/null &')

忽略用户中止 您还可以在浏览器与浏览器会话分离后运行。这是最复杂和最难调试但它可以工作。您必须计算页面的确切大小,然后发送输出并使用函数ignore_user_abort,以便在浏览器脱离时您的脚本将继续运行。