搜尋
首頁後端開發php教程關於PHP運作模式的詳細總結

PHP 運行模式

SAPI

這裡所說的 PHP 運行模式, 其實指的是 SAPI (Server Application Programming Interface,服務端應用程式連接埠 )。 SAPI 為 PHP 提供了一個和外部通訊的接口, PHP 就是透過這個介面來與其它的應用進行資料互動的。針對不同的應用場景, PHP 也提供了多種不同的 SAPI ,常見的有:apache、apache2filter、apache2handler、cli、cgi、embed 、fast-cgi、isapi 等等。

關於PHP運作模式的詳細總結

php_sapi_name() — 傳回 web 伺服器和 PHP 之間的介面類型。可能傳回的值包括了aolserver、apache、apache2filter、apache2handler、 caudium、cgi (直到PHP 5.3), cgi-fcgi、cli、 cli-server、 continuity、embed、fpm-fcgi、isapi、litespeed、 milter、nsnsapi、httpd 、pi3web、roxen、 thttpd、tux 和webjames。

目前 PHP 內建的許多 SAPI 實作都已不再維護或變的有些非主流了,PHP 社群目前正在考慮將一些 SAPI 移出程式碼庫。社群對許多功能的考量是除非真的非常必要,或者某些功能已近非常通用了,否則就在 PECL 庫中。

接下來會對其中五個比較常見的運行模式進行說明。

CLI 模式

CLI( Command Line Interface ), 也就是命令列接口,PHP 預設會安裝。透過這個接口,可以在 shell 環境下與 PHP 進行互動 。在終端機輸入php -v,會得到類似下圖的結果(安裝了PHP 前提):

關於PHP運作模式的詳細總結

##因為有CLI 的存在,我們可以直接在終端命令列裡執行PHP 腳本,就像使用shell、Python 那樣,不用依賴WEB 伺服器。像是 Laravel 框架中的 Artisan 命令列工具,它其實就是一個 PHP 腳本,用來幫助我們快速建立 Laravel 應用的。

CGI 模式

CGI(Common Gateway Interface,通用網關介面)是一種重要的互聯網技術,可以讓一個客戶端,從網頁瀏覽器向執行在網路伺服器上的程序請求數據。 CGI 描述了伺服器和請求處理程序之間傳輸資料的一種標準。
WEB 伺服器只是內容的分發者。例如Nginx,如果客戶端請求了

/index.html,那麼Nginx 會去文件系統中找到這個文件,發送給瀏覽器,這裡分發的是靜態資料;如果客戶端現在請求的是/index.php,根據設定文件,Nginx 知道這個不是靜態文件,需要去找PHP 解析器來處理,那麼它會把這個請求經過簡單處理後交給PHP 解析器。 Nginx 會傳哪些資料給 PHP 解析器呢? url 要有吧,查詢字串也得有吧,POST 資料也要有,HTTP 請求頭不能少吧,好的,CGI 就是規定要傳哪些資料、以什麼樣的格式傳遞給後方處理這個請求的協議。

CGI 模式運作原理:當Nginx 收到瀏覽器

/index.php 這個請求後,首先會建立一個對應實作了CGI 協定的進程,這裡就是php-cgi(PHP解析器)。接下來 php-cgi 會解析 php.ini 文件,初始化執行環境,然後處理請求,再以 CGI 規定的格式傳回處理後的結果,退出進程。最後,Nginx 再把結果回傳給瀏覽器。整個流程就是一個 Fork-And-Execute 模式。當使用者請求數量非常多時,會大量擠佔系統的資源如記憶體、CPU 時間等,造成效能低。所以在用 CGI 方式的伺服器下,有多少個連線請求就會有多少個 CGI 子進程,子進程反覆載入是 CGI 效能低下的主要原因。

關於PHP運作模式的詳細總結

CGI 模式的好處是完全獨立於任何伺服器,只是做為一個中介:提供介面給 WEB 伺服器和腳本語言或完全獨立程式語言。它們透過 CGI 協定搭線來完成資料傳遞。這樣做的好處了盡量減少它們之間的關聯,使得各自更加獨立、互不影響。

CGI 模式已經是比較古老的模式了,這幾年都很少用了。

FastCGI 模式

FastCGI(Fast Common Gateway Interface,快速通用網關介面)是一種讓互動程式與 Web 伺服器通訊的協定。 FastCGI 是早期通用網關介面(CGI)的增強版本。 FastCGI 致力於減少網頁伺服器與 CGI 程式之間互動的開銷,從而使伺服器可以同時處理更多的網頁請求。

根據定義可以知道,FastCGI 也是一種協議,實現了FastCGI 協議的程序,更像是一個常駐型(long-live)的CGI 協議程序,只要激活後,它可以一直執行著,不會每次都要花時間去fork 一次。

