私の Web サイトでは、バックグラウンドで Java プログラムを実行するために PHP が必要です。そのため、PHP はexec()
メソッドを発行して Java にすべての作業を任せます。実装は Windows では問題なく動作しますが、Ubuntu では完全に失敗しました。動作しませexec()
んが、コンソールを使用したスタンドアロン テストは問題なく動作します。
test.php
問題を絞り込むためにセットアップしました:
<?php
$output = exec("java -cp ~/path/to/java/class/file/folder Hello 2>&1");
//$output = exec("whoami");
echo $output;
?>
はHello.java
単純です:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
test.php
localhost で実行すると、次のように表示されます。
Error: Could not find or load main class Hello
エラーの原因を絞り込んでみましたが、次のように考えました。
exec()
apache-user が期待どおりに出力される
ため、それ自体に問題があります。whoami
- エラー メッセージの意味:
このエラーについて検索しました。this oneのような投稿は、 classpathがないことが原因です。コンソールでは機能するため、私にとってもそうではありません。したがって、エラーメッセージは何も意味しません (そうですか?)
- ユーザー/グループの許可:
apache-user がクラス ファイルの実行を許可されていない可能性はありますか?
確認したところ、 の許可コードはHello.class
でありrw-r--r--
、所有者は であることがわかりましたapache-user:webmasters
。
ただし、誰もx
ファイルのアクセス許可を持っていなくても、コンソールで (自分のユーザーを使用して) 実行できます。
ここの状況はよくわかりません。しかし、私の理解では、Javaプログラムを実行することで、実際にそれをJVM
実行しています(または他の何か)。したがって、の許可は関係ありHello.class
ません。
別の投稿に同様の状況があることがわかりました。しかし、その解決策 - Java bin へのフルパスを指定する/usr/bin/java
- はうまくいきません...
エラーの原因は何ですか?
誰でも助けることができますか?詳細な解決策は大歓迎です!初心者です@_@
よろしくお願いします!!!