我必须在服务器端进行大量处理,但不希望用户知道它。我想立即向用户发送响应,然后在服务器端运行该过程。
我做了一些研究,到目前为止我已经完成了这个:
function process(){
ignore_user_abort(true);
set_time_limit(0);
ob_start();
// Send response to the user
header('Connection: close');
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
// Post process
}
据我所知,这应立即返回用户响应,然后运行后期处理。但它不起作用:它仍然等待所有过程完成。
顺便说一句,如果它有帮助,我会发送一个AJAX请求。起初我认为这可能是会话锁定的问题,但现在我甚至没有使用任何会话(session_status()
返回1
)。
PHP版本为7.1
注意:我已经阅读了上述方法正常工作的其他相关问题,但出于某种原因,它不适用于我的情况。
答案 0 :(得分:0)
看起来(正如@ADyson在评论中所说),刷新输出似乎不适用于AJAX。因此,问题的唯一解决方案是使用Cron Job。为此,我使用了PHP Cron Scheduler。但 crontab 可以直接用于将Cron作业添加到列表中。
我将post进程添加到另一个具有适当更改的PHP文件中,以便它可以从脚本执行相同的任务并将文件添加到Scheduler。
这个解决方案似乎真的很痛苦,但除了使用Cron Job之外,没有解决这个问题的方法。