もちろん、答えを探しているときに見つけたこのトピックには複数のスレッドがあるので、私を虐殺しないでください. それにもかかわらず、exec() 呼び出しでまったく応答がないため、私の問題は異なるようです。ここにいくつかの情報があります:
- 私は Apache 2.2.22 で PHP 5.4.7 を実行している MacOS を使用しており、Java 1.6.0_35 から jar ファイルを実行しようとしています。
- 「ls -l」、「which java」、「pwd」などの単純なコマンドを実行できますが、Java を呼び出そうとすると、「/usr/bin/java -version」でさえ応答なしで失敗します。PHP スクリプトは、exec() 呼び出しの後、他のコマンドの破棄を停止するだけです。
- スクリプト自体からも、エラーログからも、出力が得られません。
- exec、shell_exec、system をあらゆる方法で試しましたが、成功しませんでした。
- バイナリ、jarファイルなどを含むJava呼び出しのすべての部分が存在し、絶対パスでアクセスできることを確認しました。もちろん、コマンドはコマンドラインで問題なく実行されます
- 呼び出し自体は次のようになります.xml2xls.jar --input="/private/tmp/report_rUEsDe.xml" --output="/private/tmp/report_7o1lFb.xls"'.
- PHP の設定を確認しましたが、何も問題がありません (disable_functions、safe_mode など)。
- DYLIB 環境変数の問題で MAMP を実行していません
私は今、どこで調査を続けるべきか迷っています。誰かが私を助けてくれると嬉しいです. テストスクリプトで実行しているコードは次のとおりです。
try {
$output = "";
$return_val = 0;
echo exec('/usr/bin/java -Djava.awt.headless=true -jar /Users/twolff/Projects/<project_name>/bin/java/net.adternity.utils.xml2xls/dist/net.adternity.utils.xml2xls.jar --input="/private/tmp/report_rUEsDe.xml" --output="/private/tmp/report_7o1lFb.xls"', $output, $return_val);
echo "<br/>";
echo serialize($output);
echo "<br/>";
echo $return_val;
echo "<br/>";
} catch(Exception $e) {
echo $e->getMessage();
echo "<br/>";
}
echo "DONE";
繰り返しますが、「どの Java」(または Java 以外のもの) を使用すると、次のような出力が得られます。
/usr/bin/java
a:1:{i:0;s:13:"/usr/bin/java";}
0
DONE
Java アプリを実行しようとしても何も返されず、ブラウザは何もしません。出力なし、エラー ログなし。
ご検討いただきありがとうございます。
トバイアス。