PHP Cli运行后的输出


PHP Cli Output after run

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

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

0
1
2
3
4

为什么会发生这种情况,我怎样才能使它"实时"?

EDIT:发现问题:因为我包含WP-Core (Wordpress)输出以某种方式缓冲,如果我删除WP-Core,一切都很好。要了解更多信息,当包含wp_core时,会有一些wp通知被记录在单独的文件中。

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

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

或者,如果不能更改代码,可以在CLI中完全禁用输出缓冲。php.ini

output_buffering=Off

Servers通常缓冲服务器端脚本的输出,直到有足够的输出尝试这样的东西。设置输出缓冲关闭和手动刷新缓冲区的组合。注意隐式的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