2010-09-24 74 views
9

我想執行類似(在myProgram.sh):如何運行Java程序並在PHP中獲取輸出?

java -cp whatever.jar com.my.program $1 

內PHP和讀取輸出。

到目前爲止,我有這樣的:

$processOrderCommand = 'bash -c "exec nohup setsid /myProgram.sh ' . $arg1 . ' > /dev/null 2>&1 &"'; 
exec($processOrderCommand); 

但我真的希望是能夠在PHP腳本中獲取Java程序的輸出,而不只是執行它作爲另一個線程。

這怎麼辦?

+0

它看起來像問題是,類路徑必須是絕對的,相對的,即使準確,失敗。我會盡快發佈答案。 – 2010-09-25 16:04:36

回答

0

關鍵是類路徑必須在shell_exec PHP腳本中是絕對的。

或者至少這是我能夠正確工作的唯一方法。基本上,從環境到環境幾乎是不可能的,相關目錄是php腳本運行JVM。

同時,它有助於把絕對路徑位置對於Java,如USR /.../斌/ java的

7

可以做到這一點:

exec($processOrderCommand, $output); 

從文檔:

如果output參數存在,則指定的陣列將被與來自指令輸出的每一行填充。尾部空格,如\ n,不包含在此數組中。請注意,如果數組已經包含一些元素,則exec()將追加到數組的末尾。如果您不希望函數附加元素,請在將數組傳遞給exec()之前先調用unset()

有關將執行的更好的控制,你可以看看proc_open()


資源:

+0

不幸的是,這不適用於Java輸出。即使只是運行java -version,也會返回一個空數組。 – 2010-09-24 18:16:49

+2

@Stephane Grenier這是因爲'-version'的輸出在錯誤流上;) – 2010-09-24 18:17:51

+0

@Colin:我剛剛運行exec('java -cp hardcodedPath/TestOutput.jar com.my.TestProgram hello',$ output);結果是一個空數組。在程序中,我只是做一個System.out.println(args [0])// ie。你好。有什麼建議麼? – 2010-09-24 18:26:45

相關問題