2012-06-25 21 views
2

我正在寻找一个PHP函数或解决方法,这将允许您为每行执行输出回调函数。我能找到的最好的是proc_open(),但它只允许我在调用fgets()时输出每个指定的字节以获取输出。如果我把这些字节放在fgets()中太小,它会将一行分成多行;过大会延迟回调。PHP回调函数为类似exec()每个输出行实时

PHP中是否有一个函数允许我调用我的回调函数,类似于每个输出行的proc_open? Exec()函数是一个很好的例子,因为它可以将每行放入一个数组中,但它没有选择给回调,因为它使每个索引。

+1

不会迭代每行,然后手动调用回调函数的工作? – Ikke

+0

@Ikke对不起,但我想用CLI编码视频。输出为每行提供完成百分比,我想调用回调函数将百分比存储到每行的数据库中。 proc_open()一次给我3到4行。我必须继续玩fgets()的每个指定字节参数的回报才能找到它。只是想看看是否有另一种方式。 – user1105430

回答

5

您可以通过拨打从exec返回的每条线路进行回叫来创建自己的线路。见下图

function exec_callback($command, $callback){ 
    $array = array(); 
    exec($command, $array, $ret); 
    if(!empty($array)){ 
     foreach ($array as $line){ 
      call_user_func($callback, $line); 
     } 
    } 
} 

// example to use 
function print_lines($line){ 
    echo "> $line\n"; 
} 

exec_callback("ls -l /", 'print_lines');