子进程输出没有实时返回'


Sub process output not being returned 'real-time'

我正在测试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