Quercus 是 Caucho 推出的純 Java 實作 PHP 5 引擎,能在 Resin、Tomcat、Jetty 等 Servlet 容器中直接運行 PHP 應用,實現「PHP + Java」無縫整合。本文介紹 Quercus 架構優勢、安裝部署步驟、HelloWorld 範例與進階整合技巧。
| 優勢 | 說明 |
|---|---|
| 純 Java 實作 | 無 C 語言分段錯誤、指標溢位風險,穩定性優於原生 PHP |
| Java 生態整合 | 直接呼叫 Java 類別、使用 Spring/Hibernate、存取 JNDI 資源 |
| 應用伺服器特性 | 連線池、分散式 Session、負載平衡、熱部署、JMX 監控 |
| Unicode 原生支援 | 16 位元字串處理,無需 mbstring 擴展 |
| 效能優化 | JIT 編譯、字節碼快取、Resin 整合優化 |
quercus.jar、resin-util.jar、javamail-141.jar)WEB-INF/lib/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>
WEB-INF/ 建立 php.ini 設定 PHP 參數.php 檔放入 Web 應用根目錄即可執行建立 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";
?>
| 語法 | 說明 | 範例 |
|---|---|---|
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') |
<?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/>";
}
?>
php.ini 設定:quercus.cache=on、quercus.optimize=on-Xms512m -Xmx2g -XX:+UseG1GCexec()/shell_exec() 受限於 Java 安全管理員,建議改用 Java ProcessBuilder。DIRECTORY_SEPARATOR 常數。php.ini 設定差異(如 memory_limit、max_execution_time)。✅ 適合:Java 為主技術棧、需整合既有 Java 服務、企業級部署環境、團隊具備 Java 運維能力。
❌ 不適合:高併發長連線(WebSocket)、依賴大量 PECL 擴展、純 PHP 團隊無 Java 經驗、對效能極度敏感的微服務。
Quercus 為「PHP on JVM」提供了成熟可靠的選擇,適合漸進式遷移或混合架構專案。