【问题标题】:Is there a way to disable automatic flush of output buffer有没有办法禁用输出缓冲区的自动刷新
【发布时间】:2014-06-09 15:43:00
【问题描述】:

有没有办法在 PHP 中禁用自动输出缓冲区刷新?我总是可以使用 ob_clean (或派生函数之一),但这仍然会给我们留下代码执行中断的情况。包含缓冲区清理的正确错误处理程序将再次处理其中的大部分。但是如果例如脚本在执行过程中遇到 die / exit 命令怎么办?它将终止脚本并且缓冲区内容仍将自动刷新到客户端。 100% 确定的唯一方法似乎是完全禁用自动刷新。但我不确定如何实现(如果可能的话)。

【问题讨论】:

  • 您是否验证过缓冲区没有被简单地刷新,因为它已满?如果是这种情况,那么唯一的方法是增加缓冲区大小(不知道如何)。
  • 对于初学者,您不应该在代码中使用 die 或 exit,尤其是在输出未决的地方。在大多数情况下,脚本应该有一个 bootstrap.php 文件,该文件从头到尾运行。它在脚本开始时开始,在脚本结束时也开始。
  • 我知道这一点。但我问这个问题是为了清理一个古老的大型项目。那里有很多代码,由几个人和一些部分从 1999 年开始编写(显然很多非常糟糕的代码,我已经不得不处理 SQL 注入漏洞)。我能做的最好的事情是将每个输出抓取到缓冲区并进行处理。它似乎工作正常,但上帝知道是否没有什么东西会以我没有预料到的方式终止脚本。至少在这方面没有自动刷新能让我确定。

标签: php output-buffering


【解决方案1】:

另一种解决方案,您始终可以实现 OWN 缓冲区,并在您感觉如此时刷新... 所以你的代码应该开始为:

$buffer='';

在此之后,当您打算 print() 某些东西时,只需将 print() 替换为 $buffer.=

一旦您决定刷新缓冲区,您只需执行以下操作:

print($buffer); $buffer='';

通过这样做,您不仅可以 100% 控制缓冲区,还可以在脚本执行期间设置额外的标头,这在某些情况下非常方便...

【讨论】:

  • 任何对我的回答投反对票的人都可以礼貌地告诉我为什么吗?!这是解决该问题的出色解决方案!
猜你喜欢
  • 2011-01-03
  • 2012-02-29
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多