我只是测试了Symfony Process Component,它似乎没有按照它所说的那样做。
文档状态
执行长时间运行的命令(如rsync-ing文件到远程服务器)时,您可以通过将匿名函数传递给run()方法来实时向最终用户提供反馈:
我有1个文件,内容如下
$process = new Process('php terminal.php');
$process->setTimeout(null);
$process->run( function ( $type, $buffer ) {
if (Process::ERR === $type) {
echo 'ERR > '.$buffer;
} else {
echo 'OUT > '.$buffer;
}
});
和另一个
$x = 10;
while( $x ) {
echo "{$x}\n";
sleep(1);
$x--;
}
在 10秒等待后通过终端运行此输出时
OUT > 10
OUT > 9
OUT > 8
OUT > 7
OUT > 6
OUT > 5
OUT > 4
OUT > 3
OUT > 2
OUT > 1
显示上面有10次闭包迭代,但是在完成该过程之前没有输出。
我在这里错过了什么吗?
问候,卢克
答案 0 :(得分:0)
您需要使用:
flush();
ob_flush();
在您的第一个代码上:
$process = new Process('php terminal.php');
$process->setTimeout(null);
$process->run( function ( $type, $buffer ) {
if (Process::ERR === $type) {
echo 'ERR > '.$buffer;
} else {
echo 'OUT > '.$buffer;
}
flush();
ob_flush();
});
第二天:
$x = 10;
while( $x ) {
echo "{$x}\n";
flush();
ob_flush();
sleep(1);
$x--;
}