2010-05-14 145 views

回答

218

Output Buffering for Web Developers, a Beginner’s Guide

没有输出缓冲(默认值),作为PHP处理通过脚本的HTML被发送到片浏览器。通过输出缓冲,您的HTML存储在一个变量中,并作为脚本末尾的一部分发送到浏览器。

对于Web开发人员

  • 单独打开输出缓冲优势输出缓冲的减少所花费的时间来下载和渲染我们的HTML,因为它没有被发送到浏览器中的片段作为PHP处理HTML量。
  • 我们可以用PHP字符串做的所有花哨的东西,我们现在可以将整个HTML页面作为一个变量来完成。
  • 如果您在设置Cookie时遇到了“警告:无法修改标题信息 - 已由(输出)发送的标题”消息,您将很高兴知道输出缓冲是您的答案。
+3

+1。这里有另一个有用的链接:http://php.net/manual/en/function.ob-start.php - 当处理一个函数时,它也很有帮助,这个函数可以回显你希望存储在变量中的值。 – Cam 2010-05-14 06:21:59

+0

真的是一切都缓冲到最后,或者如果我有一个很长的页面,页面是否会以大块的形式出现? – zedoo 2010-05-14 07:02:38

+4

@zedoo如果你用'ob_start()'开始输出缓冲,*真的是所有的东西都被缓冲了。 'ob_start()','int $ chunk_size'有一个可选的第二个参数,如果设置了这个参数,将导致在任何输出调用导致缓冲区的长度等于或超过这个大小后刷新缓冲区。 – 2010-05-14 07:24:26

7

输出控制函数允许当输出从 脚本发送你 控制。这可以在 几种不同的情况下有用, 特别是如果你需要在 开始输出数据后发送标题 到浏览器。输出 控制功能不会影响 使用header()或 setcookie()发送的报头,只能使用 echo()和PHP 数据块之间的数据代码。

http://php.net/manual/en/book.outcontrol.php

更多资源:

Output Buffering With PHP

48

Output buffering是使用PHP来提高性能,并执行一些技巧。

  • 您可以让PHP将所有输出存储到缓冲区中,并立即输出所有输出以提高网络性能。

  • 在某些情况下,您可以访问缓冲区内容而无需将其发送回浏览器。

考虑这个例子:

<?php 
    ob_start(); 
    phpinfo(); 
    $output = ob_get_clean(); 
?> 

上面示例的输出捕获到一个变量,而不是将其发送给浏览器的。 output_buffering默认关闭。

  • 在发送内容后想要修改标头的情况下,可以使用输出缓冲。

考虑这个例子:

<?php 
    ob_start(); 
    echo "Hello World"; 
    if ($some_error) 
    { 
     header("Location: error.php"); 
     exit(0); 
    } 
?> 
+0

这里和Ax相同的问题:没有启动输出缓冲而没有稍后关闭它,会让你的脚本遇到各种问题? – 2012-09-24 21:28:52

+1

当您调用其中一种刷新方法(例如'ob_flush()'或'ob_end_flush()')时,刷新缓冲区。当脚本结束时,缓冲区的内容也会被刷新,突然或以其他方式,所以不应该有问题。 – 2012-09-25 06:09:51

4

正如名字在这里建议使用的内存缓冲区管理脚本输出的显示方式。

这里是一个very good tutorial为主题