6

我不知道输出缓冲是如何工作的,但据我所知它将内容存储到一些内部变量中。

关于这一点,不使用输出缓冲并将内容存储在我自己的局部变量中,而不是在脚本末尾回显它有什么区别?

输出缓冲示例:

<?php
  ob_start();
  echo "html page goes here";
  ob_end_flush();
?>

不使用输出缓冲的例子:

<?php
  $html = "html page goes here";
  echo $html;
?>

有什么不同?

4

2 回答 2

6

主要区别:

1.)您可以使用“正常”输出语法,例如echo语句。你不必重写你的问题。

2.)您可以更好地控制缓冲,因为可以堆叠缓冲区。您不必了解命名约定等,这使得在编写和使用端彼此分开实现的情况下实现更容易。

3.) 不需要额外的逻辑来输出缓冲的内容,你只需flush. 如果输出流是特殊的,则特别有趣。为什么要负担控制范围来处理这个问题?

4.) 无论是否创建了输出缓冲区,您都可以使用相同的输出实现。这是一个透明度问题。

5.)你可以“抓住”不小心冒泡的东西,比如警告之类的东西,然后简单地吞下它。

[...]

于 2013-01-26T15:53:58.477 回答
6

输出缓冲使您可以更灵活地分离输出什么何时输出和如何输出的关注点,而无需对现有代码进行任何更改。

您可能有现有的代码来回显它们的输出而不是返回它;输出缓冲允许该代码在不对其进行任何更改的情况下运行。

除了显而易见的ob_end_flush(),您还可以使用$output = ob_get_contents()followob_end_clean()再次将输出捕获到变量中。这允许您将其写入文件而不是在屏幕上显示。

最后,您可以将过滤器挂接到输出缓冲系统上,以实现即时压缩。

也可以看看:ob_gz_handler

于 2013-01-26T15:55:59.393 回答