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时遇到消息“警告:无法修改标题信息-标题已由(输出)发送”,您会很高兴知道输出缓冲是您的答案
- 您可以让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\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服务器上打开了输出缓冲
php.ini
通过更改output\u buffering
指令的值,可以打开/关闭和更改缓冲区大小。只需在php.ini
中找到它,将其更改为您选择的设置,然后重新启动Web服务器。您可以在下面找到我的php.ini
示例
; Output buffering is a mechanism for controlling how much output data
; (excluding headers and cookies) PHP should keep internally before pushing that
; data to the client. If your application's output exceeds this setting, PHP
; will send that data in chunks of roughly the size you specify.
; Turning on this setting and managing its maximum buffer size can yield some
; interesting side-effects depending on your application and web server.
; You may be able to send headers and cookies after you've already sent output
; through print or echo. You also may see performance benefits if your server is
; emitting less packets due to buffered output versus PHP streaming the output
; as it gets it. On production servers, 4096 bytes is a good setting for performance
; reasons.
; Note: Output buffering can also be controlled via Output Buffering Control
; functions.
; Possible Values:
; On = Enabled and buffer is unlimited. (Use with caution)
; Off = Disabled
; Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = 4096
指令output\u buffering
不是关于输出缓冲的唯一可配置指令。您可以在此处找到其他可配置的输出缓冲指令:
示例:ob\u get\u clean()
在下面,您可以看到如何捕获回音
,并在将其发送到浏览器之前对其进行操作
// Turn on output buffering
ob_start();
echo 'Hello World'; // save to output buffer
$output = ob_get_clean(); // Get content from the output buffer, and discard the output buffer ...
$output = strtoupper($output); // manipulate the output
echo $output; // send to output stream / Browser
// OUTPUT:
HELLO WORLD
示例:Hackingwithphp.com
有关输出缓冲区和示例的更多信息,请参见:
2019年更新。如果您有专用服务器和SSD或更好的NVM,3.5GHZ。您不应该使用缓冲来在100ms-150ms内创建加载速度更快的网站 因为在2019年,使用高性能服务器(服务器、内存、磁盘)并启用APC PHP:)生成脚本时,网络的速度比处理脚本慢,有时只需要70毫秒。另一个时间是,仅网络需要时间,从距离定位用户服务器10毫秒到150毫秒不等 所以,如果你想快150毫秒,缓冲使慢,因为需要额外的收集缓冲区数据,它使额外的成本。10年前,当服务器制作1s脚本时,它是有用的 请注意输出缓冲有限制,如果你想使用jpg加载它可以自动刷新和崩溃发送 干杯 你可以在河上走得很快 或
您可以安全地使用tama:)这是php中输出缓冲的总结。(XAMPP php.ini) 输出缓冲是一种控制输出数据量的机制 (不包括标题和cookie)在推送之前,PHP应该在内部保留 将数据发送到客户端。如果您的应用程序的输出超过此设置,PHP将以大约您指定的大小的块发送该数据。启用此设置并管理其最大缓冲区大小可能会产生一些有趣的副作用,具体取决于您的应用程序和web服务器。在通过打印或回显发送输出后,您可以发送标题和cookie。如果由于缓冲输出而使服务器发送的数据包比PHP流化输出的数据包少,那么您也会看到性能方面的好处 就这样吧。在生产服务器上,4096字节是一个很好的性能设置 原因 注:输出缓冲也可以通过控制来实现