首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Quercus:在 Java 應用伺服器上運行 PHP 的完整指南

     編輯:PHP 綜合知識

Quercus 是 Caucho 推出的純 Java 實作 PHP 5 引擎,能在 Resin、Tomcat、Jetty 等 Servlet 容器中直接運行 PHP 應用,實現「PHP + Java」無縫整合。本文介紹 Quercus 架構優勢、安裝部署步驟、HelloWorld 範例與進階整合技巧。

為何選擇 Quercus?

優勢說明
純 Java 實作無 C 語言分段錯誤、指標溢位風險,穩定性優於原生 PHP
Java 生態整合直接呼叫 Java 類別、使用 Spring/Hibernate、存取 JNDI 資源
應用伺服器特性連線池、分散式 Session、負載平衡、熱部署、JMX 監控
Unicode 原生支援16 位元字串處理,無需 mbstring 擴展
效能優化JIT 編譯、字節碼快取、Resin 整合優化

安裝部署步驟(以 Tomcat 為例)

  1. 下載 Resin(含 quercus.jar、resin-util.jar、javamail-141.jar)
  2. 將上述 JAR 檔 + MySQL Connector/J 複製到 Web 應用的 WEB-INF/lib/
  3. 在 web.xml 註冊 Quercus Servlet:
<servlet>
  <servlet-name>quercus</servlet-name>
  <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>quercus</servlet-name>
  <url-pattern>*.php</url-pattern>
</servlet-mapping>
  1. (可選)在 WEB-INF/ 建立 php.ini 設定 PHP 參數
  2. 重新啟動 Tomcat,將 .php 檔放入 Web 應用根目錄即可執行

HelloWorld 範例

建立 hello.php:

<?php
echo "Hello from Quercus! 當前時間: " . date('Y-m-d H:i:s') . "\n";
// 直接呼叫 Java 類別
$cal = java('java.util.Calendar')->getInstance();
echo "Java Calendar: " . $cal->getTime() . "\n";
?>

PHP 呼叫 Java 核心 API

語法說明範例
java('ClassName')載入 Java 類別$date = java('java.util.Date');
$obj->method()呼叫實例方法$date->getTime()
java('ClassName')->staticMethod()呼叫靜態方法java('java.lang.System')->currentTimeMillis()
new Java('ClassName', arg1, arg2)建立實例(建構子參數)new Java('java.util.ArrayList')
$obj->field存取公開欄位$system->out->println('text')

進階整合:Spring Bean 注入

<?php
// 從 Spring ApplicationContext 取得 Bean
$context = java('org.springframework.web.context.support.WebApplicationContextUtils')
    ->getWebApplicationContext(java('javax.servlet.ServletContext'));

// 取得自定義 Service
$userService = $context->getBean('userService');
$users = $userService->findAll();

foreach ($users as $user) {
    echo $user->getName() . "<br/>";
}
?>

效能調優建議

  • 啟用 Resin 的 php.ini 設定:quercus.cache=on、quercus.optimize=on
  • 配置 JVM 參數:-Xms512m -Xmx2g -XX:+UseG1GC
  • 使用連線池(Tomcat JNDI DataSource)而非 PHP 端建立連線
  • 靜態資源由 Nginx/Apache 直接服務,動態請求代理至 Tomcat

遷移既有 PHP 專案注意事項

  1. 擴展相容性:Quercus 內建常用擴展(PDO、GD、JSON、Session、mbstring 等),但 PECL 擴展(如 Swoole、Redis、MongoDB 驅動)無法直接使用,需改用 Java 客戶端庫。
  2. exec()/shell_exec() 受限於 Java 安全管理員,建議改用 Java ProcessBuilder。
  3. 檔案路徑分隔符、大小寫敏感度可能不同,使用 DIRECTORY_SEPARATOR 常數。
  4. 測試 php.ini 設定差異(如 memory_limit、max_execution_time)。
  5. 適用場景評估

    ✅ 適合:Java 為主技術棧、需整合既有 Java 服務、企業級部署環境、團隊具備 Java 運維能力。
    ❌ 不適合:高併發長連線(WebSocket)、依賴大量 PECL 擴展、純 PHP 團隊無 Java 經驗、對效能極度敏感的微服務。

    Quercus 為「PHP on JVM」提供了成熟可靠的選擇,適合漸進式遷移或混合架構專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved