Php 什么是输出缓冲?

Php 什么是输出缓冲?,php,output-buffering,Php,Output Buffering,什么是输出缓冲?为什么在PHP中使用它 如果没有输出缓冲(默认设置),HTML将在PHP通过脚本处理时以片段的形式发送到浏览器。通过输出缓冲,HTML存储在一个变量中,并作为脚本末尾的一部分发送到浏览器 Web开发人员使用输出缓冲的优势 单独打开输出缓冲可以减少下载和呈现HTML所需的时间,因为在PHP处理HTML时,HTML不会被分块发送到浏览器 我们可以用PHP字符串做的所有有趣的事情,现在我们可以把整个HTML页面作为一个变量来做 如果您在设置cookie时遇到消息“警告:无法修改标题信

什么是输出缓冲?为什么在PHP中使用它

如果没有输出缓冲(默认设置),HTML将在PHP通过脚本处理时以片段的形式发送到浏览器。通过输出缓冲,HTML存储在一个变量中,并作为脚本末尾的一部分发送到浏览器

Web开发人员使用输出缓冲的优势

  • 单独打开输出缓冲可以减少下载和呈现HTML所需的时间,因为在PHP处理HTML时,HTML不会被分块发送到浏览器
  • 我们可以用PHP字符串做的所有有趣的事情,现在我们可以把整个HTML页面作为一个变量来做
  • 如果您在设置cookie时遇到消息“警告:无法修改标题信息-标题已由(输出)发送”,您会很高兴知道输出缓冲是您的答案
:

如果没有输出缓冲(默认设置),HTML将在PHP通过脚本处理时以片段的形式发送到浏览器。通过输出缓冲,HTML存储在一个变量中,并作为脚本末尾的一部分发送到浏览器

Web开发人员使用输出缓冲的优势

  • 单独打开输出缓冲可以减少下载和呈现HTML所需的时间,因为在PHP处理HTML时,HTML不会被分块发送到浏览器
  • 我们可以用PHP字符串做的所有有趣的事情,现在我们可以把整个HTML页面作为一个变量来做
  • 如果您在设置cookie时遇到消息“警告:无法修改标题信息-标题已由(输出)发送”,您会很高兴知道输出缓冲是您的答案
输出控制功能允许您 控制何时从发送输出的步骤 剧本。这在某些情况下很有用 几种不同的情况,, 尤其是当你需要发送标题的时候 在脚本完成后,将其添加到浏览器 开始输出数据。输出 控制功能不影响 使用header()或 setcookie(),仅函数,如 echo()和PHP块之间的数据 代码

更多资源:

输出控制功能允许您 控制何时从发送输出的步骤 剧本。这在某些情况下很有用 几种不同的情况,, 尤其是当你需要发送标题的时候 在脚本完成后,将其添加到浏览器 开始输出数据。输出 控制功能不影响 使用header()或 setcookie(),仅函数,如 echo()和PHP块之间的数据 代码

更多资源:

被PHP用来提高性能和执行一些技巧

  • 您可以让PHP将所有输出存储到缓冲区中,然后一次输出所有输出,从而提高网络性能

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

考虑这个例子:

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

上面的示例将输出捕获到变量中,而不是将其发送到浏览器。默认情况下关闭输出缓冲

  • 在发送内容后要修改标题的情况下,可以使用输出缓冲
考虑这个例子:

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

被PHP用来提高性能和执行一些技巧

  • 您可以让PHP将所有输出存储到缓冲区中,然后一次输出所有输出,从而提高网络性能

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

考虑这个例子:

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

上面的示例将输出捕获到变量中,而不是将其发送到浏览器。默认情况下关闭输出缓冲

  • 在发送内容后要修改标题的情况下,可以使用输出缓冲
考虑这个例子:

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

正如名称所示,这里的内存缓冲区用于管理脚本输出的显示方式


这里有一个主题

,正如名称所示,这里的内存缓冲区用于管理脚本输出的显示方式

ob_start();  // turns on output buffering
$foo->bar();  // all output goes only to buffer
ob_clean();  // delete the contents of the buffer, but remains buffering active
$foo->render(); // output goes to buffer
ob_flush(); // send buffer output
$none = ob_get_contents();  // buffer content is now an empty string
ob_end_clean();  // turn off output buffering
这里有一个主题

ob_start();  // turns on output buffering
$foo->bar();  // all output goes only to buffer
ob_clean();  // delete the contents of the buffer, but remains buffering active
$foo->render(); // output goes to buffer
ob_flush(); // send buffer output
$none = ob_get_contents();  // buffer content is now an empty string
ob_end_clean();  // turn off output buffering
缓冲区可以嵌套,因此当一个缓冲区处于活动状态时,另一个
ob\u start()
会激活一个新的缓冲区。因此
ob\u end\u flush()
ob\u flush()
实际上并没有将缓冲区发送到输出,而是发送到父缓冲区。只有在并没有父缓冲区时,内容才会发送到浏览器或终端

这里有很好的解释:

缓冲区可以嵌套,因此当一个缓冲区处于活动状态时,另一个
ob\u start()
会激活一个新的缓冲区。因此
ob\u end\u flush()
ob\u flush()
实际上并没有将缓冲区发送到输出,而是发送到父缓冲区。只有在并没有父缓冲区时,内容才会发送到浏览器或终端


这里解释得很好:

我知道这是一个老问题,但我想为视觉学习者写我的答案。我在万维网上找不到任何解释输出缓冲的图表,所以我自己在Windows
mspaint.exe
中制作了一个图表

如果关闭了输出缓冲,则
echo
将立即向浏览器发送数据

如果打开了输出缓冲,则在将数据发送到浏览器之前,
echo
会将数据发送到输出缓冲区

phpinfo

要查看输出缓冲是否打开/关闭,请参阅核心部分的phpinfo。
output\u buffering
指令将告诉您输出缓冲是否打开/关闭

在这种情况下,
output\u buffering
值为4096,这意味着缓冲区大小为4KB。这还意味着在Web服务器上打开了输出缓冲