PHP中CGI、CLI、FPM是什麼

reggie發表於2021-08-11

嗯 被運維哥問了個問題: PHP 的 CLI 模式和 FPM 有什麼區別和聯絡
我:臥槽 我還真不知道!

其實我對這個問題 也不甚很懂 一直都是這麼用 沒想過都是些啥玩意 然後搜尋了好久 網上的答案真是眾說紛紜 講什麼的都有 看的越來越暈

下面是自己整理的一些內容。

SAPI 是什麼

SAPI 全稱 Server Application Programming Interface 直譯過來 服務端應用程式設計埠

SAPI是一個應用程式程式設計介面 (API)由Web伺服器提供,以幫助其他開發人員擴充套件Web伺服器功能。

例如,PHP有一個名為SAPI的直接模組介面,用於不同的Web伺服器; 在Windows下的PHP 5和Apache 2.0的情況下,它以DLL檔案的形式提供,名為php5apache2.dll,這是一個模組,除了其他功能之外,還提供PHP和PHP之間的介面。 Web伺服器,以伺服器理解的形式實現。這種形式就是所謂的SAPI。
在PHP中實現了SAPI的還包括 CGICLI

CGI 是什麼

CGI 全稱 Common Gateway Interface 直譯過來 通用閘道器介面

CGI是一個協議規範 為WebServer提供標準協議,以執行在執行生成網頁的伺服器上執行的控制檯應用程式(也稱為命令列介面程式)之類的程式。

這些程式稱為CGI指令碼或簡稱為CGI。伺服器執行指令碼的具體細節由伺服器確定

在說的簡單點就是他規範了 WebServer 傳遞資料的格式 必須按這個來 不能亂搞

PHP-CLI是什麼

CLI 全稱 command-line interface 直譯過來 命令列介面 維基上 是 命令列介面

一般我們在 Linux 作業系統時是沒有操作介面的(別問我為什麼),那要怎麼才能執行程式或者對程式進行編譯

這個時候就需要一些實現了 CLI 的工具, PHP-CLI 就是這樣一個程式 可以在命令列下直接執行PHP程式 常用來開發 PHP 的外殼應用 後臺應用

FastCGI 是什麼

FastCGI 全稱 Fast Common Gateway Interface 直譯過來 快速通用閘道器介面

是一種讓互動程式與Web伺服器通訊的協議

FastCGI 致力於減少網頁伺服器與CGI程式之間互動的開銷,從而使伺服器可以同時處理更多的網頁請求
CGI 使外部程式與Web伺服器之間互動成為可能。CGI程式執行在獨立的程式中,並對每個Web請求建立一個程式,這種方法非常容易實現,但效率很差,難以擴充套件。面對大量請求,程式的大量建立和消亡使作業系統效能大大下降。此外,由於地址空間無法共享,也限制了資源重用。

說白了它和 CGI 一樣都是協議 是一個增強版本而已 其主要目的是為了提高 CGI 的效率和效能

FastCGI 的實現

FastCGI本身還是一個協議 他致力於提高 CGI 效能 那麼怎麼實現提高效能呢

與為每個請求建立一個新的程式不同,FastCGI使用持續的程式來處理一連串的請求。這些程式由FastCGI伺服器管理,而不是web伺服器。 當進來一個請求時,web伺服器把環境變數和這個頁面請求透過一個socket比如FastCGI程式與web伺服器(都位於本地)或者一個TCP connection(FastCGI程式在遠端的server farm)傳遞給FastCGI程式。

引用下大佬的回覆

提高效能,那麼CGI程式的效能問題在哪呢?”PHP解析器會解析php.ini檔案,初始化執行環境”,就是這裡了。標準的CGI對每個請求都會執行這些步驟(不閒累啊!啟動程式很累的說!),所以處理每個時間的時間會比較長。這明顯不合理嘛!那麼Fastcgi是怎麼做的呢?首先,Fastcgi會先啟一個master,解析配置檔案,初始化執行環境,然後再啟動多個worker。當請求過來時,master會傳遞給一個worker,然後立即可以接受下一個請求。這樣就避免了重複的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置預先啟動幾個worker等著;當然空閒worker太多時,也會停掉一些,這樣就提高了效能,也節約了資源。這就是fastcgi的對程式的管理。

FastCGI 的不足

因為是多程式,所以比CGI多執行緒消耗更多的伺服器記憶體

PHP-FPM是什麼

FPM 全稱 FastCGI Process Manager 直譯過來 FastCGI程式管理器

PHP-FPM: PHP 的 FastCGI程式管理器 只能用於PHP 是一個實現了 FastCGI 的程式 它管理的並不是FastCGI(協議怎麼管理…) 而是執行PHP過程中的程式

PHP-FPM 提供了更好的PHP程式管理方式,可以有效控制記憶體和程式、可以平滑過載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了。在./configure的時候帶 –enable-fpm 引數即可開啟 PHP-FPM

本作品採用《CC 協議》,轉載必須註明作者和本文連結
微信公眾號:碼咚沒 ( ID: codingdongmei )

相關文章