PHP 和 AJAX - 向用户发送响应后继续处理
PHP with AJAX - Continue Processing After Sending Response to the User
我必须在服务器端做很多处理,但不想让用户知道。我想立即向用户发送响应,然后 运行 服务器端的进程。
我做了一些研究,到目前为止我已经这样做了:
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
}
据我所知,这应该 return 用户立即响应,然后 运行 post 处理。但它不起作用:它仍在等待所有过程完成。
顺便说一下,如果有帮助,我会发送一个 AJAX 请求。起初我以为这可能是会话锁定的问题,但现在我什至没有使用任何会话(session_status()
returns 1
)。
PHP 版本为 7.1
注意:我已经阅读了其他相关问题,其中上述方法工作正常,但由于某种原因它不适用于我的情况。
看起来(正如@ADyson 在评论中所说)刷新输出似乎不适用于 AJAX。所以,解决这个问题的唯一方法就是使用 Cron Job。为此,我使用了 PHP Cron Scheduler。但是可以直接使用crontab来添加一个Cron Job到列表中。
我将 post 进程添加到另一个 PHP 文件并进行适当的更改,以便它可以从脚本执行相同的任务并将该文件添加到调度程序。
这个解决方案可能看起来很痛苦,但除了使用 Cron Job 之外没有解决这个问题的方法。
我必须在服务器端做很多处理,但不想让用户知道。我想立即向用户发送响应,然后 运行 服务器端的进程。
我做了一些研究,到目前为止我已经这样做了:
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
}
据我所知,这应该 return 用户立即响应,然后 运行 post 处理。但它不起作用:它仍在等待所有过程完成。
顺便说一下,如果有帮助,我会发送一个 AJAX 请求。起初我以为这可能是会话锁定的问题,但现在我什至没有使用任何会话(session_status()
returns 1
)。
PHP 版本为 7.1
注意:我已经阅读了其他相关问题,其中上述方法工作正常,但由于某种原因它不适用于我的情况。
看起来(正如@ADyson 在评论中所说)刷新输出似乎不适用于 AJAX。所以,解决这个问题的唯一方法就是使用 Cron Job。为此,我使用了 PHP Cron Scheduler。但是可以直接使用crontab来添加一个Cron Job到列表中。
我将 post 进程添加到另一个 PHP 文件并进行适当的更改,以便它可以从脚本执行相同的任务并将该文件添加到调度程序。
这个解决方案可能看起来很痛苦,但除了使用 Cron Job 之外没有解决这个问题的方法。