使用AJAX的PHP - 在向用户发送响应后继续处理

时间:2017-09-13 15:05:28

标签: php ajax http process response

我必须在服务器端进行大量处理,但不希望用户知道它。我想立即向用户发送响应,然后在服务器端运行该过程。

我做了一些研究,到目前为止我已经完成了这个:

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

注意:我已经阅读了上述方法正常工作的其他相关问题,但出于某种原因,它不适用于我的情况。

1 个答案:

答案 0 :(得分:0)

看起来(正如@ADyson在评论中所说),刷新输出似乎不适用于AJAX。因此,问题的唯一解决方案是使用Cron Job。为此,我使用了PHP Cron Scheduler。但 crontab 可以直接用于将Cron作业添加到列表中。

我将post进程添加到另一个具有适当更改的PHP文件中,以便它可以从脚本执行相同的任务并将文件添加到Scheduler。

这个解决方案似乎真的很痛苦,但除了使用Cron Job之外,没有解决这个问题的方法。