我有一个使用$ .ajax()Javascript命令调用的PHP脚本:
$.ajax({
type: "POST",
url: "/myscript.php",
data: $("#my-form").serialize()
});
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或其他设置导致我的脚本重新启动?
答案 0 :(得分:3)
假设您所有的超时和执行时间都足够高并且ignore_user_abort
为true
,那么您的问题是$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请求绝对是荒谬的。