0

我尝试将消息邮寄给许多订阅者。我需要长时间执行我的脚本,更长的时间是允许的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的实现。我想手动开始执行一次,然后在后台运行它。

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

4

1 回答 1

1

你有几个选择:

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

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

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

于 2014-03-04T11:24:02.780 回答