2009年8月7日 星期五

PHP 直接去call java類別

偶然之間看到了PHP呼叫使用java 類別的方法
就是用一套名為 PHP/Java Bridge的lib
就姑且研究了一下

原文章http://www.coolcode.cn/?action=show&id=166

呵呵!長長一串有夠複雜 舊版的安裝很花工夫
不過別擔心 新版的安裝方法已經減化很多了
在此只介紹新版的安裝法(舊版的大概也難找了)

首先請到官網下載php-java-bridge_5.4.4.2 這是目前的版本
不直接放載點,因為舊版的好像會被拿掉,請以官方為準
http://php-java-bridge.sourceforge.net/pjb/how_it_works.php

點download之後請點選php-java-bridge_5.4.4.2_documentation.zip下載



解壓之後,應該會看到一個JavaBridge.war
請在把他解壓縮,之後請放到localhost根目錄下



之後能就能(?)快樂的用PHP去call java的class了

用官網給的範例


<?php
require_once("http://localhost:8080/JavaBridge/java/Java.inc");
$System = java("java.lang.System");
echo $System->getProperties();
?>


看到沒有,簡單include就可以套用java類別了 哇哈哈

當然不會這麼簡單,執行後出現錯誤訊息


...URL file-access is disabled in the server configuration....

要include遠端檔案,必須開啟PHP權限,請修改php.ini的allow_url_fopen跟allow_url_include

allow_url_fopen = On
allow_url_include = On

如果找不到的話請自己補上,像我的php.ini就沒有allow_url_include選項

之後執行,又出現一個錯誤訊息

The requested method PUT is not allowed for the URL /JavaBridge/JavaBridge.phpjavabridge........
Check the back end log for OutOfMemoryErrors......


這是因為他新版會開一個proxy來代理java的動作,必須先執行他的JavaBridge.jar這隻程式
沒意外的話應該會放在JavaBridge\WEB-INF\lib下面

想想也是,他include一個遠程檔案,但是我並沒有那個server,所以他應該會在開一個proxy才對

程式執行畫面

範例是用8080port 就選8080port吧
因為我8080已經用過了 所以他會從8081開始

之後再執行就沒問題啦

沒有留言: