2014-11-13 76 views
0

我有一個shell腳本,它(rsync.sh)用rsync命令得到一個rsync的運行進度:如何通過PHP exec命令

rsync的-rtlv --password文件= /path/to/password/file/file.txt --bwlimit = 5000/local/root/path/$ 1 username @ remoteserver :: remote/root/path/$ 2

然後我運行PHP( rsync.php)執行命令:

exec('/ path/to/shell/script/rsync.sh local/specific/path/remote/specific/path /',$ progress,$ errors);

這一切工作正常。一旦完成,我會得到進展,然後解析它。到目前爲止,我只是在測試幾個較小的文件。但是,一旦投入使用,我預計這將在幾個大型文件上完成,這些文件將花費一個多小時才能完成。我希望能夠看到發生的進展。如果我把--progress標誌放在那裏,我不確定我將如何通過exec來獲取進度。有任何想法嗎?

我想我必須讓exec異步,並以某種方式將進度發佈到可以收集和顯示數據的數據庫。

回答

0

你不行。直到命令完成,PHP exec()函數纔會返回。

這對於PHP來說確實不是一件好事 - Web服務器通常不能很好地處理需要數小時才能完成的PHP腳本(以及Web請求)。也就是說,使用proc_open()函數系列,您將能夠使更接近的預期行爲,它允許您啓動一個與PHP腳本並行運行的進程。

+0

感謝您的解釋。這就說得通了。所以這意味着將rsync的結果傳送給MySQL。那可能嗎? –

+0

不是直接。例如,你必須有一些其他的參與 - 一個命令行PHP腳本。 – duskwuff

+0

啊,這很有道理。我會怎麼做呢?管道到PHP?例如:rsync命令| php /path/to/php/script.php –