2012-11-06 40 views
1

通過PHP執行Java jar文件這裏是我的PHP代碼:無法在Ubuntu

<?php 
exec('java -jar ~/src/epubcheck-*/epubcheck-*.jar -out /var/www/epubcheck-outputs/output.xml /var/www/AChristmasCarol.epub'); 

當我嘗試在它工作於終端的命令......但在PHP並非如此。

此外,我甚至不獲取Java版本。但我確實看到了「嘿......」,所以有些命令可以起作用,有些則不行。

我使用Nginx已經在我的服務器。

+1

只注意到'〜/ src目錄/ epubcheck - */epubcheck - * jar'可能是一個問題在這裏 - '〜'對於*當前用戶*的主目錄的快捷方式 - 這樣的命令,當你運行自己,這意味着'/首頁/用戶名/ src目錄/ ...',但是當你運行它作爲你的網站服務器的用戶,這意味着一個完全不同的道路。嘗試將其更改爲要執行的jar文件的完整路徑。 – Kelvin

+0

你是對的!它現在有效!謝謝! – jnbdz

+1

啊哈,太棒了!很高興幫助 - 添加評論到我的答案爲後人:) – Kelvin

回答

2

exec的文檔說明,只有輸出的最後一行是由EXEC返回,所以你需要使用一個參數來獲取完整的輸出。

java -version將其輸出到STDERR,不STDOUT,所以你需要STDERR重定向到STDOUT如果你想捕捉的PHP命令的輸出。 但是,當你運行一個普通的java程序這不應該是必要的。

$output = array(); 

exec('java -version 2>&1', $output); 
print_r($output); // contains the correct output 

exec('java -jar myfile.jar', $output); 
print_r($output); // should also contain the correct output 

如果這仍然不起作用,看到我的評論伊布的回答

編輯:實際的答案,從問題的意見:

~/src/epubcheck-*/epubcheck-*.jar可能是一個問題在這裏 - ~是一個快捷方式在當前用戶的主目錄 - 所以,當你自己運行的命令,這意味着/home/username/src/...,但是當你運行它作爲你的網站服務器的用戶,這意味着一個完全不同的道路。嘗試將其更改爲要執行的jar文件的完整路徑。

+1

只需輸出Array() – jnbdz

1

在PHP手冊它說,中繼返回void:

無效中繼(字符串$命令[摘要& $ return_var])

所以什麼都不會迴應。

+0

我也呼應exec ... – jnbdz

+1

機會是你的apache用戶沒有足夠的權限執行java。嘗試自己運行命令爲Apache用戶,並看看會發生什麼(例如:'須藤蘇WWW-data''java的-version') – Kelvin

+0

@讓NicolasBoulayDesjardins試試我使用nginx的命令行 – Ibu