2016-05-01 24 views
0

Windowsでは、PHPを使用してgulpコマンドを実行します。このようPHP exec()を使用してライブ出力しますか?

<?php 

    set_time_limit(0); 

    exec("cd /projectpath"); 
    $results = exec("gulp"); 
?> 

これは動作しますが、私はたったの約30秒かかり、それが終了した後にコマンドの結果を得ることができます。

私はそれがを実行している間、ファイルに結果を書きたいので、私はアヤックスを使用して間隔の進展をポーリングすることができます。

通常のコマンドプロンプトで、私は

gulp > results.txt 2>&1 

を行うことができますし、コマンドの実行中にテキストファイルが埋め込まれています。

私は既にshell_exec()、system()、passthru()も試しましたが、これはPHP内では動作しません。

アイデアはありますか?

+0

たぶん[popenの](http://php.net/manual/en/function.popen.php)参考になります。 – segFault

答えて

0

あなたが提案した方法でexec()を呼び出すだけではどうですか?

<?php 

    set_time_limit(0); 

    exec("cd /projectpath"); 
    $results = exec("gulp > results.txt 2>&1"); 
?> 
+0

私はもちろんこれを試しましたが、コマンドはすぐに停止して何もしないようです。理由は分かりません。 – Dylan

0

使用proc_open

<?php 
$cmd = 'for i in $(seq 20); do sleep 1; echo $i; done'; 
$cwd = '/'; 
$descriptors = array(
    0 => array('pipe', 'r'), 
    1 => array('file', 'stdout', 'w'), 
    2 => array('file', 'stderr', 'w'), 
); 

$handle = proc_open($cmd, $descriptors, $pipes, $cwd); 
if (!$handle) { 
    echo 'failed to run command'; 
} else { 
    proc_close($handle); // wait for command to finish (optional) 
} 
+0

私はこの例題に出くわしましたが、実際に何が起こっているのかは分かりませんでした。これはどこに結果を書いていますか?私の例でそれを使用する方法? – Dylan

+0

'$ cwd'は' '/ projectpath''、' $ cmd = 'gulp'; 'に設定し、' stdout'と 'stderr'をstdoutとstderrを持つファイル名に置き換えてください。 – phihag

関連する問題