我正在测试Symfony进程组件,它似乎不像它在锡上所说的那样做。
文档状态
当执行一个长时间运行的命令时(比如将文件同步到远程服务器),你可以通过向run()方法传递一个匿名函数来实时地给最终用户反馈:
我有一个文件,下面是
$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次闭包迭代,但直到过程完成才有输出。
我错过了什么吗?
问候,卢克
您需要使用:
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();
});
第2页:
$x = 10;
while( $x ) {
echo "{$x}'n";
flush();
ob_flush();
sleep(1);
$x--;
}
更多信息请访问php.net: ob_flush and flush