FastCGI 模式運作原理:FastCGI 進程管理器啟動之後,首先會解析php.ini 文件,初始化執行環境,然後會啟動多個CGI 協議解釋器守護進程(進程管理中可以看到多個php-cig 或php-cgi.exe),並等待來自WEB 伺服器的連線;當用戶端要求到達WEB 伺服器時,FastCGI 進程管理器會選擇並連接到一個CGI 解釋器, WEB 伺服器將CGI環境變數和標準輸入傳送到FastCGI 的子進程php-cgi 中;php-cgi 子程序完成處理後便將標準輸出和錯誤訊息傳回給WEB 伺服器;此時php-cgi 子程序就會關閉連接,該請求便處理結束,接著繼續等待並處理來自FastCGI 進程管理器的下一個請求連線。

關於PHP運作模式的詳細總結

FastCGI 模式採用了 C/S 結構,可以將 WEB 伺服器和腳本解析伺服器分開,同時在腳本解析伺服器上啟動一個或多個腳本解析守護程式。當 WEB 伺服器每次遇到動態程式時,可以直接交付給 FastCGI 進程來執行,然後將所得的結果傳回瀏覽器。這種方式可以讓 WEB 伺服器專一地處理靜態請求或將動態腳本伺服器的結果傳回給客戶端,這在很大程度上提高了整個應用系統的效能。

另外,在 CGI 模式下,php-cgi 在 php.ini 設定變更後,需要重新啟動 php-cgi 進程才能讓新的 php-ini 設定生效,不可以平滑重新啟動。而在 FastCGI 模式下,PHP-FPM 可以透過產生新的子程序來實現 php.ini 修改後的平滑重啟。

PHP-FPM(PHP-FastCGI Process Manager)是 PHP 語言中實作了 FastCGI 協定的進程管理器,由 Andrei Nigmatulin 編寫實現,已被 PHP 官方收錄並整合到核心中。

FastCGI 模式的優點:

  • 從穩定性上看,FastCGI 模式是以獨立的進程池來運行CGI 協定程序,單獨一個進程死掉,系統可以很輕易的丟棄,然後重新分配新的進程來運行邏輯;

  • 從安全性來看,FastCGI 模式支援分散式運算。 FastCGI 程式和宿主的Server 完全獨立,FastCGI 程式掛了也不影響Server;

  • 從效能來看,FastCGI 模式把動態邏輯的處理從Server 中分離出來,大負荷的IO 處理還是留給宿主Server,這樣宿主Server 可以一心一意處理IO,對於一個普通的動態網頁來說, 邏輯處理可能只有一小部分,大量的是圖片等靜態。

FastCGI 模式是目前 PHP 主流的 WEB 服務運作模式,擁有高效率可靠的效能,推薦大家使用。

Module 模式

PHP 常常與 Apache 伺服器搭配形成 LAMP 配對的運作環境。把PHP 作為一個子模組整合到Apache 中,就是Module 模式,Apache 中的常見配置如下:

LoadModule php5_module modules/mod_php5.so

這使用了LoadModule 指令,該指令的第一個參數是模組的名稱,名稱可以在模組實現的源碼中找到。第二個選項是該模組所處的路徑。如果需要在伺服器執行時間載入模組,可以透過發送訊號 HUPAP_SIG_GRACEFUL 給伺服器,一旦接受到該訊號,Apache 將重新載入模組,而不需要重新啟動伺服器。透過註冊到 apache2 的 ap_hook_post_config 掛鉤,在 Apache 啟動的時候啟動此模組以接受 PHP 檔案的請求。

例如,當客戶端存取 PHP 檔案時,Apache 會呼叫 php5_module 來解析 PHP 腳本。 Apache 每接收到一個請求,都會產生一個進程來連接 PHP 完成請求。在 Module 模式下,有時候會因為把 PHP 當模組編進 Apache,而導致出現問題時很難定位是 PHP 的問題還是 Apache 的問題。

过去,凭借着丰富的模块和功能,企业往往将 Apache 作为 WEB 服务器,于是以 Module 模式运行的 PHP Apache 的组合很常见。近些年,以异步事件驱动、高性能的 Nginx 服务器的崛起,市场份额快速增长,以 FastCGI 模式运行的 PHP Nginx 组合,拥有更佳的性能,有赶超 Apache 的趋势。

ISAPI 模式

ISAPI(Internet Server Application Program Interface)是微软提供的一套面向 Internet 服务的 API 接口,一个 ISAPI 的 DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个 DLL 里设置多个用户请求处理函数,此外,ISAPI 的 DLL 应用程序和 WEB 服务器处于同一个进程中,效率要显著高于 CGI。由于微软的排他性,只能运行于 Windows 环境。

用的比较少,在这里就不做详细介绍了。

推荐学习:《PHP视频教程

以上是關於PHP運作模式的詳細總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。