在網上找了一個用java寫的計算詞語相似性的程式,但是想在php中去調用它,所以這兩天就研究了一下在php中調用java類的方法。這裡要感謝http://blog.sina.com.cn/s/blog_51a5e5f40100cxie.html這篇文章的作者,我主要是借鑒這篇文章去做的,期間也遇到了很多問題,最後在師弟kevin的協助得以解決,真的非常感謝他。廢話少說,進入正題。
我的整個配置環境如下:
OS:win7
apache:2.2
PHP:5.2
JDK:1.6
php-java-bridge和java.inc: 5.5.2 :http://sourceforge.net/projects/php-java-bridge/files/
php-java-bridge的配置過程如下:
將下載的JavaBridge.jar放到php的ext目錄下,同時雙擊運行,並且根據選擇的連接埠號碼相應修改java.inc中的#define ("JAVA_HOSTS", "127.0.0.1:8787")為define ("JAVA_HOSTS", "127.0.0.1:選擇的連接埠號碼"),注意去掉前面的#號。
編寫自己的Java類,實現PHP調用自訂的Java類:
首先編寫java類源檔案,命名為Test.java,源碼如下:
public class Test
{
private String name = "";
//setter and getter
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
//加法
public float add(float num1, float num2)
{
return num1 + num2;
}
}
編寫完類,將Test.java編譯產生class檔案,通過JavaBridge來調用我們需要打成jar包,在cmd下執行:jar cf Test.jar Test.class命令打包產生Test.jar包。將產生的jar包拷貝到apache的web應用根目錄之下,我這裡放到phpjava目錄,同時將java.inc也拷到該目錄下。接下來我們就可以在PHP中調用了,編寫test.php檔案放入phpjava目錄,代碼如下:
PHP代碼:
<?php
require_once("Java.inc"); //必須包含的設定檔
java_require("Test.jar"); //引用包含的jar包
$test = new Java("Test"); //產生執行個體
$test->setName("哈哈,PHP調用JAVA的方法!"); //後面的調用就跟在php中調用類方法一樣
echo "調用類Test的getName方法,傳回值為:".$test->getName()."<br>";
echo "調用Test的add方法,傳回值為:".$test->add(11.2, 15.7);
?>
運行輸出結果為:調用類Test的getName方法,傳回值為:哈哈,PHP調用JAVA的方法!
調用Test的add方法,傳回值為:26.9
注意問題:1.比較高版本的JavaBridge.jar不支援java_require()方法,不知道什麼原因,所以我用了低一點的版本;2.apache的版本也是一個問題,有的版本的apache使得輸出結果為Object id #XX;3.運行時必須開啟JavaBridge.jar;4.php輸出時有時中文會是亂碼,這時將php程式檔案儲存為utf-8格式,同時令網頁中的charset=UTF-8即可。