我尝试向许多订阅者发送消息。我需要长时间执行我的脚本,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
,以便在浏览器脱离时脚本将继续运行。