我有一个名为MyJar.jar
的jar文件,它接受4个参数。我需要使用php脚本执行这个jar文件。 php文件和jar文件位于同一目录中
当我尝试使用system
函数时,没有任何事情发生,没有任何输出。对于exec
,passthru
等其他功能也是如此。
这是我尝试运行该文件的方式。
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)
答案 0 :(得分:1)
检查您的apache错误日志,可能正在阻止执行并将PHP设置为隐藏错误。
另外,尝试(就像实验一样)使用完整路径 - 远程java和.jar文件。
答案 1 :(得分:0)
您是否使用include
或require
?
对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函数