数週間前、PHPスクリプト内から.jarを実行する方法を考えていました。私はいくつかの問題を抱えていました、物事はSELinuxによって複雑になりました、しかし私はついにそれを理解しました。
しかし、結局のところ、私はそれを完全に理解していなかったようです-PHPは一貫性がありません。私は2つの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を許可することには、他にどのような要因が関係している可能性がありますか?
(ちなみに、これはApacheサーバーでRedhatを実行しているマシン上にあります。)