萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 呼叫 Java 類庫完整教學:環境建置、JVM 橋接與實戰範例

前言

PHP 透過 Java 擴充套件 (PHP 5.3 前內建,後需 PECL 安裝) 可在 PHP 腳本中實例化 Java 物件、呼叫方法、存取屬性,實現雙語言互操作。適用場景:既有 Java 業務邏輯庫、PDF 處理、加密演算法、規則引擎等。

環境建置 (Windows 範例)

  1. 安裝 JDK:下載 Eclipse Temurin 或 Oracle JDK,安裝至 C:\Java\jdk-17。
  2. 設定環境變數:
    • 新增系統變數 JAVA_HOME=C:\Java\jdk-17
    • 編輯 Path 附加 %JAVA_HOME%\bin
  3. 安裝 PHP Java Bridge (現代替代方案):

    傳統 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_java.dll 設定 (僅供舊系統維護參考)

; 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 橋接風險極高**。現代架構應將 Java 業務邏輯封裝為獨立微服務,PHP 透過 HTTP/gRPC 呼叫,享受獨立部署、技術棧解耦、多語言共存的紅利。僅在無法重構的舊系統維護期,才考慮 PHP/Java Bridge 過渡方案。

copyright © 萬盛學電腦網 all rights reserved
方案延遲穩定性維護性建議
PHP Java 擴充 (進程內 JVM)低 (進程內)低 (JVM Crash 導致 PHP 進程死掉)低 (版本綁定嚴重)**不推薦新專案**
PHP/Java Bridge (Socket 通訊)中 (本地回環)高 (Java 端獨立進程)中過渡方案
微服務 (HTTP/gRPC)網路 RTT最高 (獨立部署、擴縮容)高 (契約優先、語言無關)**現代標準架構**