如何规避PHP中的最大执行时间?
我尝试向许多订户发送邮件。我需要执行脚本很长时间,比如何规避PHP中的最大执行时间?,php,cron,crontab,mailing,Php,Cron,Crontab,Mailing,我尝试向许多订户发送邮件。我需要执行脚本很长时间,比最大执行时间所允许的时间要长得多。我可以使用Cron-Tab,它将按计划每次执行我的脚本,但我可以在没有Cron-Tab的情况下执行吗?我试着这样做: $maxTime = ini_get('max_execution_time'); $startTime = time(); foreach ($emails as $email) { if (time() < $startTime + $maxTi
最大执行时间所允许的时间要长得多。我可以使用Cron-Tab,它将按计划每次执行我的脚本,但我可以在没有Cron-Tab的情况下执行吗?我试着这样做:
$maxTime = ini_get('max_execution_time');
$startTime = time();
foreach ($emails as $email) {
if (time() < $startTime + $maxTime - 2) {
// do something
} else {
// reload this page
}
}
$maxTime=ini_get('max_execution_time');
$startTime=时间();
foreach($email作为$email){
if(time()<$startTime+$maxTime-2){
//做点什么
}否则{
//重新加载此页
}
}
它工作得很好,但如果我在“浏览器”选项卡中关闭此页面,它会死掉并且不会重新加载。我提醒您,我正在寻找不带Cron选项卡的实现。我想手动执行一次,然后在后台运行
注意:我还想注意,在这个阶段,我不考虑服务器上的负载和发送邮件的可能间隔 您有几个选择:
命令行
您最好的选择是在命令行上手动运行。命令行脚本更适合于运行长时间运行的进程
Shell Exec
如果必须通过浏览器运行此命令,可以使用exec
eg触发命令行脚本
shell_exec('php-f/var/www/domain.com/myLongRunningProcess.php>/dev/null 2>/dev/null&')
忽略用户中止
您还可以在浏览器与浏览器会话分离后运行。这是最复杂和最难调试的,但它可以工作。您必须计算页面的确切大小,然后发送输出并使用函数ignore\u user\u abort
,以便在浏览器断开时脚本将继续运行。线程化php如何在限制范围内分割工作,而不触发主机施加的执行超时?我无法禁用托管时的最大执行时间。我现在有30秒的限制设置时间限制(0)代码>以使其永远不会timeout@micb谢谢,但我正在使用共享主机,主机禁用了set\u time\u limit
功能。(@Victor)您可以使用标题(“位置:http://domain.com/process.php?lastId=1")
。发送每条记录后,页面将重新加载,然后您只需要让它将您处理的最后一个ID传递给header函数。然后您可以让它从停止的位置开始。这应该可以解决30秒超时问题,但在共享主机上,您可能会发现,如果您开始使用大量的服务器资源。我尝试使用忽略\u user\u abort(TRUE)
但是当我的脚本自动重新加载页面时,脚本的执行停止了(可能只是得到一个便宜的vpsYes,我正在考虑它。但是我不明白为什么在使用header()函数重新加载页面后执行停止。(好的,这里有一个提示。使用javascript重定向而不是标题。但是,是的,只要得到一个vpsI就认为JS重定向不起作用,因为当页面输出到浏览器时,脚本执行已经停止。