我有一个名为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
表示进程已中止或其他什么。我想知道这意味着什么?
UPDATE 3:检查错误日志后,生成以下错误。有人能帮我吗?
第696行的dl失败错误:失败/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/server/libjvm.so,因为/opt/lamp/lib/libgcc_s.so.1:找不到版本"GCC_4.2.0"(/usr/lib/i386-linux-gnu/libstdc++.so.6需要)
检查您的apache错误日志,可能执行被阻止,并将PHP设置为隐藏错误。
此外,尝试(就像一个实验一样)使用完整的路径——包括far-java和.jar文件。
检查日志后,您可能会发现您的PHP.ini正在使用以下内容阻止命令:
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
删除"system"answers"exec"以允许在PHP中使用这些函数。
是否使用include
或require
从另一个脚本调用php脚本?
对pwd进行系统调用,以确保正确的工作路径。它应该与jar文件的路径相同
system('pwd');
其他可能失败的方式:apache/php用户不允许运行jar文件。尝试为jar文件设置0777(-rwxrwxrwx)或0666(-rw-rw-rw)的文件权限,看看是否有什么不同。
这个文件真的叫MyJar.jar吗?这种情况正确吗?Linux区分大小写。文件名中是否有空格字符,则应引用/转义文件名。
可能找不到java可执行文件的路径。请尝试system('which java')
,然后在系统调用中使用路径为预结束对的调用。还要尝试一个jar文件的绝对路径。
更新试着从PHP中启动一个Hello World Java程序进行测试,如果它真的可以运行的话。所以您知道问题不在于Java程序本身。
请查看您的域配置,无论您的域是否处于安全模式。这将阻止执行函数