4

実行が出力するすべての行に対してコールバック関数を作成できるようにするphp関数または回避策を探していました。私が見つけた最良のものは proc_open() でしたが、出力を取得するために fgets() を呼び出すときに指定されたバイトごとに出力することしかできませんでした。fgets() に小さすぎるバイトを入れると、1 行が複数行に分割されます。大きすぎると、コールバックが遅れます。

出力行ごとに proc_open のようなコールバック関数を呼び出すことができる関数が PHP にあるでしょうか。Exec() 関数は、各行を配列に入れることができるため、優れた例ですが、各インデックスを作成するときにコールバックを提供するオプションはありません。

4

1 に答える 1

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');
于 2012-06-25T08:22:31.620 に答える