您好,登錄后才能下訂單哦!
今天小編給大家分享一下php中cgi和fcgi有哪些區別的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
php中cgi和fcgi的區別:cgi是“common gateway interface”的縮寫,指的是通用網關接口,而fcgi是“fast common gateway interface”的縮寫,指的是快速通用網關接口。“php-cgi”是CGI協議的實現,“PHP-FPM”是FCGI協議的實現。
本文操作環境:Windows10系統、PHP8.1版、Dell G3電腦
CGI:common gateway interface 通用網關接口
FCGI:fast common gateway interface 快速通用網關接口
php-cgi是CGI協議的實現,PHP-FPM是FCGI協議的實現。
CGI 就是web服務器如nginx跟后端動態腳本語言如PHP通信的協議接口。
擴展知識
1.場景:
瀏覽器請求web服務器如nginx,如果請求的是靜態的index.html,則nginx可以直接返回。但是如果請求的是idex.php,nginx根據配置發現不是靜態資源,需要請求后端的服務。那么,nginx在請求后端服務時,需要以什么樣的格式、發送給后端服務什么樣的數據呢?CGI就是定義格式、數據的協議。
2.CGI協議的缺點:
CGI協議每次在請求后端服務時都要啟動實現CGI協議的程序,這里就是PHP解析器。PHP解析器會解析PHP.ini文件,進行初始化工作,處理請求、返回結果。每個請求都要重新初始化,工作太冗余。所以,FCGI應運而生。
因為PHP是解釋型語言,因此需要解釋器去解釋PHP代碼。
3.FCGI的優點:
FCGI協議首先啟動一個master,master用來解析PHP.ini文件,進行初始化工作。啟動多個worker,worker用來處理具體的請求。這樣將初始化和處理具體的請求就分離了。這樣也就需要一個程序來管理master和worker,所以PHP-FPM就出現了。
FCGI采用C/S架構。將web服務器與腳本解析服務器分離開來。使得web服務器只處理靜態資源和將后端腳本解析服務器返回的數據返回給瀏覽器。
web服務器nginx不支持對外部程序如PHP程序的直接調用或者解析,因此必須通過CGI接口來調用。這是其實需要將CGI進行一個封裝,形成一個wrapper,其實就是PHP-FPM。nginx調用PHP-FPM,PHP-FPM再調用后端的PHP代碼,然后PHP-FPM返回結果給nginx。
現在PHP-FPM已經被集成到PHP內核中。
PHP-FPM與nginx經常會部署在不同服務器上,以減輕前端nginx處理靜態資源,轉發動態請求的壓力。
而且FCGI也比CGI要安全。
4.CGI協議的實現PHP-CGI
如果修改了php.ini文件,PHP-CGI是無法平滑過渡的。也就是,必須要重啟PHP-CGI程序才能使用這些新的配置。
5.FCGI協議的實現PHP-FPM
如果修改了php.ini文件,PHP-FPM可以實現平滑過渡。對于修改之前的worker,當處理完這次請求之后,會對其進行銷毀,新生成的worker可以使用新的配置。這樣也就實現了平滑過渡。
而且,如果PHP-CGI進程掛了,PHP也就不能運行了。PHP-FPM沒有這個問題,守護進程會平滑重新啟動一個子進程。
PHP-FPM在出現之前,其實有個從lighthttpd發展來的spawn-fcgi。PHP-FPM可以在初始化時創建多個worker,當有worker空閑時,可以對worker進行回收。
spawn-fcgi在高并發時會出現內存泄漏、甚至自動重啟FCGI的問題。
以上就是“php中cgi和fcgi有哪些區別”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。