![](/img/trans.png)
[英]getRuntime().exec(<command>): <command> not working
[英]exec command is not working on Linux server
我使用PHP調用Java函數。 代碼是:
exec('pushd d:\xampp\htdocs\file_excecute\class & java Autoingestion username password id Sales Daily Summary 20120902',$output,$return);
該代碼在Windows計算機上有效,但在Linux服務器上不起作用。 代碼是:
exec('pushd \var\www\domainname.com\itune_report\class & java Autoingestion username password id Sales Weekly Summary 20120901',$output,$return);
在啟用SELinux的計算機上嘗試從PHP腳本和PHP調用的外部腳本執行sudo命令時,存在(可能無法克服)困難。
確保在命令中使用Linux目錄路徑
Linux默認不會讓apache更改進程的組ID。
您可能需要使用其他解決方案,例如使PHP腳本將文件存放在cron或inotify監視的目錄中,該文件將以root權限調用另一個腳本。
顯然,它在Linux上不起作用。 pushd
命令僅在Windows Shell中定義。 linux上的路徑必須使用正斜杠而不是反斜杠作為分隔符。
您使用了錯誤的斜杠作為字段分隔符,但這可能不是您唯一的問題。
由於您使用exec(command, output, return)
格式,因此命令的輸出顯示在$ output中。
但是,這只會給您stdout。 外殼程序將向stderr發送錯誤消息。
不幸的是,沒有讀取stderr的exec()
版本。
您可以通過在shell命令的末尾添加2>&1
將兩個輸出合並為$output
:
exec("mycommand 2>&1", $output, $return);
再看$輸出,你會發現要么你可以用它來工作了,為什么它不工作,你的成功的命令或錯誤消息的輸出。
如果您想編寫更嚴格的內容來分別處理stdout和stderr,則需要使用proc_open()
代替: Exec()之后的PHP StdErr
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.