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

时间:2019-05-22 14:53:33

标签: php flush

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

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

这可以确保类似

echo "foo\n";

立即导致在网络浏览器中显示“ foo”,而不是在输出缓冲区到期刷新或PHP代码在完成或出错时退出。

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

1 个答案:

答案 0 :(得分:1)

刷新输出缓冲区是开发人员必须执行的隐式操作,因此不能在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);