几周前,我正在研究如何从 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 服务器的机器上。)