PHP用のJava環境を設定する

WBOY
リリース: 2016-06-13 13:01:53
オリジナル
907 人が閲覧しました

php
のJava環境を設定する

JAVA は強力な機能でよく知られており、PHP がシンプルで使いやすいことは間違いありません。しかし、場合によっては、主に証明書の認証と処理など、PHP では解決できない問題に遭遇することがあります。そこで誰かが、PHP から JAVA クラスを呼び出せるようにする解決策を考え出しました。

PHP を使用して JAVA を調整する方法に関する記事はインターネット上に多数ありますが、その多くは *.dll の使用を必要とします。 PHP を使用する人なら誰でも、*.dll ファイルは Windows で使用すると、これは PHP のクロスプラットフォーム原則に反します。したがって、.dll ファイルを必要としない解決策を検討する必要があります。一定期間のテストの後、私の経験をまとめます。

必要なファイル: (公式 Web サイト http://php-java-bridge.sourceforge.net/pjb/ からダウンロードできます) )

JavaBridge.jar - WEB サーバー インターフェイスの構築に使用されるコア JAVA アプリケーション パッケージ。

Java.inc - PHP 言語呼び出し用のメソッド パッケージ (主に Java クラス)。

具体的な使用法:

まず、JavaBridge.jar を実行して WEB サーバー インターフェイスを起動し、JavaBridge.jar が配置されているディレクトリでコマンド java -jar を実行します。 JavaBridge.jar SERVLET_LOCAL:8080。環境変数PATHにjavaが存在しない場合は絶対パスを使用してください。 (Windows プラットフォームが jar ファイルを javaw に関連付ける場合、 Linux プラットフォームで JavaBridge.jar を直接ダブルクリックし、SERVLET_LOCAL:8080 を選択して [OK] をクリックすると、コマンドの前に nohup を使用してプログラムを使用できます。 継続的に実行。8080 は一般的に使用されるポートであり、他のポートに設定できます。

次に、PHP コードを記述します:

//define("JAVA_DEBUG", true); //デバッグ設定?
define("JAVA_HOSTS", "127.0.0.1:8080"); //javabridge.jar を開いて設定したポートが 8080 でない場合は、このステートメントで変更できます

require_once("java/Java.inc"); //php は Java インターフェースを呼び出します。パスの問題に注意する必要があります
$here=realpath(dirname($_SERVER["SCRIPT_FILENAME"]));
java_set_library_path ($here.PATH_SEPARATOR .'.'); //Java 開発パッケージ (クラスまたは jar ファイル) のパスを設定し、クロスプラットフォームのサポートを確保します。
java_set_file_encoding ("GBK");???? //JAVA エンコーディングを設定します。私は他のエンコーディングを試したことはありませんし、他のエンコーディングの使用方法を詳しく調べたこともありません。

//前面は構成環境で、実際の呼び出しは以下から始まります:

$system = 新しい Java("java.lang.System");//JAVA でクラスを初期化します。主な操作は Java クラスのインスタンスを作成することです。Java クラスの最初のパラメータは JAVA open です。 送信されるクラスの名前にはパッケージ パスが含まれており、そのパスは JAVA でパッケージをインポートする形式を表します。 JAVA のクラスでコンストラクターを使用する必要がある場合は、2 番目のパラメーターを使用できます。
print "Java version=".$system->getProperty("java.version")." n"; print "Java ベンダー=".$system->getProperty("java.vendor")." nn"; 印刷する "OS=".$system->getProperty("os.name")." ".? $system->getProperty("os.version")." について ".$system->getProperty("os.arch").";

?>

自分で開発したクラスを呼び出すには、クラスがパブリック型である必要があります。呼び出されるメソッドもパブリック型である必要があります。

例: ta.java

パブリッククラス ta

{

?public static void main(String[] args)
?{
??System.out.println("Hello World!");
?}
?public String ts()
?{
??return "from ts";
?}
}

PHP の場合

$ta? = 新しい java("ta");


echo java_values($ta->ts());//「ts から」を出力

//Java クラスのインスタンスから返された値を処理するには、java_values 関数を使用することをお勧めします。

----------------------------------------------- --- --------

3721 に関係なく、最初に次のコード (java.php) を実行します。
$java = new java("java.lang.System");
echo $java->getProperty("os.name");
?>
結果は次のようになります:
致命的エラー: 存在しないクラスをインスタンス化できません: c:apachehtdocsjava.php の 3 行目

の java これは当然の結果です(笑)。 PHP は Java を呼び出したいので、論理的には 3 つのものが必要です。 1 つ目は PHP 自身の「レシーバー」、
2 番目は Java 仮想マシンで、3 番目はもちろんデフォルトの Java クラスです。
以上の準備が完了して初めてphpでjavaが使えるようになります!以下は私が構成したプロセスの一部です。

php.ini ファイルを見つけます。私の php.ini ファイルは c:apachephp の下にあります (他の人のファイルは c:winit または他の場所にある可能性があります)。
php.ini をメモ帳で開き、java.
という文字を検索しました。 まず、extension=php_java.dll の前のセミコロンを削除します。 「インスタンスを作成できません...」が表示されない場合は、java.php を実行します
エラーは、最初のステップが成功したことを意味します。

私の手術の結果は
です 致命的なエラー: Java ライブラリ c:jdkjrebinhotspotjvm.dll をロードできません。エラー: 指定されたモジュールが見つかりません。 c:apachehtdocsjava.php の 3 行目

;java.library = c:jdkjrebinhotspotjvm.dll を見つけ、java.library の前のセミコロンを削除して、
に変更しました。 java.library = c:jdk1.3jrebinhotspotjvm.dll

得られた結果は次のとおりです:
致命的なエラー: java.lang.NoClassDefFoundError: c:apachehtdocsjava.php の 3 行目

の net/php/reflect 最後に java.class.path を見つけて変更を完了します。結果は次のようになります:
Windows 2000

はは、設定は成功しました!
私の構成は次のとおりです:
[Java]

拡張子=php_java.dll

java.library = c:jdk1.3jrebinhotspotjvm.dll

java.class.path = .javaphp_java.jar

java.library.path = .extensions
java.home = c:jdk1.3
注: java.library.path は、php_java.dll が配置されているディレクトリへのパスである必要があります。

要約すると、PHP が Java を呼び出すには、論理的に 3 つのものが必要です。 1 つ目は、php_java.dll と呼ばれる PHP 独自の「レシーバー」です。
2 つ目は Java 仮想マシンで、ここでは jvm.dll と呼ばれます。 3 番目はもちろんデフォルトの Java クラスで、ここでは php_java.jar.

です。 したがって、特に設定に関して言えば、これら 3 つは拡張機能、java.library および java.class.path に対応します。
それでもカスタム Java クラスを使用したい場合はどうすればよいでしょうか?答えは、次のように java.class.path を変更できることです
例: java.class.path=".javaphp_java.jar;c:myclass"。引用符があり、セミコロンで区切られていることに注意してください。私のクラスはどこですか
「カスタム Java クラス」が配置されるディレクトリへのパス。 PHP で Java クラスを使用する場合、PHP デソーバーは
です。 php_java.jar と myclass ディレクトリを探します。

最後に、別の「完全かつ十分な」構成を示します:

[Java]

拡張子=php_java.dll

java.library = c:jdk1.3jrebinhotspotjvm.dll

java.class.path=".javaphp_java.jar;c:myclass"

;java.library.path = .extensions
;java.home = c:jdk1.3

java.library.path の前のセミコロンを削除した場合、その値は extension_dir と同じ値を持つ必要があります。ここでは、それらはすべて .extensions です。
extension_dir はすべての php 拡張ライブラリが配置されているディレクトリへのパスであり、java.library.path は php_java.dll が配置されているディレクトリへのパスであるためです。ということで
だからこそこのような要件があるのです。したがって、論理的には、java.library.path は冗長です。また、java.home はコメントアウトされていても正常に実行できるため、
また冗長です。なぜなら、根本的な理由は「論理的に必要であり、必要なのは 3 つだけである」という同じ文だからです。

このように、私の構成は「完全かつ十分」です。
「完全」とは、上記の構成が完全に十分であることを意味し、「十分な」とは、上記の構成に冗長なコンポーネントがないことを意味します。
「完全かつ十分」とは、私の構成がそれ以上でもそれ以下でもなく、適切な構成ソリューションが見つからないことを意味します。
―はは、夏が来た、みんなが私のメロンを買いに来てるよ。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート