PHP Conference Japan 2024

输出缓冲

输出缓冲是指在输出刷新(发送并丢弃)到浏览器(在 Web 上下文中)或 shell(在命令行中)之前对其进行缓冲(临时存储)。在输出缓冲处于活动状态时,脚本不会发送任何输出,而是将输出存储在内部缓冲区中。

影响 PHP 的缓冲

PHP 在刷新输出时依赖于底层软件/硬件基础设施。命令行上控制台(例如行缓冲)或 Web 服务器和浏览器在 Web 上下文中(例如完全缓冲)实现的缓冲会影响何时将输出显示给最终用户。可以通过微调服务器设置和/或调整各个层级的缓冲区大小来消除其中的一些影响。

PHP 中的输出缓冲控制

PHP 提供了一个完全缓冲的用户级输出缓冲区,以及用于启动、操作和关闭缓冲区的函数(大多数 ob_* 函数),以及两个用于刷新底层系统缓冲区的函数(flush()ob_implicit_flush())。某些功能也可以使用相应的 php.ini 设置进行设置和/或配置。

用例

输出缓冲通常在修改或检查缓冲输出的情况下有用,或者在请求中多次使用缓冲输出的情况下;或者在需要控制输出刷新时。具体用例包括

  • 例如,通过生成静态 HTML 页面来缓存计算/时间密集型脚本的结果
  • 通过显示、保存到文件和/或通过电子邮件发送来重复使用生成的输出
  • HTML 页面的 head 部分与 body 部分分开刷新,使浏览器能够在脚本执行可能更耗时的过程(例如数据库/文件访问、外部网络连接)时加载外部资源。这仅在标头发送后 HTTP 状态代码无法更改时才有效
  • 从否则会产生输出的函数(例如 phpinfo())中提取信息
  • 通过修改/使用部分(例如提取数据、替换单词/短语、添加缺少的 HTML 标记)或在某些条件下(例如错误)完全丢弃来控制第三方代码的输出
  • 为某些不可用的 Web 服务器功能(例如压缩或编码输出)提供垫片

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top