在我的php脚本中,我想在运行函数之前将数据输出到浏览器然后sleep()2秒钟。下面似乎没有在睡觉前输出json,有人有任何想法吗?
if ($_POST['process'] == '1') {
// adding stuff to $data here
}
echo json_encode($data);
ob_flush();
flush();
sleep(2);
// Do something else
}
答案 0 :(得分:3)
是的,你就是这样做的。基本上,当apache继续处理文件时,您关闭连接并将响应返回给用户...
ignore_user_abort(true);
header('Content-Type: application/json');
header('Connection: close');
header('Content-Length: ' . strlen($YOUR_JSON_RESPONSE));
echo $YOUR_JSON_RESPONSE;
flush();
sleep(2);
your_cool_function_to_run();
die();
适用于需要立即响应和/或需要很长时间才能真正完成工作的快速ajax调用。
我必须警告你谨慎使用这种类型的东西......每次发生这种情况时,都会打开一个新的进程/线程来处理你的请求的其余部分。做太多太快,你就会耗尽流程。 (取决于您的设置)
答案 1 :(得分:0)
您可以尝试关闭STDOUT
,向Web服务器发出信号,告知您的脚本已完成向HTTP客户端发送数据。
fclose( STDOUT);