输出缓冲是指在输出刷新(发送并丢弃)到浏览器(在 Web 上下文中)或 shell(在命令行中)之前对其进行缓冲(临时存储)。在输出缓冲处于活动状态时,脚本不会发送任何输出,而是将输出存储在内部缓冲区中。
PHP 在刷新输出时依赖于底层软件/硬件基础设施。命令行上控制台(例如行缓冲)或 Web 服务器和浏览器在 Web 上下文中(例如完全缓冲)实现的缓冲会影响何时将输出显示给最终用户。可以通过微调服务器设置和/或调整各个层级的缓冲区大小来消除其中的一些影响。
PHP 提供了一个完全缓冲的用户级输出缓冲区,以及用于启动、操作和关闭缓冲区的函数(大多数 ob_* 函数),以及两个用于刷新底层系统缓冲区的函数(flush() 和 ob_implicit_flush())。某些功能也可以使用相应的 php.ini 设置进行设置和/或配置。
输出缓冲通常在修改或检查缓冲输出的情况下有用,或者在请求中多次使用缓冲输出的情况下;或者在需要控制输出刷新时。具体用例包括
HTML
页面来缓存计算/时间密集型脚本的结果
HTML
页面的 head
部分与 body
部分分开刷新,使浏览器能够在脚本执行可能更耗时的过程(例如数据库/文件访问、外部网络连接)时加载外部资源。这仅在标头发送后 HTTP
状态代码无法更改时才有效
HTML
标记)或在某些条件下(例如错误)完全丢弃来控制第三方代码的输出