php調(diào)用自己java程序的方法詳解
本文實(shí)例講述了php調(diào)用自己的java程序?qū)崿F(xiàn)方法。分享給大家供大家參考,具體如下:
最開始要裝jdk這個(gè)就不用說了,我裝的是java ee 5+jdk
1.把下載的php-java-bridge_5.2.2_j2ee.zip解壓出來,里面有個(gè)JavaBridge.war 直接用winrar打開,到WEB-INF/lib/JavaBridge.jar 把這個(gè)jar包拷到 你的php目錄的ext/下。
2.打開war包,里面有個(gè)java的文件夾,把他全部拷到你的PHP項(xiàng)目下,如/demo/java
3.目前的版本是VMBridge了,要php調(diào)用java類,要先啟動(dòng)JavaBridge,
命令行下調(diào)用java –jar JavaBridge.jar或者雙擊JavaBridge.jar,在彈出的窗口中選擇監(jiān)聽端口8080
為了以后啟動(dòng)方便,我在ext/下新建了一個(gè)bat文件內(nèi)容如下:
@echo off start javaw -jar JavaBridge.jar
保存后,雙擊啟動(dòng) 會(huì)有一個(gè)提示框選擇vmbridge port 默認(rèn)8080,直接點(diǎn)ok就行了
4.在/demo/下新建test.php內(nèi)容如下:
<?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'));
?>
5.啟動(dòng)apache,在瀏覽器中查看 http://localhost/demo/test.php
會(huì)看到如下信息:
Java version=1.6.0_10
Java vendor=Sun Microsystems Inc.
OS=Windows Vista 6.0 on x86
星期日, 十一月 23, 2008 at 4:31:49 下午 中國標(biāo)淮時(shí)間
自定義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));
}
}
}
}
生成為JAR,拷貝到D盤下。
/demo/index2.php
<?
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";
?>
在瀏覽器中查看 http://localhost/demo/index2.php
方法二:php_java.dll 需要配置php.ini,新版的php-java-bridge都沒有dll文件
首先確定你的PHP和Apache伺服器及JDK(or JRE也可)都已安裝完成
上網(wǎng)下載php-java-bridge(自行找戴點(diǎn) or http://sourceforge.net/project/showfiles.php?group_id=117793 )
將下載回來的 php-java-bridge解壓縮,解壓后文件夾里會(huì)有一個(gè)JavaBridge.war,再同樣將這個(gè)JavaBridge.war解壓縮(win rar即可解)
解壓后可從 WEB-INF文件夾里的cgi文件夾找到j(luò)ava-x86-windows.dll,及WEB-INF文件夾里的lib文件夾找到JavaBridge.jar
將java-x86-windows.dll和JavaBridge.jar 複制到PHP的外掛文件夾(我這邊是C:/AppServphp/ext),并將java-x86-windows.dll改成php_java.dll
修改php.ini檔案
如果php.ini原本沒有以下內(nèi)容,請(qǐng)自行加上,如果原本就有以下內(nèi)容,請(qǐng)修改成如下[我使用的是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"
重新起動(dòng)Apache,查看phpinfo
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
看倒數(shù)第二項(xiàng) java status的狀態(tài)是不是not running (這是因?yàn)槟銢]有啟動(dòng)JavaBridge.jar)。如果變成running <—-代表JavaBridge.jar已啟動(dòng),已可正式使用php-java-bridge
如果沒有啟動(dòng)則執(zhí)行:
因?yàn)椴豢赡苊看伍_機(jī)都手動(dòng)去啟動(dòng)JavaBridge.jar
所以我們寫一個(gè)批處理,內(nèi)容如下
@echo off start javaw -jar JavaBridge.jar
把它存成phpJavaBridge.bat,同樣放在PHP的外掛文件夾里(這里是C:AppServ/php/ext)
把該檔建立捷徑,把建立好的捷徑放到啟動(dòng)里(這里是C:/Documents and Settings/All Users/「開始」/功能表/程序啟動(dòng))
這樣一來,以后每次開機(jī)后就會(huì)自動(dòng)啟動(dòng)C:AppServphpext 文件夾里的phpJavaBridge.bat
簡單范例
<?
$system=new Java('java.lang.System');
echo "java版本".$system->getProperty('java.version')."<BR>";
echo "發(fā)行廠商".$system->getProperty('java.vendor')."<BR>";
echo "作業(yè)系統(tǒng)版本".$system->getProperty('os.name')."<BR>";
echo "java版本".$system->getProperty('os.version')."<BR>";
echo "java版本".$system->getProperty('os.arch')."<BR>";
?>
或者在php-java-bridge中找到test.php,http://localhost/test.php查看效果
<?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.INI中加入extension=PHP_java.dll,并在[java]中,設(shè)定好java.class.path,讓它指向 PHP_java.jar,如果你使用新的JAVA類,你也應(yīng)該存入這個(gè)路徑,在這篇例子中,我們使用c:myclasses這個(gè)目錄。
測(cè)試環(huán)境,創(chuàng)建如下PHP文件:
<?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";
?>
如果你正確安裝了,你將會(huì)看到以下信息:
Java vendor=Sun Microsystems Inc.
OS=Windows 95 4.10 on x86
Wednesday, October 18, 2000 at 10:22:45 AM China Standard Time
理解如何調(diào)用JAVA很重要,下一步我們就要?jiǎng)?chuàng)建自己的JAVA文件,讓PHP來調(diào)用,JAVA文件的java.class.path很重要
創(chuàng)建和使用你自己的JAVA類 [注意大小寫]
創(chuàng)建你自己的 JAVA 類非常容易。新建一個(gè) phptest.java 文件,將它放置在你的 java.class.path 目錄下【 c:\myclasses】,文件內(nèi)容如下:
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));
}
}
}
}
創(chuàng)建這個(gè)文件后,我們要編譯好這個(gè)文件,在 DOS 命令行使用 javac phptest.java 這個(gè)命令。
為了使用 PHP 測(cè)試這個(gè) JAVA 類,我們?cè)趙eb目錄下創(chuàng)建一個(gè) phptest.php 文件,內(nèi)容如下:
<?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 是一種強(qiáng)制類型語言,而 PHP 不是,這樣我們?cè)趯⑺鼈內(nèi)诤蠒r(shí),容易導(dǎo)致錯(cuò)誤,于是我們?cè)谙騄AVA傳遞變量時(shí),要正確指定好變量的類型。如:$myj->foo = (string) 12345678; or $myj->foo = "12345678″;
這只是一個(gè)很小的例子,你可以創(chuàng)建你自己的 JAVA 類,并使用 PHP 很好的調(diào)用它!關(guān)鍵在于理解java.class.path目錄的重要性。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
分析php://output和php://stdout的區(qū)別
本篇文章給大家詳細(xì)分析了php://output和php://stdout的用法區(qū)別以及實(shí)例代碼分享,有需要的朋友可以參考學(xué)習(xí)下。2018-05-05
學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)訪問者模式(Visitor)
這篇文章主要介紹了php設(shè)計(jì)模式中的訪問者模式,使用php實(shí)現(xiàn)訪問者模式,感興趣的小伙伴們可以參考一下2015-12-12
CI框架中通過hook的方式實(shí)現(xiàn)簡單的權(quán)限控制
這篇文章主要介紹了CI框架中通過hook的方式實(shí)現(xiàn)簡單的權(quán)限控制,需要的朋友可以參考下2015-01-01
php使用ZipArchive函數(shù)實(shí)現(xiàn)文件的壓縮與解壓縮
這篇文章主要介紹了php使用ZipArchive函數(shù)實(shí)現(xiàn)文件的壓縮與解壓縮,需要的朋友可以參考下2015-10-10
PHP使用PDO訪問oracle數(shù)據(jù)庫的步驟詳解
POD擴(kuò)展是在PHP5中加入,該擴(kuò)展提供PHP內(nèi)置類 PDO來對(duì)數(shù)據(jù)庫進(jìn)行訪問,不同數(shù)據(jù)庫使用相同的方法名,解決數(shù)據(jù)庫連接不統(tǒng)一的問題。下面這篇文章主要給大家介紹了關(guān)于PHP使用PDO訪問oracle數(shù)據(jù)庫的步驟,需要的朋友可以參考下。2017-09-09
Ajax請(qǐng)求PHP后臺(tái)接口返回信息的實(shí)例代碼
今天小編就為大家分享一篇Ajax請(qǐng)求PHP后臺(tái)接口返回信息的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08

