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