PHP 透過 Java 擴充套件 (PHP 5.3 前內建,後需 PECL 安裝) 可在 PHP 腳本中實例化 Java 物件、呼叫方法、存取屬性,實現雙語言互操作。適用場景:既有 Java 業務邏輯庫、PDF 處理、加密演算法、規則引擎等。
C:\Java\jdk-17。JAVA_HOME=C:\Java\jdk-17Path 附加 %JAVA_HOME%\bin傳統 php_java.dll 已停止維護。**強烈建議使用 PHP/Java Bridge** (獨立 Java Servlet 容器 + PHP 通訊):
# 1. 下載 JavaBridge.war 部署至 Tomcat/Jetty (port 8080)
# 2. PHP 端安裝客戶端
composer require php-java-bridge/client
# 3. PHP 程式碼
require 'vendor/autoload.php';
$java = new Java('java.lang.System');
echo $java->getProperty('java.version');
; php.ini
extension=php_java.dll
[java]
java.library.path = "C:\Java\jdk-17\bin"
java.class.path = "C:\php\ext\php_java.jar;C:\my_java_classes"
java.home = "C:\Java\jdk-17"
java.library = "C:\Java\jdk-17\jre\bin\server\jvm.dll"
<?php
// 日期格式化 (Java SimpleDateFormat 功能強於 PHP date)
$fmt = new Java('java.text.SimpleDateFormat', 'yyyy-MM-dd HH:mm:ss Z');
$now = new Java('java.util.Date');
echo "Java 格式化時間: " . $fmt->format($now) . "\n";
// 集合操作
$list = new Java('java.util.ArrayList');
$list->add('PHP');
$list->add('Java');
$list->add('Python');
echo "List size: " . $list->size() . "\n"; // 3
// AES 加密 (Java JCE 無長度限制)
$cipher = new Java('javax.crypto.Cipher');
$cipher->init(
$cipher->ENCRYPT_MODE,
new Java('javax.crypto.spec.SecretKeySpec', '1234567890123456', 'AES')
);
$encrypted = $cipher->doFinal('敏感資料');
echo "加密結果 (Base64): " . base64_encode($encrypted) . "\n";
| 方案 | 延遲 | 穩定性 | 維護性 | 建議 |
|---|---|---|---|---|
| PHP Java 擴充 (進程內 JVM) | 低 (進程內) | 低 (JVM Crash 導致 PHP 進程死掉) | 低 (版本綁定嚴重) | **不推薦新專案** |
| PHP/Java Bridge (Socket 通訊) | 中 (本地回環) | 高 (Java 端獨立進程) | 中 | 過渡方案 |
| 微服務 (HTTP/gRPC) | 網路 RTT | 最高 (獨立部署、擴縮容) | 高 (契約優先、語言無關) | **現代標準架構** |