? ? ? ?最近工作中用到第三方的sdk包木人,對(duì)方提供c伟件、java徘公,由于會(huì)java待侵,故選擇了java的sdk。然后網(wǎng)絡(luò)上搜索到了javabridge這個(gè)工具疾棵,可以方便php調(diào)用java。
javabridge提供了多種與不同的容器搭配的啟動(dòng)方法,本著簡(jiǎn)單且僅供本地使用益老,我直接用了java -jar JavaBridge.jar SERVLET_LOCAL:8080這樣的命令啟動(dòng)。
先提條件:
1寸莫、安裝好jdk(javabridge是要求1.4或更高捺萌,我機(jī)器是直接裝的jdk8,可以通過(guò)命令行窗口輸入java -version確保java已安裝且是正確的版本)
2储狭、安裝好php環(huán)境(我機(jī)器裝的php7.13互婿,可以通過(guò)php -version查看信息)
步驟:
1捣郊、去http://php-java-bridge.sourceforge.net/pjb/download.php下載?JavaBridge.jar,Java.inc兩個(gè)文件即可(不用下載JavaBridge.war去tomcat解壓)慈参;
2呛牲、對(duì)JavaBridge.jar解壓(我常用7z,rar沒(méi)試過(guò))驮配,修改解壓出來(lái)的META-INF/MANIFEST.MF娘扩,在Class-Path: log4j.jar后加入依賴的包,比如我需要加lib/httpclient.jar壮锻,最后是這樣的
Class-Path: log4j.jar lib/httpclient-4.1.3.jar
(注意琐旁,依賴的jar包,多個(gè)jar之間是用空格分隔猜绣,還需要注意引用的路徑是相對(duì)路徑)
3灰殴、將修改的好的文件重新打包成jar
? ? ?3.1? 先命令行cd到j(luò)ar的解壓包目錄
? ? ? 3.2 執(zhí)行:jar -cMf JavaBridge.jar .? ?(意思就是把當(dāng)前目錄下的文件都打進(jìn)JavaBridge.jar,并且不生成新的清單文件)
4掰邢、整個(gè)javabridge的文件結(jié)構(gòu)如下圖:
5牺陶、運(yùn)行javabridge
執(zhí)行命令:?java -jar JavaBridge.jar SERVLET_LOCAL:8080
其中端口號(hào)找到本機(jī)未使用的1024以上的端口號(hào)即可
6、php端驗(yàn)證辣之,新建javabridge.php文件
<?php
define("JAVA_HOSTS", "127.0.0.1:8080");
//此處端口與第五步的端口對(duì)應(yīng)
define("JAVA_LOG_LEVEL", 2);
require_once "Java.inc";
//將第一步的下載的Java.inc與當(dāng)前編輯的php文件放在同一層目錄
java_set_file_encoding("UTF-8");
try {
? ? $props = java("java.lang.System")->getProperties();
? ? $array = java_values($props);
? ? foreach($array as $k=>$v) {
? ? ? ? echo "$k=>$v"; echo "<br>\n";
}
? ? echo "<br>\n";
? ? class MyClass {
? ? ? ? function toString() { return "hello PHP from Java!"; }
}
? ? $javaObject = java_closure(new MyClass());
? ? echo "PHP says that Java says: "; echo $javaObject;? echo "<br>\n";
? ? echo "<br>\n";
? ? echo java("php.java.bridge.Util")->VERSION; echo "<br>\n";
} catch (JavaException $ex) {
? ? echo "An exception occured: "; echo $ex; echo "<br>\n";
}
7掰伸、javabridge.php文件目錄下執(zhí)行? php javabridge.php,輸出信息即可證明php調(diào)用java是ok的,現(xiàn)在可以調(diào)用java下的類和方法了怀估,enjoy狮鸭!