PHP exec() not calling .jar


PHP exec() not calling .jar

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

然而,我似乎并没有完全弄清楚——PHP是不一致的。我有两个jar,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服务器的机器上。)

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

也可以试试systempassthru,看看它是否有什么不同。

我已经弄清楚问题出在哪里了。我问这个问题为时过早,我没有尽我所能来诊断这个问题。jar在很早的时候就执行了一些fortran代码。出于某种原因,正确执行fortran代码的能力会受到执行.jar的使用方式的影响——因此,当作为我自己的用户从命令行运行时,它运行得很好,但当作为apache从PHP运行时,遇到了麻烦。