几个星期前我正在弄清楚如何在PHP脚本中运行.jar。我遇到了一些麻烦,SELinux使事情变得复杂,但我终于明白了。PHP exec()不调用.jar
但是,看起来我并没有明白 - 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 IS。我无法弄清楚为什么会出现这种情况。两者都从命令行工作。两者都被调用语法。
我认为它可能有一些做的权限,但他们似乎是相同的:
-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服务器的计算机上。)
也许它与你传递给GA.jar的参数有关。尝试注释掉代码来执行第二个jar,并简化代码以运行第一个代码。 – Tucker 2012-07-16 22:04:33
这不是参数 - 正如我所说的,完全相同的命令在命令行上工作。 – MattS 2012-07-16 22:06:04
你可以试试'$ command =“java -jar GA.jar”。 escapeshellarg($ _ SESSION ['options'] ['GA'] ['popsize'])。 “”。 escapeshellarg($ _ SESSION ['options'] ['GA'] ['congens'])。 “”。 escapeshellarg($ filename)。 “2> &1"; exec($ command,$ output,$ code); var_dump($ command,$ output,$ code);'并且输出你得到的输出? – DaveRandom 2012-07-16 22:24:20