2

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

2 回答 2

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 调用。

我必须警告您谨慎使用这种类型的东西......每次发生这种情况时,都会打开一个新的进程/线程来处理您的其余请求。做太多太快,你会用完进程。(取决于您的设置)

于 2012-11-29T17:48:02.287 回答
0

您可以尝试关闭STDOUT,向 Web 服务器发出信号,表明您的脚本已完成向 HTTP 客户端发送数据。

fclose( STDOUT);
于 2012-11-29T17:49:13.837 回答