2013-04-07 57 views
1

我想調用一個java程序並在標準輸出中讀取它的輸出。我遵循stackoverflow中的建議。但它不起作用。在PHP中執行java類

我已經添加類文件到我的CLASSPATH。我可以按如下正確執行在CMD命令:

enter image description here

在我的PHP文件,我通過

exec("java Hello", $output); 
print_r($output); 

這個程序叫做它產生的只是:

Array() 

什麼問題是什麼?我怎樣才能解決這個問題?

ps:你好是一個演示程序,實際上我想調用的程序要複雜得多,可能需要2秒或更長時間在我的機器(i5 4G)中。

+0

試試看看'passthru()'返回的是什麼(而不是'exec()')。 'exec()'可能有選擇性,有時只捕獲返回值而不是打印內容。使用'escapeshellarg()'來保護你的腳本免受黑客攻擊。 – 2013-04-07 08:14:54

+0

@Andarndar passthru返回返回值?無論如何,瀏覽器給出了'1'。 – zoujyjs 2013-04-07 08:18:36

+0

如果JAVA程序中的main()函數返回1(返回0 =沒有錯誤,1 =錯誤;)),這意味着有錯誤。它可能有些事要做,PHP的命令行不像你在'cmd'中那樣獲取你的JAVA。兩者當然都是不同的設置。就像'cakil'回答,它可能會循環使用你返回的Array(),因爲PHP中的echo/print默認情況下不會顯示數組的內部值,就像你在其他語言中可能習慣的那樣。 – 2013-04-07 08:22:05

回答

2

我會建議使用Java/PHP橋在這裏找到:http://php-java-bridge.sourceforge.net/pjb/ 它的安裝非常簡單,作品很好。

此外,我建議使用以下鏈接下載它。 (它是相同的一個作爲下載專區>文檔中的鏈接)

http://sourceforge.net/projects/php-java-bridge/files/Binary%20package/php-java-bridge_6.2.1/php-java-bridge_6.2.1_documentation.zip/download

該文件是JavaBridge.war。您可能需要將Tomcat用於Java EE容器。 Tomcat設置完成後,只需將該文件放入webapps文件夾並安裝即可。

如果你想經常在PHP中使用java類,這是我知道的最好的方法,我已經嘗試了很多。樹脂也起作用了,但它對我的郵件服務器並沒有很好的效果。

0

那麼,它產生陣列的權利?所以不是print_r($output)嘗試print($output[0]),即輸出的 'Hello World' 我的控制檯上:d

+0

實際上它會產生空數組,cuz'print_r()'遞歸地打印數組中的內容。而且我嘗試了print($ output [0]),這也沒有提供。 – zoujyjs 2013-04-07 08:23:58

+0

好吧,我很好奇你的世界程序的內容。我的簡單只是'System.out.print(「Hello World」);',主程序 – cakil 2013-04-07 08:29:40

+0

我也是。正如你在上圖中看到的,它在cmd中運行良好,並給出了正確的結果。 – zoujyjs 2013-04-07 08:41:48

0

嘗試pipe

$command = 'java Hello'; 
$descriptorspec = array(
    1 => array(
     'pipe', 'w' 
    ) 
); 
$process = proc_open($command, $descriptorspec, $pipes); 
if (!is_resource($process)) { 
    exit("failed to create process"); 
} 
$content = stream_get_contents($pipes[1]); 
fclose($pipes[1]); 
if (proc_close($process) === 0) { 
    print_r($content); 
}else{ 
    exit("failed to execute Hello"); 
} 
+0

瀏覽器輸出''無法執行Hello'',但我確實在cmd中正確執行'java Hello'。 – zoujyjs 2013-04-07 08:34:58

+0

proc_close($ process)會打印什麼? – 2013-04-07 08:39:24

1

試試這個:

exec('java -cp .:/path/to/folder/of/your/file Hello 2>&1', $output); 
print_r($output); 

2>&1需要顯示錯誤。