我可以在 php.ini 中使用 ob_implicit_flush() 和 ob_end_flush() 的等价物吗?

Can I have the equivalent of ob_implicit_flush() and ob_end_flush() in php.ini?

在调试期间(例如在 Netbeans 中)单步执行 PHP 代码时,我想立即在浏览器中看到 PHP 输出。这可以通过在 PHP 代码的开头包含以下内容来实现(至少在使用 PHP7.2 和 Firefox 时):

  ob_implicit_flush ();
  while (@ob_end_flush());

这确保了

echo "foo\n";

立即导致 'foo' 显示在 Web 浏览器中,而不是当输出缓冲区需要刷新或 PHP 代码在完成或错误时退出。

但是有没有一种方法可以通过编辑 php.ini 来实现这一点,这样我就不必将它包含在要调试的 PHP 代码的每一位中? (我知道这会导致性能下降,但这仅用于开发和调试目的。)

刷新输出缓冲区是开发人员必须执行的隐式操作,因此不能在 php.ini.

中打开或关闭。

但是,PHP 确实有一个名为 ticks 的功能,它允许开发人员注册一个回调函数,以便在每执行 X 行代码时调用它。

参见 register_tick_function,您可以在其中定义自己的回调函数来执行刷新,并在程序中的每个语句之间使用它 运行。这显然会降低性能,并且可能有更好的方法来实现您想要做的事情。

示例:

declare(ticks=1);
function autoFlushBuffer() {
  ob_implicit_flush ();
  while (@ob_end_flush());
}
register_tick_function("autoFlushBuffer", true);

// The following lines will appear in your web browser one by one:
echo "one";
sleep(1);
echo "two";
sleep(1);
echo "three";
sleep(1);