ホームページ  >  記事  >  バックエンド開発  >  PHP と Java_PHP 間の通信を実装する方法 チュートリアル

PHP と Java_PHP 間の通信を実装する方法 チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:25:58888ブラウズ

出身地:

私は最近、電子商取引プラットフォームとオンライン バンキングを統合する小さなものを作成しました。このプログラムはオープンソースの Ecmall であり、提供されるドキュメントは非常に完全です。オンライン バンキングで使用される検証。このライブラリには Java と C のみが含まれています。私はまだ Java に精通しているため、署名と検証のインターフェイスとして Java を使用することにしました。

方法:

実際、インターネット上には php と java の間の相互作用に関する情報がかなりたくさんあります。一般的に言えば、実際にはいくつかの方法があります:

•PHP は、exec や system などのコマンドを通じてコマンドラインを直接呼び出し、Java Hello タイプで Java プログラムを実行します。ただし、欠点は明らかであり、Java クラスのさまざまなメソッドとうまく統合できません。この方法で得られた最終的な実行結果も行数が制限されているため、破棄されます。
•PHP と Java は WebService を介して通信します。Java 側で関連する WebService を開き、PHP が XML または JSON を介して Java の WebService を呼び出すようにします。ただし、この方法はより一般的であり、実装できる機能も高度にカスタマイズ可能です。欠点は非常に明白です
• Java 側で関連するメッセージを公開するには TomCat サーバーをインストールする必要があります
• WebService は証明書を作成し、署名と署名検証プロセスに関連するセキュリティ証明書を作成する必要があります
• PHP は PHP-JAVA-BRIDGE モジュールをPHPとJava間の通信を実現するこのモジュールの設定とインストールは比較的簡単なので、PHPとJava間の通信にはこのモジュールを使用することにしました

第一歩

Java環境とPHP環境のインストール PHP環境はCentOS上にYUMを使用してインストールします

yum インストール java
yum インストール yum インストール java*jdk*devel*

java-version をテストします。次の出力のような結果があれば、Java 環境は正常にインストールされています。

コードをコピーします コードは次のとおりです:
Javaバージョン「1.7.0_25」
OpenJDKランタイム環境(rhel-2.3.10.4.el6_4-x86_64)
OpenJDK 64ビットサーバーVM(ビルド23.7) -b01、混合モード)

ステップ 2

php-java-bridgeモジュールをコンパイルしてインストールします

パッケージをダウンロード:

PHP-JAVA-BRIDGE4.0 このバージョンは4.0です。最新バージョンは6です。sourceforgからダウンロードできますが、6の使い方は4の使い方とは少し異なるようです

コンパイルしてインストールします:

php-java-bridgeを解凍し、php-java-bridgeのディレクトリに入り、php-java-bridgeをphp拡張機能にコンパイルします



コードをコピーします コードは次のとおりです:
tar xzvf php -java- Bridge_4.0.1.orig.tar.gz
cd php-java-bridge
phpize
./configure --disable-servlet --with-java= --with-php-config=/usr/local// php/bin /php-config
make
make install

•実行後にphpizeコマンドが無効な場合は、yum install php-develで解決できます

•configureでは、javaパラメータは、phpでは、php-configの特定のディレクトリであるjdkとjreのパスに入力されます。
•コンパイルが完了すると、java.soファイルとJavaBridge.jarがphpのlib/php/extensions/no-debug-non-zts-20060613に追加されます

ステップ 3

関連するパラメータを設定します

php.ini ファイルを開き、最後に次のパラメータを追加します:

コードをコピーします コードは次のとおりです:
extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/java.so"
[ジャワ]
java.java_home="/usr/lib/jvm/java-1.7.0-openjdk.x86_64"

java.java="/usr/lib/jvm/java-1.7.0-openjdk.x86_64/jre/bin/ java"
java.log_file="/var/log/php-java-bridge.log"
java.classpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ JavaBridge.jar"
java.libpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613"
java.log_level="2"

mod_php モードで実行している場合は、Apache を再起動します

fast_cgi モードで実行されている php の場合は、php-fpm と nginx または Apache サーバーを再起動します

ステップ 4

テスト

コードをコピーします コードは次のとおりです:
phpinfo();


が実行結果に表示されます


PHP と Java_PHP 間の通信を実装する方法 チュートリアル 拡張機能が正しくインストールされ、適切に動作していることを証明します。

demo1 (Java標準クラスの呼び出し)

コードをコピーします コードは次のとおりです:
$system=new Java("java.lang.System");
print "Java version=".$system-> ;getProperty(" java.version")." ";
$str=new Java("java.lang.String");
echo $str;

demo2 (カスタムクラスの呼び出し)

/data ディレクトリに新しいテスト ディレクトリを作成し、テストとして Hello.java ファイルを作成します

コードをコピーします コードは次のとおりです:

public class Hello
{
public static void main(String[] args)
{
System.out.println("php java Bridge test");
public String getHi(){ return "こんにちは、sudt linux メンバーの皆さん";

}
}


コードをコピーします コードは次のとおりです:
javac Hello.java
java Hello
jar cvf hello.jar Hello.class


Hello.class を jar パッケージにパッケージ化した後、PHP で Java クラスをインスタンス化することで getHi() メソッドを直接呼び出すことができます。

コードをコピーします コードは次のとおりです:
ini_set('display_errors', 1);
java_require('/data/test/hello.jar');
$hello = new Java('こんにちは');
$hi = $hello->getHi();
echo $hi;
$php_hi = (文字列) $hi;
var_dump($php_hi);


実行結果:

コードをコピーします コードは次のとおりです:
[o(String):"こんにちは、すべてのsudt linuxメンバー"]
string(27) "こんにちは、すべてのsudt linuxメンバー"


注意すべき点がいくつかあります:

1. Java の public String getHi() では public を省略することはできません。省略しないと、デフォルトの getHi() メソッドが private になり、PHP で呼び出すことができません。

2. PHP で Java クラスを呼び出した後、返される結果は Java の o(変数) であるため、強制型変換を行って PHP 変数の型に変換して使用するのが最善です。

3. java_require() を使用するときは、php.ini で設定した libpath に呼び出す jar パッケージを置く必要がないように、絶対パスを使用するのが最善です。

4. new Java() を使用する場合、クラス名の最初の文字を大きくする必要があります。そうしないと、エラーが報告され、Java はクラスを見つけることができません。

http://www.bkjia.com/PHPjc/824892.html

本当http://www.bkjia.com/PHPjc/824892.html技術記事起源: 私は最近、電子商取引プラットフォームとオンライン バンキングを統合する小さなものを作成しました。このプログラムはオープン ソースの Ecmall であり、提供されるドキュメントも非常に充実しています。唯一の問題は、インターネットであることです。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。