在我的 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
}
是的,这就是你的做法。基本上,您关闭连接并将响应返回给用户,而 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 调用。
我必须警告您谨慎使用这种类型的东西......每次发生这种情况时,都会打开一个新的进程/线程来处理您的其余请求。做太多太快,你会用完进程。(取决于您的设置)
您可以尝试关闭STDOUT
,向 Web 服务器发出信号,表明您的脚本已完成向 HTTP 客户端发送数据。
fclose( STDOUT);