-1

数週間前、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

出力が実際に何であるか疑問に思っている場合は、$outputtestJava.jarからの期待される出力が含まれていますが、GA.jarからは完全に空です。

PHPがGA.jarを呼び出さないようにするが、testJava.jarを許可することには、他にどのような要因が関係している可能性がありますか?

(ちなみに、これはApacheサーバーでRedhatを実行しているマシン上にあります。)

4

2 に答える 2

1

コマンドの最後に追加2>&1して、エラー出力を変数にリダイレクトし、$output何かが得られるかどうかを確認してください。

また、またはそれが違いを生むかどうsystemかを確認してみてください。passthru

于 2012-07-16T23:35:28.783 に答える
0

私は問題が何であったかを理解しました。私は自分の質問をするのに時期尚早でした、私は問題を診断するために必要なすべてをしていませんでした。.jarは、かなり早い段階で、少しのFortranコードを実行します。何らかの理由で、Fortranコードを適切に実行する機能は、.jarを実行する使用方法によって影響を受けます-したがって、コマンドラインから実行する場合、私自身のユーザーとしては正常に機能しましたが、PHPから実行する場合、Apacheとして実行されましたまずいことになる。

于 2012-07-18T21:30:57.820 に答える