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

PHP 四大運行模式深度對比:CLI、CGI、FastCGI、mod_php 原理與選型指南

     編輯:PHP 相關知識

PHP 四大運行模式深度對比

PHP 的運行模式決定了請求如何被處理、進程如何管理、性能邊界在哪裡。本文從原理、流程、優缺點、適用場景四個維度對比 CLI、CGI、FastCGI、mod_php,並解析 PHP-FPM 與 Nginx/Apache 的協作細節。

1. CLI(Command Line Interface)

  • 用途:腳本任務、定時任務、佇列消費、安裝腳本。
  • 特點:無 HTTP 頭、無超時限制、標準輸入輸出、當前目錄不自動切換。
  • 啟動:php -f script.php 或 Shebang #!/usr/bin/env php。

2. CGI(Common Gateway Interface)

  • 原理:Web Server 對每個請求 fork() 一個 PHP 進程,通過環境變量傳遞請求信息,標準輸出返回響應,進程結束。
  • 缺點:頻繁創建/銷毀進程開銷大,無法復用資源(數據庫連接、Opcode 緩存)。
  • 現狀:生產環境已基本淘汰。

3. FastCGI

  • 改進:常駐主進程管理多個 Worker 進程池,Web Server 通過 Socket(TCP/Unix)轉發請求,Worker 循環處理多個請求。
  • 關鍵組件:PHP-FPM(FastCGI Process Manager)負責進程池管理、平滑重載、慢日誌、狀態頁。
  • 流程:
    1. Nginx 接收請求 → fastcgi_pass unix:/run/php/php-fpm.sock
    2. PHP-FPM Master 分派給空閒 Worker
    3. Worker 解析執行腳本 → 返回響應 → 繼續等待下一請求
  • 優勢:進程復用、獨立於 Web Server、支援分佈式部署(Worker 可跨機器)。

4. mod_php(Apache 模塊)

  • 原理:PHP 作為 Apache 子進程內嵌模塊加載,每個 Apache Worker 內含 PHP 解釋器。
  • MPM 模式影響:
    • Prefork:單線程多進程,每進程獨佔內存,穩定但佔用大。
    • Worker/Event:多線程,需 PHP 編譯為線程安全(ZTS),擴展兼容性較差。
  • 配置修改需重啟 Apache 生效;.htaccess 支援靈活。

對比總結表

維度CLICGIFastCGI (PHP-FPM)mod_php
進程模型單進程每請求一進程常駐進程池Apache 子進程內嵌
性能N/A極低高中高
資源復用無無是(連接、Opcode)進程級復用
部署架構獨立Web Server 同機可分離部署綁定 Apache
配置熱加載N/A支援支援 (reload)需重啟 Apache
推薦場景腳本/CLI淘汰現代標準legacy Apache

選型建議

  • 新項目:Nginx + PHP-FPM(FastCGI),性能、彈性、運維工具鏈最成熟。
  • 遷移舊項目:若已深度依賴 .htaccess、mod_rewrite,可暫用 mod_php(Prefork),規劃遷移。
  • 微服務/Serverless:PHP-FPM Worker 可作為獨立服務註冊到服務發現。

理解運行模式是性能調優、故障排查、架構演進的基石。

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