在我們使用的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> '代表什麼?我想將流程細節轉儲到一個文件,我該怎麼做?
非常感謝。
在我們使用的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> '代表什麼?我想將流程細節轉儲到一個文件,我該怎麼做?
非常感謝。
2>&1
重定向«stderr
»到«stdout
»,&
末使得background運行的命令。
爲了使它完成它應該是
«command» 2>&1 > /tmp/somefile.log &
沒有重定向«stdout
»到一個文件(或/dev/null
)從system()
後臺運行並沒有太大的意義,因爲你的命令會被打死的一旦PHP終止(例如達到時間限制)。
從system()
手冊:
注:如果程序開始 此功能,以便它 在後臺繼續運行, 該程序的輸出必須 重定向到一個文件或其他輸出 流。否則將導致 PHP掛起,直到執行 程序結束。
2> & 1將標準錯誤(2)日誌重定向到標準輸出(1)。
不知道多餘的&在最後。
如果您想將標準錯誤或標準輸出傳輸到文件,可以輕鬆完成。
管道錯誤輸出到一個文件中,更改2> & 1至2>文件路徑
凡filepath是preferrably絕對文件路徑(例如:2> /home/user/output.mpg)
每個UNIX程序都有兩個輸出流:stdout和stderr。爲了重定向,>符號將stdout(文件描述符1)重定向到一個文件。 「2>」將stderr(文件描述符2)重定向到一個文件,在這種情況下表示爲「& 1」,它告訴shell使用文件描述符1(它是stdout)。在php上下文中,這意味着這兩個流都將打印在您的腳本輸出中,您現在已經猜到了這一點。
命令末尾的&通知shell在後臺運行作業。我不知道你爲什麼想在這種環境下做到這一點。
如果你想寫通過PHP文件,你也可以使用[exec()][1]
或[passthru()][2]
具有選項從命令返回的所有內容。 system()
只會返回最後一行。
讓&使命令運行而不等待輸出。這可以幫助運行併發的PHP腳本。相比於並行運行它們,想象一下100個cUrl調用。 – fred 2012-02-29 06:27:31