我似乎对PHP输出缓冲感到困惑。我有这样的代码:
function return_json($obj) {
ob_get_clean();
ob_start();
header("Content-Type: application/json");
echo json_encode($obj);
exit;
}
但它似乎不喜欢ob_get_clean()。我之所以这样做,是因为某些HTML可能会在达到这一点之前意外生成,但我认为这就是你的意图。
我错过了什么?
答案 0 :(得分:9)
要使用ob_get_clean(),你必须确定,在某些时候你先前有ob_start()'ed。否则,没有要清理的缓冲区,所有内容都已刷新到用户代理。
答案 1 :(得分:7)
使用ob_get_level()
function查看输出缓冲区是否处于活动状态并退出:
while (ob_get_level()) {
ob_end_clean();
}
答案 2 :(得分:3)
你需要在所有代码之前执行ob_start以在调用该函数之前捕获任何输出
答案 3 :(得分:1)
如果您只想在使用
开始输出缓冲后清理缓冲区ob_start()
使用
ob_clean()
另外请注意,没有任何内容已经被echo,print_r等函数刷新。所以脚本中的第一件事应该是ob_start()。确保您的包含内容尚未向浏览器发送内容。
答案 4 :(得分:0)
需要在生成任何内容之前调用ob_start。正常使用类似于:
ob_start();
# generated content here
$content = ob_get_contents(); # $content now contains anything that has been output already
ob_end_clean();
# generate any headers you need
echo $content;
答案 5 :(得分:0)
如果您遇到的问题是没有输出,您似乎错过了flush方法?此外,ob_end_clean()只能在输出缓冲启动后调用,否则返回'false'。您无法使用ob_方法清除已发布的任何现有标头,您需要自己确认。
function return_json($obj) {
ob_start();
header("Content-Type: application/json");
echo json_encode($obj);
ob_end_flush();
exit;
}