我可以在没有ob_start()的情况下使用ob_clean()吗?

时间:2018-08-24 14:06:53

标签: php output-buffering ob-start

我不习惯ob_*的功能,因此我首先阅读了文档。
我想在{strong>方法中使用ob_clean(),但文档中指出:

  

输出缓冲区必须由带有ob_start()标志的PHP_OUTPUT_HANDLER_CLEANABLE开始。否则 ob_clean()将不起作用。

但是我尝试了(只是为了看看它“行不通”)

echo 'a';
ob_clean();
echo 'b';

哪个输出b。一切似乎都在这里正常工作,但是按照文档的说明应该这样做吗?

  • ob_start()ob_*函数的必需项吗?
  • 是否存在一个变量(例如,在 php.ini 中),其默认值允许省略ob_start() ??
  • 我应该如何理解 ob_clean()不起作用” ?我应该期待什么?

如果要这样做,我正在使用PHP 7.2.1。

1 个答案:

答案 0 :(得分:2)

简短的答案是,是的,您必须先打开输出缓冲才能使用ob_clean。但是,有可能通过output_buffering ini参数为所有文件启用了输出缓冲(请参见manual)。检查这一点的方法是通过ob_get_level()

echo ob_get_level();

如果结果不为零,则启用输出缓冲。

如果您确实在未启用缓冲的情况下使用ob_clean(),则应该看到类似以下错误:

  

注意:ob_clean()[ref.outcontrol]:无法删除缓冲区。没有   缓冲区删除。在[文件路径]