我不知道输出缓冲是如何工作的,但据我所知它将内容存储到一些内部变量中。
关于这一点,不使用输出缓冲并将内容存储在我自己的局部变量中,而不是在脚本末尾回显它有什么区别?
输出缓冲示例:
<?php
ob_start();
echo "html page goes here";
ob_end_flush();
?>
不使用输出缓冲的例子:
<?php
$html = "html page goes here";
echo $html;
?>
有什么不同?
我不知道输出缓冲是如何工作的,但据我所知它将内容存储到一些内部变量中。
关于这一点,不使用输出缓冲并将内容存储在我自己的局部变量中,而不是在脚本末尾回显它有什么区别?
输出缓冲示例:
<?php
ob_start();
echo "html page goes here";
ob_end_flush();
?>
不使用输出缓冲的例子:
<?php
$html = "html page goes here";
echo $html;
?>
有什么不同?
主要区别:
1.)您可以使用“正常”输出语法,例如echo
语句。你不必重写你的问题。
2.)您可以更好地控制缓冲,因为可以堆叠缓冲区。您不必了解命名约定等,这使得在编写和使用端彼此分开实现的情况下实现更容易。
3.) 不需要额外的逻辑来输出缓冲的内容,你只需flush
. 如果输出流是特殊的,则特别有趣。为什么要负担控制范围来处理这个问题?
4.) 无论是否创建了输出缓冲区,您都可以使用相同的输出实现。这是一个透明度问题。
5.)你可以“抓住”不小心冒泡的东西,比如警告之类的东西,然后简单地吞下它。
[...]
输出缓冲使您可以更灵活地分离输出什么、何时输出和如何输出的关注点,而无需对现有代码进行任何更改。
您可能有现有的代码来回显它们的输出而不是返回它;输出缓冲允许该代码在不对其进行任何更改的情况下运行。
除了显而易见的ob_end_flush()
,您还可以使用$output = ob_get_contents()
followob_end_clean()
再次将输出捕获到变量中。这允许您将其写入文件而不是在屏幕上显示。
最后,您可以将过滤器挂接到输出缓冲系统上,以实现即时压缩。
也可以看看:ob_gz_handler