-1

几周前,我正在研究如何从 PHP 脚本中运行 .jar。我遇到了一些麻烦,SELinux 使事情变得复杂,但我终于弄明白了。

但是,我似乎并没有完全弄清楚——PHP 不一致。我有两个罐子,PHP 正在调用一个,而不是另一个。

这是代码:

    $command = "java -jar GA.jar ". $_SESSION['options']['GA']['popsize'] ." ". $_SESSION['options']['GA']['congens'] ." ". $filename;
    echo $command;

    $output = array();
    exec($command, $output);
    print_r($output);

    exec('java -jar testJava.jar 5', $output);
    print_r($output);

我将其打印出来$command,以便我知道该命令正在正确构建。

无论如何,不​​会调用 GA.jar,但会调用 testJava.jar。我不明白为什么会这样。两者都从命令行工作。两者都是用语法调用的。

我认为这可能与权限有关,但它们似乎是相同的:

-rwxr-xr-x 1 apache   apache     13723 Jul 12 13:45 GA.jar
-rwxr-xr-x 1 apache   apache       781 Jul 13 19:02 testJava.jar

我想也许它与文件的权限有关testfiles/PHPout,但 GA.jar 只需要从中读取,它应该有权这样做;

-rwxrwxrwx 1 apache apache 189 Jul 16 15:46 testfiles/PHPout

如果您想知道实际的输出是什么,$output它包含来自 testJava.jar 的预期输出,但在 GA.jar 中是完全空的。

阻止 PHP 调用 GA.jar 但允许 testJava.jar 可能涉及哪些其他因素?

(作为记录,这是在一台运行 Redhat 和 Apache 服务器的机器上。)

4

2 回答 2

1

尝试添加2>&1到命令的末尾以将错误输出重定向到$output变量并查看是否有任何结果。

也尝试systempassthru看看它是否有任何区别。

于 2012-07-16T23:35:28.783 回答
0

我已经弄清楚问题出在哪里了。我问我的问题还为时过早,我没有做我应该做的一切来诊断这个问题。.jar 在早期执行一些 fortran 代码。出于某种原因,正确执行 fortran 代码的能力受到执行 .jar 的使用的影响 - 因此,当从命令行运行时,作为我自己的用户,它运行良好,但是当从 PHP 运行时,作为 apache,它运行陷入麻烦。

于 2012-07-18T21:30:57.820 回答