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