Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何规避PHP中的最大执行时间?_Php_Cron_Crontab_Mailing - Fatal编程技术网

如何规避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重定向不起作用,因为当页面输出到浏览器时,脚本执行已经停止。