2016-05-01 117 views
0

在Windows上,我使用PHP來執行gulp命令。使用PHP exec()實時輸出到文件?

像這樣:

<?php 

    set_time_limit(0); 

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

這工作,但我只能把它完成後命令,這需要大約30秒的成績。

我想結果寫入文件,正在運行一段時間,所以我可以輪詢使用Ajax的間隔進度。

在正常的命令提示符我可以做

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