如何在PHP中响应ajax请求后继续进程?

Mas*_*ask 11 php ajax timeout

有些操作需要花费太多时间,导致ajax请求超时.

如何首先完成对请求的响应,然后继续该操作?

Pas*_*TIN 16

ignore_user_abort指令和ignore_user_abort功能都可能是你在找什么:它应该让你发送给浏览器的响应,并在此之后,仍然在服务器上运行一些计算.

关于它的这篇文章可能会让你感兴趣:如何使用ignore_user_abort()来进行带外处理 ; 引用:
编辑2010-03-22:在看到@Joel的评论后删除了链接(指向http:// ! waynepan.com/2007/10/11/ ! how-to-use-ignore_user_abort-to-do-process-out-of-band/- 删除空格,!如果你想尝试).

基本上,当您ignore_user_abort(true)在php脚本中使用时 ,即使用户按下esc或停在浏览器上,脚本也会继续运行.你怎么用这个?
一种用途是将内容返回给用户并允许在处理不需要用户交互的事物时关闭连接.

以下示例向$response用户发送 ,关闭连接(使浏览器的微调器/加载栏停止),然后执行 do_function_that_takes_five_mins();

给出的例子:

ignore_user_abort(true);
header("Connection: close");
header("Content-Length: " . mb_strlen($response));
echo $response;
flush();
do_function_that_takes_five_mins();
Run Code Online (Sandbox Code Playgroud)

(还有更多我没有复制粘贴)


请注意,您的PHP脚本仍然必须符合max_execution_timememory_limit约束 - 这意味着您不应该将此用于需要花费太多时间的操作.

这也将使用一个Apache进程 - 这意味着您不应该有几十个页面同时执行此操作.

不过,我想,提高使用体验的好方法;-)


Eim*_*tas 2

生成一个后台进程并返回后台进程 ID,以便用户稍后可以通过一些秘密 URL 进行检查。