Debian Linux 安裝 php-java-bridge (使用deb安裝)

http://blog.longwin.com.tw/2008/09/debian-install-php-java-bridge-deb-2008/

在 PHP 裡面跑 Java 的程式(*.jar) 或 Java 的 Library, 需要安裝 php-java-bridge.

安裝步驟
  1. 安裝 Java JDK/JRE
  2. 安裝 PHP / Apache 相關程式
  3. 安裝 php-java-bridge 所需的相依 package
  4. 設定 / 測試
到 PHP/Java Bridge 下載安裝檔: (下述兩個都需要下載)
  • Linux Debian Packages - php-java-bridge-j2ee_5.2.2-1_all.deb
  • Linux RedHat/Fedora source - php-java-bridge_5.2.2.tar.gz

要安裝 php-java-bridge-j2ee_5.2.2-1_all.deb 前, 若直接 dpkg -i php-java-bridge-j2ee_5.2.2-1_all.deb 安裝會出現下述: (然後就會出現很難移除 Package 的狀況)

dpkg:相依關系問題使得 php-java-bridge-j2ee 的設定工作不能繼續:
php-java-bridge-j2ee 相依於 sun-java6-jre﹔然而:
套件“sun-java6-jre”沒有安裝。
php-java-bridge-j2ee 相依於 tomcat5﹔然而:
套件“tomcat5”沒有安裝。
php-java-bridge-j2ee 相依於 liblucene-java﹔然而:
套件“liblucene-java”沒有安裝。
php-java-bridge-j2ee 相依於 libitext-java﹔然而:
套件“libitext-java”沒有安裝。
dpkg:處理 php-java-bridge-j2ee (--install)時出錯:
相依關系問題 - 仍未被設定
在處理時有錯誤發生:
php-java-bridge-j2ee
下列的套件驗證失敗!   sun-java6-jre sun-java6-bin

若已經做此事, 可以參照此篇修復: Debian Linux deb 安裝失敗導致 Package 無法移除 解法

先來安裝 php-java-bridge-j2ee 所需的 Package
  • vim /etc/apt/sources.list

    deb http://www.backports.org/debian etch-backports main non-free # 加此行

  • vim /etc/apt/preferences

    # 避免更新系統時自動安裝了backports中的套件
    # 只有打 "apt-get -t etch-backports install package_name" 才會安裝backports提供的版本
    Package: *
    Pin: release a=etch-backports
    Pin-Priority: 999

  • 增加 GPG Key: GPG error: http://www.backports.org etch-backports Release: 由於沒有公鑰,下列簽名無法進行驗證: NO_PUBKEY EA8E8B2116BA136C

    # gpg --keyserver hkp://subkeys.pgp.net --recv-keys EA8E8B2116BA136C
    # gpg --export | apt-key add -

    wget http://www.backports.org/debian/archive.key
    sudo apt-key add archive.key
    rm -fr archive.key

安裝基本程式
  • apt-get install apache2 php5 php-pear
安裝 java bridge 所需要相關 Package
  • apt-get install tomcat5 liblucene-java libitext-java php5-dev re2c sun-java6-jre sun-java6-jdk
  • ln -s /usr/lib/jvm/java-6-sun-1.6.0.07 /usr/local/java
安裝 php-java-bridge-j2ee Package
  • dpkg -i php-java-bridge-j2ee_5.2.2-1_all.deb
產生 java.so for php extension 和 需要的 PHP Library
  1. tar zxvf php-java-bridge-5.2.2.tar.gz
  2. cd php-java-bridge-5.2.2
  3. phpize
  4. ./configure --with-java=/usr/local/java --disable-backend
  5. make # 產生 java.so, /home/jon/php-java-bridge-5.2.2/modules
  6. cp -r php-java-bridge-5.2.2/server/META-INF/java/ /usr/share/php/ # PHP 程式連接時, 需要的 JavaBridge.inc 於此.
設定 PHP java-servlet.ini

vim /etc/php5/conf.d/java-servlet.ini

[java]
;java.hosts     = 127.0.0.1:8080 ; 原本這行的 8080 改成 8180
java.hosts     = 127.0.0.1:8180
java.servlet   = On ;; Off, On or User
java.java_home = /usr/local/java/bin/
java.log_level = 2
;java.class.path = /usr/lib/php5/20060613+lfs/
;java.library.path = /usr/lib/php5/20060613+lfs/:/usr/local/java/bin/
;java.java = /usr/local/java/bin/java

extension = java.so ; 再加上這行, 讓 PHP extension 載入 java.so

重新啟動
  1. /etc/init.d/tomcat5 restart
  2. /etc/init.d/apache2 restart
測試
  1. php -m | grep java # 會看到 java
  2. vim phpinfo.php

    <?php
    phpinfo(); // phpinfo 會看到如下的 Java 資訊
    // java
    // java support Enabled
    // java bridge 5.2.2
    // java server 127.0.0.1:8180
    // java status running
    ?>

  3. vim test-java-hello.php

    <?php
    require("java/JavaBridge.inc");
    $str = new java("java.lang.String","hello");
    echo $str; // 會看到 hello
    ?>

  4. vim test-java-bridge.php

    <?php
    require("java/JavaBridge.inc"); // /usr/share/php/java/JavaBridge.inc

    // get instance of Java class java.lang.System in PHP
    $system = new Java('java.lang.System');

    // demonstrate property access
    echo 'Java version=' . $system->getProperty('java.version') . '<br />';
    echo 'Java vendor=' . $system->getProperty('java.vendor') . '<br />';
    echo '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");
    echo $formatter->format(new Java('java.util.Date'));
    // 會看到:
    // Java version=1.4.2
    // Java vendor=Kaffe.org project
    // OS=Linux 2.6.18-4-686 on i386
    // 星期六, 九月 13, 2008 at 8:56:58 上午 GMT+08:00
    ?>

相關網頁

註: PHP/Java Bridge 使用的檔案編碼都是 UTF-8, 若有特別的編碼, 要用: java_set_file_encoding("ISO-8859-1"); 來指定.

posted @ 2013-06-09 10:50  adodo1  Views(164)  Comments(0Edit  收藏  举报