如何在 PHP 中规避max_execution_time



我尝试向许多订阅者发送消息。我需要长时间执行我的脚本,max_execution_time允许的时间更长。我可以使用 Cron 选项卡,它每次都会按计划执行我的脚本,但我可以在没有 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 选项卡的实现。我想手动开始执行一次,稍后在后台工作。

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

您有几个选择:

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

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

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

最新更新