PHP exec()没有调用.jar

时间:2012-07-16 21:50:01

标签: java php jar exec

几个星期前,我正在弄清楚如何在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还有哪些其他因素可以参与?

(对于记录,这是在运行带有Apache服务器的Redhat的计算机上。)

2 个答案:

答案 0 :(得分:1)

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

同时尝试systempassthru,看看它是否有所不同。

答案 1 :(得分:0)

我已经弄明白问题是什么了。我提出问题的时机还为时过早,我没有做我应该做的所有事情来诊断问题。 .jar,相当早期,执行一些fortran代码。由于某种原因,正确执行fortran代码的能力受哪个用户执行.jar的影响 - 所以当从命令行运行时,作为我自己的用户,它工作正常,但是当从PHP运行时,作为apache,它运行陷入困境。