我尝试将邮件邮寄给许多订阅者。我需要长时间执行我的脚本 ,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 的实现。我想手动开始执行一次,然后再在后台运行它。
注意:另外我想注意,我不考虑服务器上的负载并在此阶段发送邮件可能的间隔!
答案 0 :(得分:1)
您有几个选择:
命令行 您最好的选择是手动在命令行上运行它。命令行脚本可以更好地运行长时间运行的进程。
Shell Exec
如果必须通过浏览器运行此命令,则可以使用exec
例如触发命令行脚本
shell_exec('php -f /var/www/domain.com/myLongRunningProcess.php > /dev/null 2>/dev/null &')
忽略用户中止
您还可以在浏览器与浏览器会话分离后运行。这是最复杂和最难调试但它可以工作。您必须计算页面的确切大小,然后发送输出并使用函数ignore_user_abort
,以便在浏览器脱离时您的脚本将继续运行。