在php程式碼中需要執行一個shell腳本,希望分別得到它的標準輸出(stdout)和錯誤輸出(stderr)。用shell的重定向把標準輸出和錯誤輸出放到文件中再用php讀取文件,可行,但輸出文件的內容傳回php後就不再需要,有沒有辦法把shell的輸出重定向到變數?
要執行腳本的功能,無法用php本身完成(執行R語言的腳本),並且需要把常規輸出和錯誤輸出都回饋。
shell裡面的重定向可以把標準輸出和錯誤輸出分別放到檔案中,但產生臨時檔案。
<code class="bash">my_cmd 1>out.txt 2>err.txt</code>
php再讀取out.txt
和err.txt
檔案內容進行回傳。
這樣做的缺點:產生了中間文件。如果shell指令my_cmd
執行的時間比較長(可能要幾分鐘),那麼同一用戶如果短時間內多次發起http請求使得php執行my_cmd
,則需要每次out.txt
和err. txt
的名字都不同,以免寫入衝突。這就產生了很多不必要的中間文件。即使及時刪除它們,對於I/O還是有開銷,希望能避免。
php的exec()
函數:
<code>string exec ( string $command [, array &$output [, int &$return_var ]] )</code>
裡面的參數$output
看起來只能得到「運行腳本時螢幕輸出」的內容,是stdout或stdout和stderr的混合,不能分開獲得。