2012-06-25 47 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');