幾個星期前我正在弄清楚如何在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