我不确切知道输出缓冲是如何工作的,但据我所知它将内容存储到某个内部变量中。
对此,不使用输出缓冲和在我自己的局部变量中存储内容而不是在脚本末尾回显它有什么区别?
输出缓冲的示例:
<?php
ob_start();
echo "html page goes here";
ob_end_flush();
?>
不使用输出缓冲的示例:
<?php
$html = "html page goes here";
echo $html;
?>
有什么区别?
答案 0 :(得分:6)
输出缓冲为您提供了更大的灵活性,可以将 输出的关注点分开,当输出时如何输出,而不需要任何更改现有代码。
你可能有现有的代码回应他们的输出而不是返回它;输出缓冲允许该代码运行而不对其进行任何更改。
除了显而易见的ob_end_flush()
之外,您还可以使用$output = ob_get_contents()
后跟ob_end_clean()
来再次将输出捕获到变量中。这允许您将其写入文件而不是在屏幕上显示。
最后,您可以将过滤器挂接到输出缓冲系统上,以便即时启用压缩。
另请参阅:ob_gz_handler
答案 1 :(得分:5)
主要区别:
1。)您可以使用“普通”输出语法,例如echo
语句。您不必重写您的问题。
2.)您可以更好地控制缓冲,因为缓冲区可以堆叠。您不必了解命名约定等,这使得实现更容易,其中写入和使用方彼此分开实现。
3.)没有额外的逻辑需要输出缓冲内容,只需flush
。如果输出流是特殊的,那就特别有趣。为什么要在处理这个问题时加重控制范围呢?
4.。)无论是否已创建输出缓冲区,您都可以使用相同的输出实现。这是一个透明度的问题。
5。)你可以“意外地”抓住像警告之类的冒泡的东西,然后简单地吞下它。
[...]