Windows 環境三步驟配置
- 安裝 JDK,設定
PATH 包含 %JAVA_HOME%\bin
- 修改 php.ini:
[Java]
extension=php_java.dll
java.library.path = "C:\php\extensions"
java.class.path = "C:\php\extensions\php_java.jar;C:\myclasses"
- 驗證測試:
<?php
$sys = new Java('java.lang.System');
echo 'Java version: ' . $sys->getProperty('java.version') . '<br>';
echo 'OS: ' . $sys->getProperty('os.name') . ' ' . $sys->getProperty('os.version') . '<br>';
$fmt = new Java('java.text.SimpleDateFormat', 'EEEE, MMMM dd, yyyy');
echo $fmt->format(new Java('java.util.Date'));
?>
預期輸出 Java 版本、廠商、作業系統、格式化日期。
自訂 Java 類別開發與呼叫
1. 編寫 Java 類別 PhpTest.java
package com.example;
public class PhpTest {
public String foo = "initial";
public String test(String str) {
return empty(str) ? "Empty input" : "Received: " + str;
}
public String getFoo() { return "foo = " + foo; }
}
2. 編譯並部署
javac -d C:\myclasses PhpTest.java
# 生成 C:\myclasses\com\example\PhpTest.class
3. PHP 呼叫
<?php
$obj = new Java('com.example.PhpTest');
echo $obj->test('Hello from PHP') . '<br>'; // Received: Hello from PHP
echo $obj->getFoo() . '<br>'; // foo = initial
$obj->foo = 'modified by PHP';
echo $obj->getFoo(); // foo = modified by PHP
?>
Linux (RedHat 9) 編譯安裝 PHP + Java 支援
- 安裝 JDK 至
/usr/java/j2sdk1.4.1_03,設定 /etc/profile
- 編譯 Apache:
./configure --enable-module=so --enable-shared=max
- 編譯 PHP:
./configure --with-apxs=/usr/local/apache/bin/apxs --with-java=/usr/java/j2sdk1.4.1_03
- 配置
php.ini:
[Java]
java.class.path = /usr/local/php/lib/php/php_java.jar
java.home = /usr/java/j2sdk1.4.1_03
java.library = /usr/java/j2sdk1.4.1_03/jre/lib/i386/libjava.so
java.library.path = /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
extension=java.so
- 關鍵符號連結:
ln -s java.so libphp_java.so
- 設定
LD_LIBRARY_PATH 包含 JDK jre/lib/i386 及 server 目錄
- 重啟 Apache,測試
new Java('java.lang.System')
常見問題排查
ClassNotFoundException:檢查 java.class.path 包含類別目錄
UnsatisfiedLinkError:LD_LIBRARY_PATH 缺少 libjava.so、libjvm.so 路徑
- 記憶體不足:調整
-Xmx 參數於 java.options
- 編碼亂碼:確保 PHP、Java、資料庫、瀏覽器編碼一致(建議 UTF-8)