运行后的PHP Cli输出

时间:2016-09-12 11:21:36

标签: php command-line-interface

for($i = 0; $i < 5; $i++) {
      echo $i . "\n";
      sleep(1);
}

这是我运行的代码。 php CLI决定等待而不是每秒显示一个数字,而是在执行完所有操作后显示

0
1
2
3
4

为什么会发生这种情况,我该如何做到这一点&#34;实时&#34; ?

编辑:发现问题:因为我包含WP-Core(Wordpress)输出以某种方式缓冲,如果我删除wp-core就可以了。有关更多信息,当包含wp_core时,会有一些wp通知记录在单独的文件中。

2 个答案:

答案 0 :(得分:1)

您需要禁用输出缓冲或刷新缓冲区。对于来自HTTP的请求,您实际上只需要ob,因为它允许您进行所有服务器端处理,而不必担心与客户端的连接。

for($i = 0; $i < 5; $i++) {
      echo $i . "\n";
      sleep(1);

      flush();
      ob_flush();
}

或者,如果您无法更改代码,则可以在CLI中完全禁用输出缓冲php.ini

output_buffering=Off

答案 1 :(得分:0)

Servers通常缓冲服务器端脚本的输出,直到它足够输出尝试类似这样的东西。设置输出缓冲关闭和手动刷新缓冲区的组合。请注意implcit flush行以及flush和ob_flush行。

for ($i = 0; $i < 5; $i++) {
    echo $i . "</br>";
    sleep(1);
    flush();
    ob_flush();
}

有关ob-flush的更多信息,请阅读http://php.net/manual/en/function.ob-flush.php