2012-08-24 86 views
0

我有一個名爲MyJar.jar的jar文件,它接受4個參數。我需要使用php腳本來執行這個jar文件。 php文件和jar文件位於相同的目錄中。
當我嘗試使用system函數時根本沒有任何反應,沒有輸出沒有任何東西。其他功能也是如此,例如exec,passthru等。如何使用php執行jar文件?沒有任何反應

這就是我試圖運行該文件的方式。

system('java -jar ./MyJar.jar arg1 arg2 arg3 arg4'); 
// and also 
system('./MyJar.jar arg1 arg2 arg3 arg4'); 
// and also 
exec('./MyJar.jar arg1 arg2 arg3 arg4',$output); 
print_r($output); 
// nothing works 

UPDATE:感謝您的回答。但我已經嘗試了一切。我嘗試使用我的jar文件的絕對路徑。我嘗試了絕對路徑和相對路徑的命令中繼功能的各種可能組合。我嘗試使用chdir更改目錄。 pwd顯示我在正確的道路上。我不知道該做什麼了。

UPDATE 2:我剛剛發現了一些奇怪的東西。當我使用system呼叫並指定返回值時,返回號碼6。如果我理解正確6意味着進程已被中止或什麼。我想知道這是什麼意思?

UPDATE 3:檢查錯誤日誌後,生成以下錯誤。任何人都可以幫助我嗎?

dl failure on line 696Error: failed /usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/server/libjvm.so, because /opt/lampp/lib/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/i386-linux-gnu/libstdc++.so.6)

+0

問題是否有可能與jar文件?你可以手動運行它,看看它是否正確運行? – Lix

+0

沒有。 jar文件沒問題。它從命令行完美運行。 –

+0

您可能需要指定java的完整路徑,我不確定system()或exec()是否檢查PATH變量 – Darkzaelus

回答

1

檢查你的apache錯誤日誌,可能是執行被阻止,並設置PHP來隱藏錯誤。

另外,使用完整路徑(遠程java和.jar文件)嘗試(就像一個實驗一樣)。

0

您是否使用includerequire從另一個腳本調用您的php腳本?

對pwd進行系統調用以確保正確的工作路徑。它應該是一樣的路徑jar文件

system('pwd'); 

你可能會失敗的其他方式: 的阿帕奇/ PHP的用戶是不允許運行的jar文件。嘗試將文件權限設置爲0777(-rwxrwxrwx)或0666(-rw-rw-rw)到jar文件並查看是否有任何區別。

該文件是否真的叫做MyJar.jar?這種情況是否正確? Linux區分大小寫。文件名中是否有空格字符,則應引用/轉義文件名。

可能找不到java可執行文件的路徑。 嘗試system('which java'),然後在您的系統調用中添加路徑前的呼叫。也嘗試一個絕對路徑到jar文件。


更新 嘗試在PHP中開始一個Hello World的Java PROGRAMM進行測試,如果真的可以運行。所以你知道問題不在於Java程序本身。

+0

請閱讀更新。 –

0

檢查你的日誌後,你可能會發現你的PHP。ini正在用類似下面的命令攔截命令:

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source 

刪除'system'和'exec'以允許在PHP中使用這些函數。

+0

這些功能都處於活動狀態。其他shell命令如'ls'運行沒有任何問題。 –

0

請考慮您的域名配置安全模式是否在您的域名上。這將阻止執行功能