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

在 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"); 來指定.


關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix。將永久鏈結加入書籤。

Debian Linux 安裝 php-java-bridge (使用deb安裝) 有 2 則回應

  1. 小胖 說道:

    我按照上述方法實做
    也出現了java的相關訊息
    但卻在test-java-hello.php測試時
    出現了下列訊息
    Warning: fread() [function.fread]: Length parameter must be greater than 0 in /usr/share/php/java/Protocol.inc on line 328
    protocol error: , Invalid document end at col 1. Check the back end log for OutOfMemoryErrors...
    不知道大大有沒有解

  2. Tsung 說道:

    Debian package 和 你 download 下來的 tar.gz 的版本都一致嗎??

發表迴響