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

PHP 四大執行模式深度解析:CGI、FastCGI、Apache 模組、CLI 差異與選擇指南

     編輯:PHP 相關知識

SAPI (Server API) 核心概念

PHP 與 Web 伺服器互動的介面稱為 SAPI。不同 SAPI 決定了進程管理、效能特性、部署架構。常見四種:

1. CGI (Common Gateway Interface)

  • 機制:每個請求 fork 一個新進程 → 載入 php.ini、擴展、初始化 → 處理請求 → 結束進程。
  • 優點:跨平台、與伺服器解耦、安全性高 (進程隔離)。
  • 缺點:效能極差,重複載入開銷大,高併發下記憶體/CPU 耗盡。
  • 現狀:生產環境已淘汰。

2. FastCGI (長驻進程模式)

  • 機制:Master 進程啟動 → 預先派生多個 Worker 進程 (php-cgi) → 請求到達 → Master 分派給閒置 Worker → Worker 處理完保持存活等待下一請求。
  • 關鍵元件:PHP-FPM (FastCGI Process Manager) 管理進程池、平滑重啟、慢日誌、狀態頁。
  • 優點:效能優異,避免重複初始化,支援持久資料庫連線、OpCache 共享。
  • 架構:Nginx/Apache (mod_proxy_fcgi) ↔ Unix Socket/TCP 9000 ↔ PHP-FPM Master ↔ Workers。
  • 主流選擇:現代 PHP 部署標準 (Nginx + PHP-FPM)。

3. Apache 模組 (mod_php / php_apache)

  • 機制:PHP 內嵌於 Apache 進程中,Apache 預先分叉多個子進程,每個子進程載入完整 PHP 解釋器。
  • 優點:設定簡單 (LoadModule php_module)、.htaccess 支援、無需額外程序管理。
  • 缺點:記憶體佔用高 (每個 Apache 子進程含 PHP)、無法平滑更新 PHP (需重啟 Apache)、靜態檔案請求也佔用 PHP 記憶體。
  • 適用:中小型專案、共享主機、需大量 Rewrite 規則的舊專案。

4. CLI (Command Line Interface)

  • 用途:腳本自動化、佇列消費者、定時任務、開發工具 (Composer、PHPUnit)、REPL 互動模式。
  • 特性:無 HTTP 標頭、無超時限制 (預設)、php://stdin/stdout/stderr 可用、$argc/$argv 參數處理。
  • 常見指令:
    php -m           # 列出載入模組
    php -i           # phpinfo()
    php -r 'echo "hi";' # 直接執行代碼
    php script.php arg1 arg2
    php -S localhost:8000 # 內建開發伺服器 (僅開發用)

效能與架構對比總結

維度CGIFastCGI (PHP-FPM)Apache 模組CLI
進程模型每請求一進程預派生 Worker 池Apache 子進程內嵌單進程/腳本
啟動開銷極高僅啟動時一次Apache 啟動時每腳本一次
記憶體效率低高 (共享 OpCache)中 (每進程獨佔)低
併發能力極弱強 (可調 Worker 數)中 (受限 MaxClients)不適用
部署複雜度低中 (需配置 FPM + Web Server)低極低
生產推薦度❌⭐⭐⭐⭐⭐⭐⭐⭐⭐ (非 Web 用途)

選擇建議

  1. 新專案 / 高流量:Nginx + PHP-FPM (FastCGI),搭配 OpCache、JIT (PHP 8+)。
  2. 舊專案維護 / 共享主機:Apache + mod_php 仍可接受,注意記憶體調優。
  3. 微服務 / CLI 工具:獨立 PHP CLI 程式,透過 Supervisor/Systemd 管理常駐進程。
  4. 開發環境:php -S 或 Docker 容器化 (Nginx + PHP-FPM)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved