首頁  >  文章  >  後端開發  >  php中cgi和fcgi有什麼區別

php中cgi和fcgi有什麼區別

WBOY
WBOY原創
2022-07-27 16:41:252515瀏覽

php中cgi和fcgi的區別:cgi是“common gateway interface”的縮寫,指的是通用網關接口,而fcgi是“fast common gateway interface”的縮寫,指的是快速通用網關接口。 「php-cgi」是CGI協定的實現,「PHP-FPM」是FCGI協定的實作。

php中cgi和fcgi有什麼區別

本文操作環境:Windows10系統、PHP8.1版、Dell G3電腦

php中cgi和fcgi有什麼差別

CGI:common gateway interface 通用網關介面

FCGI:fast common gateway interface 快速通用網關介面

php-cgi是CGI協定的實現,PHP-FPM是FCGI協定的實現。

CGI 就是web伺服器如nginx跟後端動態腳本語言如PHP通訊的協定介面。

擴充知識

#1.場景:

瀏覽器請求網頁伺服器如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影片教學

以上是php中cgi和fcgi有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn