我想在PHP中執行系統命令,並捕獲那些輸出涵蓋多行的那些命令的輸出。我正在使用exec(),但它似乎只爲單行生成輸出的命令返回一個值。如何捕獲PHP執行的命令的多行輸出?
例如,如果我在命令行中運行日期,我得到:
Wed May 15 15:07:32 EST 2013
正如預期的那樣,如果我跑從PHP這個命令使用該執行exec ...
exec("date", $exec_results);
...然後$ exec_results的值變爲...
Array ([0] => Wed May 15 15:07:32 EST 2013)
但是,當我從命令行運行時,我得到這...
real 0m0.000s
user 0m0.000s
sys 0m0.000s
...但是當我做這從PHP ...
exec("time", $exec_results);
... $ exec_results的值爲空:
Array()
我不實際上需要在我的應用程序中運行日期或時間,但這些僅僅是命令行中的單行輸出與多行輸出如何改變PHP返回的例子。
的文件說:
如果輸出參數存在,則該指定的數組將被填充來自指令輸出的每一行。
那麼,爲什麼$ exec_results數組沒有被命令行中運行time命令時看到的所有行填充?
筆記 - 我已經運行命令行條目作爲apache用戶來排除特權。
感謝您的想法 - 我試過了shell_exec但不幸的是發現它也沒有返回到PHP對於其中CLI輸出多行的命令。仍然困惑... – Dan
要小心,實際上與cron和寫入文件的問題是完全一樣的問題,如果該命令不寫入控制檯它不能被重定向器捕獲:#time> file.txt將不會把結果寫入文件 –
謝謝Ph.T - 你是對的,不適合時間。它確實適用於戴爾OMSA應用程序的命令(這是我想用PHP捕獲的)。所以在這個例子中,屏幕上顯示的內容可以移動到文件中,但PHP仍然只是獲得一個空數組。我的解決方法是有效的,但是我們無法找到爲什麼PHP能夠獲取文本是一種遺憾...... – Dan