0

我有一个名为的 jar 文件MyJar.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:我刚刚发现了一些奇怪的东西。当我使用systemcall 并指定一个返回值时,这个数字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

4 回答 4

1

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

此外,尝试(仅作为实验)使用完整路径 - far java 和 .jar 文件。

于 2012-08-24T07:15:00.820 回答
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 中允许这些函数。

于 2012-08-24T07:19:42.990 回答
0

你用includeor从另一个脚本调用你的 php 脚本require吗?

对 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 程序本身。

于 2012-08-24T07:16:53.273 回答
0

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

于 2012-08-24T08:26:38.063 回答