echo json数据然后睡觉

时间:2012-11-29 17:41:54

标签: php json

在我的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
}

2 个答案:

答案 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);