如何使用PHP执行jar文件?什么都没发生

时间:2012-08-24 07:12:27

标签: php shell executable-jar

我有一个名为MyJar.jar的jar文件,它接受4个参数。我需要使用php脚本执行这个jar文件。 php文件和jar文件位于同一目录中 当我尝试使用system函数时,没有任何事情发生,没有任何输出。对于execpassthru等其他功能也是如此。

这是我尝试运行该文件的方式。

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

更新:感谢您的回答。但我已经尝试了一切。我尝试使用绝对路径到我的jar文件。我已尝试使用绝对路径和相对路径的每种可能的命令中继功能组合。我尝试使用chdir更改目录。 pwd表明我正走在正确的道路上。我不知道该怎么办了。

更新2:我刚发现奇怪的事情。当我使用system调用并指定返回值时,将返回数字6。如果我理解正确6意味着过程被中止或某事。我想知道这意味着什么?

更新3:检查错误日志后,生成了以下错误。任何人都可以帮我吗?

  第696行

dl失败错误:失败   /usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/server/libjvm.so,   因为找不到/opt/lampp/lib/libgcc_s.so.1:版本`GCC_4.2.0'   (需要/ usr / lib / i386-linux-gnu / libstdc ++。so.6)

4 个答案:

答案 0 :(得分:1)

检查您的apache错误日志,可能正在阻止执行并将PHP设置为隐藏错误。

另外,尝试(就像实验一样)使用完整路径 - 远程java和.jar文件。

答案 1 :(得分:0)

您是否使用includerequire

从另一个脚本调用您的php脚本

对pwd进行系统调用以确保正确的工作路径。它应该与jar文件的路径相同

system('pwd');

您可能失败的其他方式: 不允许apache / php用户运行jar文件。尝试将文件权限0777(-rwxrwxrwx)或0666(-rw-rw-rw)设置为jar文件,看看是否有任何区别。

该文件真的名为MyJar.jar吗?案件是否正确? Linux区分大小写。文件名中是否有空格字符,那么你应该引用/转义文件名。

可能找不到java可执行文件的路径。 尝试system('which java'),然后在系统调用中使用路径预先调用。还可以尝试jar文件的绝对路径。


更新 尝试从PHP中启动Hello World Java Programm进行测试,如果它真的可以运行的话。所以你知道问题不在于Java Programm本身。

答案 2 :(得分: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中允许这些功能。

答案 3 :(得分:0)

请查看您的域配置是否为您的域启用了安全模式。这将阻止exec函数