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