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