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