2009-04-20 30 views
3

在我們使用的PHP系統命令以下轉儲PHP系統命令輸出到文件

system("ffmpeg -i test.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv output_file.flv 2>&1 &"). 

請解釋上述系統命令的用法。 '2> '代表什麼?我想將流程細節轉儲到一個文件,我該怎麼做?

非常感謝。

回答

10

2>&1重定向«stderr»«stdout»&末使得background運行的命令。

爲了使它完成它應該是

«command» 2>&1 > /tmp/somefile.log & 

沒有重定向«stdout»到一個文件(或/dev/null)從system()後臺運行並沒有太大的意義,因爲你的命令會被打死的一旦PHP終止(例如達到時間限制)。

system()手冊:

注:如果程序開始 此功能,以便它 在後臺繼續運行, 該程序的輸出必須 重定向到一個文件或其他輸出 流。否則將導致 PHP掛起,直到執行 程序結束。

1

2> & 1將標準錯誤(2)日誌重定向到標準輸出(1)。

不知道多餘的&在最後。

如果您想將標準錯誤或標準輸出傳輸到文件,可以輕鬆完成。

管道錯誤輸出到一個文件中,更改2> & 1至2>文件路徑

凡filepath是preferrably絕對文件路徑(例如:2> /home/user/output.mpg)

1

每個UNIX程序都有兩個輸出流:stdout和stderr。爲了重定向,>符號將stdout(文件描述符1)重定向到一個文件。 「2>」將stderr(文件描述符2)重定向到一個文件,在這種情況下表示爲「& 1」,它告訴shell使用文件描述符1(它是stdout)。在php上下文中,這意味着這兩個流都將打印在您的腳本輸出中,您現在已經猜到了這一點。

命令末尾的&通知shell在後臺運行作業。我不知道你爲什麼想在這種環境下做到這一點。

+1

讓&使命令運行而不等待輸出。這可以幫助運行併發的PHP腳本。相比於並行運行它們,想象一下100個cUrl調用。 – fred 2012-02-29 06:27:31

0

如果你想寫通過PHP文件,你也可以使用[exec()][1][passthru()][2]具有選項從命令返回的所有內容。 system()只會返回最後一行。