PHP用のJava環境を設定する

Jun 13, 2016 pm 01:01 PM
dll java library path php

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 つだけである」という同じ文だからです。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

See all articles