几个星期前,我正在弄清楚如何在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的计算机上。)
答案 0 :(得分:1)
尝试在命令末尾添加2>&1
,将错误输出重定向到$output
变量,看看是否有任何结果。
同时尝试system
或passthru
,看看它是否有所不同。
答案 1 :(得分:0)
我已经弄明白问题是什么了。我提出问题的时机还为时过早,我没有做我应该做的所有事情来诊断问题。 .jar,相当早期,执行一些fortran代码。由于某种原因,正确执行fortran代码的能力受哪个用户执行.jar的影响 - 所以当从命令行运行时,作为我自己的用户,它工作正常,但是当从PHP运行时,作为apache,它运行陷入困境。