使用输出缓冲区为何仍打印内容而非无输出?
PHP输出缓冲异常输出问题解决
问题详情
- 测试代码:
ob_start(); echo 'ok'; ob_get_contents(); exit;
- 预期:无任何输出
- 实际:页面打印出
ok
问题根源
ob_get_contents()仅读取输出缓冲中的内容,不会清空缓冲。当脚本执行到exit终止时,PHP会自动将未处理的输出缓冲内容推送到浏览器,导致ok被打印。
修复方案
方案1:读取缓冲后清空内容
如果需要保留缓冲(后续还要用),读取后调用ob_clean()清空缓冲:
ob_start(); echo 'ok'; $content = ob_get_contents(); ob_clean(); // 清空缓冲,不关闭 exit;
方案2:读取缓冲后关闭并清空缓冲
如果不需要再使用缓冲,直接用ob_end_clean()一次性完成清空和关闭:
ob_start(); echo 'ok'; $content = ob_get_contents(); ob_end_clean(); // 清空+关闭缓冲 exit;
方案3:直接丢弃缓冲(无需读取内容时)
如果不需要获取缓冲里的内容,直接调用ob_end_clean()丢弃:
ob_start(); echo 'ok'; ob_end_clean(); exit;
内容的提问来源于stack exchange,提问作者Andrii Kovalenko
相关产品推荐
相关产品推荐

