この記事では主に、PHP が独自の Java プログラムを呼び出す方法を紹介します。PHP がサードパーティの JAR パッケージに基づいて Java プログラムを呼び出す方法と、DLL ダイナミック リンク ライブラリ ファイル拡張子を使用して Java フレンドを呼び出す方法について詳しく分析します。
詳細は以下の通りです。 最初にjdkをインストールする必要があるのは言うまでもありませんが、私はjava ee 5+jdk1をインストールしました。 ダウンロードしたphp-java-bridge_5を解凍します。 2.2_j2ee.zip があります。JavaBridge.war winrar で直接開き、WEB-INF/lib/JavaBridge.jar に移動し、この jar パッケージを php ディレクトリの ext/ ディレクトリにコピーします。
2. war パッケージを開きます。その中に Java フォルダーがあります。それをすべて PHP プロジェクト (例: /demo/java) にコピーします。PHP で Java クラスを呼び出す場合は、まず JavaBridge を起動し、 コマンド ラインから java –jar JavaBridge.jar を呼び出すか、JavaBridge.jar をダブルクリックして、ポップアップ ウィンドウでリスニング ポート 8080 を選択します 将来の起動の便宜のために、次の内容の新しいバット ファイルを ext/ の下に作成します:@echo off start javaw -jar JavaBridge.jar
<?php require_once("java/Java.inc"); header("content-type:text/html; charset=utf-8″); // get instance of Java class java.lang.System in PHP $system = new Java('java.lang.System'); $s = new Java("java.lang.String", "php-java-bridge config…<br><br>"); echo $s; // demonstrate property access print 'Java version='.$system->getProperty('java.version').' <br>'; print 'Java vendor=' .$system->getProperty('java.vendor').' <br>'; print 'OS='.$system->getProperty('os.name').' '. $system->getProperty('os.version').' on '. $system->getProperty('os.arch').' <br>'; // java.util.Date example $formatter = new Java('java.text.SimpleDateFormat', "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz"); print $formatter->format(new Java('java.util.Date')); ?>
コードをコピーします
php-java-bridge config… Java version=1.6.0_10
Javaベンダー=Sun Microsystems Inc.OS=Windows Vista 6.0 on x86
11月23日日曜日, 2008 at 4:31:49 PM Chinese Standard Time
カスタム JAR:
package ttt; public class phptest{ /** * A sample of a class that can work with PHP * NB: The whole class must be public to work, * and of course the methods you wish to call * directly. * * Also note that from PHP the main method * will not be called */ public String foo; /** * Takes a string and returns the result * or a msg saying your string was empty */ public String test(String str) { if(str.equals("")) { str = "Your string was empty. "; } return str; } /** * whatisfoo() simply returns the value of the variable foo. */ public String whatisfoo() { return "foo is " + foo; } /** * This is called if phptest is run from the command line with * something like * java phptest * or * java phptest hello there */ public static void main(String args[]) { phptest p = new phptest(); if(args.length == 0) { String arg = ""; System.out.println(p.test(arg)); }else{ for (int i = 0; i < args.length; i++) { String arg = args[i]; System.out.println(p.test(arg)); } } } }
<? require_once("java/Java.inc"); java_require("D://1.jar"); $myj = new Java("ttt.phptest"); echo "Test Results are <b>" . $myj->test("Hello World") . "</b>"; $myj->foo = "A String Value"; echo "You have set foo to <b>" . $myj->foo . "</b><br>\n"; echo "My java method reports: <b>" . $myj->whatisfoo() . "</b><br>\n"; ?>
方法 2: php_java.dll は php.ini (新しいバージョン) を構成する必要がありますphp- java-bridge 用の dll ファイルはありません
まず、PHP および Apache サーバーと JDK (または JRE も使用可能) がインストールされていることを確認してください
オンラインにアクセスして、php-java-bridge をダウンロードします (自分で見つけてください)または http://sourceforge.net/project/showfiles.php?group_id=117793 )ダウンロードした php-java-bridge を解凍すると、フォルダー内に JavaBridge.war が作成されますので、JavaBridge を解凍します。同様にwar(win rar(解凍可能))解凍後、WEB-INFフォルダー内のcgiフォルダーからjava-x86-windows.dllが、WEB-INFフォルダー内のlibフォルダーからJavaBridge.jarが見つかります。 INF フォルダー
Java を変更します。x86-windows.dll と JavaBridge.jar を PHP プラグイン フォルダー (私の場合は C:/AppServphp/ext) にコピーし、java-x86-windows.dll を php_java に変更します。 dll
php.iniファイルを修正します
php.iniに元々以下の内容がない場合は、ご自身で追加してください 元々以下の内容がある場合は、以下のように修正してください【JDKを使用しています】
extension=php_java.dll
[Java] ;java.java = "C:\jdk1.6.0_13\bin\java" java.class.path = "D:\php\ext\JavaBridge.jar;c:\myclasses" c:\myclasses可自定义,用来存放自己写的JAVA文件 java.java_home = "C:\jdk1.6.0_13\jre" java.library = "d:\jdk1.2.2\jre\bin\server\jvm.dll" java.library.path = "D:\php\ext"
java java support Enabled java bridge 3.0.8 java.java_home C:\jdk1.6.0_13 java.java C:\jdk1.6.0_13\bin\java java.log_file <stderr> java.log_level no value (use backend's default level) java.ext_java_compatibility Off java command C:\jdk1.6.0_13\bin\java -Djava.library.path=D:\php\ext -Djava.class.path=D:\php\ext/JavaBridge.jar -Djava.awt.headless=true php.java.bridge.JavaBridge INET_LOCAL:0 2 java status running java server 9267
@echo off start javaw -jar JavaBridge.jar
<? $system=new Java('java.lang.System'); echo "java版本".$system->getProperty('java.version')."<BR>"; echo "发行厂商".$system->getProperty('java.vendor')."<BR>"; echo "作业系统版本".$system->getProperty('os.name')."<BR>"; echo "java版本".$system->getProperty('os.version')."<BR>"; echo "java版本".$system->getProperty('os.arch')."<BR>"; ?>
<?php $system=new Java("java.lang.System"); print "Java version=".$system->getProperty("java.version")." <br>"; ?>
[java] extension=PHP_java.dll java.library.path=c:webPHP4extensions java.class.path="c:webPHP4extensionsjdk1.2.2PHP_java.jar;c:myclasses"
<?php $system = new Java("java.lang.System"); print "Java version=".$system->getProperty("java.version")." <br>n"; print "Java vendor=".$system->getProperty("java.vendor")." <p>nn"; print "OS=".$system->getProperty("os.name")." ". $system->getProperty("os.version")." on ". $system->getProperty("os.arch")." <br>n"; $formatter = new Java("java.text.SimpleDateFormat","EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz"); print $formatter->format(new Java("java.util.Date"))."n"; ?>
コードをコピーします
Java version= 1.2.2 Java ベンダー = Sun Microsystems Inc.
OS = Windows 95 4.10 on x86 2000 年 10 月 18 日水曜日、中国標準時午前 10 時 22 分 45 秒
次は、JAVA の呼び出し方法を理解することが重要です。ステップは、独自の JAVA ファイルを作成し、PHP でそれを呼び出すことです。JAVA ファイルの java.class.path は非常に重要です
大文字の使用に注意してください
]创建你自己的 JAVA 类非常容易。新建一个 phptest.java 文件,将它放置在你的 java.class.path 目录下【 c:\myclasses】,文件内容如下: 创建这个文件后,我们要编译好这个文件,在 DOS 命令行使用 javac phptest.java 这个命令。 为了使用 PHP 测试这个 JAVA 类,我们在web目录下创建一个 phptest.php 文件,内容如下:public class phptest{
/**
* A sample of a class that can work with PHP
* NB: The whole class must be public to work,
* and of course the methods you wish to call
* directly.
*
* Also note that from PHP the main method
* will not be called
*/
public String foo;
/**
* Takes a string and returns the result
* or a msg saying your string was empty
*/
public String test(String str) {
if(str.equals("")) {
str = "Your string was empty. ";
}
return str;
}
/**
* whatisfoo() simply returns the value of the variable foo.
*/
public String whatisfoo() {
return "foo is " + foo;
}
/**
* This is called if phptest is run from the command line with
* something like
* java phptest
* or
* java phptest hello there
*/
public static void main(String args[]) {
phptest p = new phptest();
if(args.length == 0) {
String arg = "";
System.out.println(p.test(arg));
}else{
for (int i = 0; i < args.length; i++) {
String arg = args[i];
System.out.println(p.test(arg));
}
}
}
}
<?php
$myj = new Java("phptest");
echo "Test Results are <b>" . $myj->test("Hello World") . "</b>";
$myj->foo = "A String Value";
echo "You have set foo to <b>" . $myj->foo . "</b><br>\n";
echo "My java method reports: <b>" . $myj->whatisfoo() . "</b><br>\n";
?>
如果你得到这样的警告信息:java.lang.ClassNotFoundException error ,这就意味着你的 phptest.class 文件不在你的 java.class.path 目录下。
注意的是 JAVA 是一种强制类型语言,而 PHP 不是,这样我们在将它们融合时,容易导致错误,于是我们在向JAVA传递变量时,要正确指定好变量的类型。如:$myj->foo = (string) 12345678; or $myj->foo = "12345678″;
这只是一个很小的例子,你可以创建你自己的 JAVA 类,并使用 PHP 很好的调用它!关键在于理解java.class.path目录的重要性。
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
以上がPHPが独自のJavaプログラムを呼び出す方法と例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。