刷新系统缓冲区

PHP 提供了两种相关的刷新(发送并丢弃系统缓冲区内容)方法:通过调用 flush() 和通过使用 ob_implicit_flush()implicit_flush php.ini 设置启用隐式刷新。

输出刷新行为

禁用隐式刷新时,PHP 仅在调用 flush() 或脚本结束时刷新输出。

启用隐式刷新时,PHP 将尝试在导致输出的每个代码块之后刷新。此处的输出是指长度非零的数据,它

注意 打印空字符串或发送标头不被视为输出,不会导致刷新操作。

警告

如果启用了隐式刷新,控制字符(例如 "\n""\r""\0")也会触发刷新。

限制

此功能无法刷新用户级输出缓冲区。要将它们一起使用,用户级输出缓冲区必须在刷新系统缓冲区之前刷新,以便 PHP 产生任何输出。

警告

调用 flush() 或启用隐式刷新可能会干扰用户级输出缓冲区的输出处理程序,这些处理程序在 Web 上下文中设置和发送标头(例如 ob_gzhandler()),方法是在这些处理程序可以执行此操作之前发送标头。

底层软件/硬件实现的缓冲不能被 PHP 覆盖,在使用 PHP 的缓冲控制函数时应将其考虑在内。检查 Web 服务器/浏览器/控制台的缓冲设置并使用它们可以缓解可能出现的问题。在 Web 上下文中,可以调整 Web 服务器的缓冲设置或脚本的缓冲设置以协同工作,而通过调整 PHP 脚本中的缓冲可以绕过各种浏览器的缓冲策略。在实现行缓冲的控制台上,可以在刷新输出之前在适当的位置插入换行符。

SAPI 刷新方面的差异

尽管每个 SAPI 都以稍微不同的方式实现刷新,但这些实现属于以下两种类别之一

  • 在 Web 上下文中使用的 SAPI 将首先刷新标头,然后刷新输出。 Apache2HandlerCGIFastCGIFPM 就是此类 SAPI
  • 其他 SAPI(例如 CLIembed)只会刷新输出

添加注释

用户贡献的注释

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