长PHP脚本意外重新启动

时间:2018-12-03 17:22:55

标签: php ajax

我有一个使用$ .ajax()Javascript命令调用的PHP脚本:

$.ajax({
    type: "POST",
    url: "/myscript.php",
    data: $("#my-form").serialize()
});

myscript.php(摘要)

class myclass{
    public function __construct(){
        $i = 0;
        while($i < $_POST['some_user_defined_var']){
            //$_POST['some_user_defined_var'] = 100
            $this->do_something();
        }
    }
    private function do_something(){
        //this function takes about 1 hour to run
    }
}
new myclass;

myscript.php大约需要运行4天。我注意到大约20-28小时后,脚本会从头开始意外重启。 $ i变量将重置为0,脚本将重新启动。是否有php.ini或其他设置导致我的脚本重新启动?

1 个答案:

答案 0 :(得分:3)

假设您所有的超时和执行时间都足够高并且ignore_user_aborttrue,那么您的问题是$i没有增加。见下文:

class myclass{
    public function __construct(){
        $i = 0;
        while($i < $_POST['some_user_defined_var']){
            //$_POST['some_user_defined_var'] = 100
            $this->do_something();

            ++$i; // <-- increment your counter.
        }
    }
    private function do_something(){
        //this function takes about 1 hour to run
    }
}
new myclass;

总体而言,像这样的事情绝对更适合作为CRON作业/计划任务。如果您需要将其激活,那么我建议结合使用CRON和数据库存储,以便用户操作可以创建数据库条目,而CRON作业可以仅查找条目并对其进行操作。

一个96小时的HTTP请求绝对是荒谬的。