溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP-FPM跟php有什么關(guān)系

發(fā)布時間:2021-08-09 21:35:43 來源:億速云 閱讀:243 作者:chen 欄目:編程語言

這篇文章主要講解了“PHP-FPM跟php有什么關(guān)系”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“PHP-FPM跟php有什么關(guān)系”吧!

  HP最常用的方式是以模塊的方式(mod_php)運(yùn)行在Apache中,也是Apache運(yùn)行PHP的默認(rèn)方式;但在Nginx中,Nginx又使用的是PHP-FPM,但是PHP-FPM到底是個什么東東?跟php有什么關(guān)系?下面億速云小編來講解下PHP-FPM是什么?PHP-FPM跟php有什么關(guān)系?

  PHP-FPM是什么

  首先需要記住的是,任何一種Web服務(wù)器(Apache、Nginx等)都是被設(shè)計成向用戶發(fā)送html、圖片等靜態(tài)資源的,Web服務(wù)器自身并不能解釋任何動態(tài)腳本(PHP、Python等)。

  PHP處理器就是用來解釋W(xué)eb應(yīng)用中的PHP代碼,并將它解釋為HTML或其他靜態(tài)資源,然后將解析的結(jié)果傳給Web服務(wù)器,最后再由Web服務(wù)器發(fā)送給用戶。

  大多數(shù)的Web服務(wù)器都不能解析PHP代碼,因此它需要一個能解析PHP代碼的程序,這就是PHP處理器。

  現(xiàn)在我們知道了,Apache與Nginx都需要PHP處理器來處理php代碼,那么怎么連接上服務(wù)器與php處理器呢?也就是說服務(wù)器與php處理器如何通信?

  答案是通過SAPI(ServerApplicationProgrammingInterface服務(wù)器端應(yīng)用編程端口),簡單來說,SAPI指的是PHP具體應(yīng)用的編程接口,就像PC一樣,無論安裝哪些操作系統(tǒng),只要滿足了PC的接口規(guī)范都可以在PC上正常運(yùn)行,PHP腳本要執(zhí)行有很多種方式,通過Web服務(wù)器,或者直接在命令行下,也可以嵌入在其他程序中,有興趣大家可以研究PHP內(nèi)核。

  我們這里繼續(xù)討論P(yáng)HP最常用的SAPI提供的2種連接方法:mod_php和mod_fastcgi。

  mod_php模式

  咱們回顧一下,Apache是怎么能夠識別php代碼的?是不是Apache的配置文件httpd.conf中加上或者修改這樣幾句:

  //添加

  LoadModulephp5_modulemodules/libphp5.so

  AddTypeapplication/x-httpd-php.php

  //修改

  DirectoryIndexindex.phpindex.htmlindex.htmindex.html

  也即php作為Apache的一個子模塊來運(yùn)行,當(dāng)通過web訪問php文件時,Apache就會調(diào)用php5_module來解析php代碼。

  配置加載mod_php模塊后,php便是Apahce進(jìn)程本身一部分,每個新的Apache子進(jìn)程都會加載此模塊。

  mod_fastcgi模式

  我們先看PHP-FPM官網(wǎng)的說明:

  PHP-FPM–AsimpleandrobustFastCGIProcessManagerforPHP

  PHP-FPM(FastCGIProcessManager)isanalternativePHPFastCGIimplementationwithsomeadditionalfeaturesusefulforsitesofanysize,especiallybusiersites.

  PHP-FPM跟php有什么關(guān)系

  PHP-FPM是一個PHP的FastCGI進(jìn)程管理器,解釋的非常簡單。這說明PHP-FPM是輔助mod_fastcgi模式進(jìn)行工作的,然而FastCGI又是個什么東西?管理著什么進(jìn)程?

  什么是CGI?

  CGI(CommonGatewayInterface)是WWW技術(shù)中最重要的技術(shù)之一,有著不可替代的重要地位。

  CGI是外部應(yīng)用程序(CGI程序)與Web服務(wù)器之間的接口標(biāo)準(zhǔn),是在CGI程序和Web服務(wù)器之間傳遞信息的規(guī)程。

  CGI規(guī)范允許Web服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給Web瀏覽器,CGI將Web的一組簡單的靜態(tài)超媒體文檔變成一個完整的新的交互式媒體。

  說白了,CGI是一種外部應(yīng)用程序(CGI程序)與Web服務(wù)器的協(xié)議,CGI是為了保證Server傳遞過來的數(shù)據(jù)是標(biāo)準(zhǔn)格式。

  什么是FastCGI?

  FastCGI像是一個常駐(long-live)型的CGI,它可以一直執(zhí)行著,只要激活后,不會每次都要花費(fèi)時間去fork一次(這是CGI最為人詬病的fork-and-execute模式)。它還支持分布式的運(yùn)算,即FastCGI程序可以在網(wǎng)站服務(wù)器以外的主機(jī)上執(zhí)行并且接受來自其它網(wǎng)站服務(wù)器來的請求。

  FastCGI是語言無關(guān)的、可伸縮架構(gòu)的CGI開放擴(kuò)展,其主要行為是將CGI解釋器進(jìn)程保持在內(nèi)存中并因此獲得較高的性能。眾所周知,CGI解釋器的反復(fù)加載是CGI性能低下的主要原因,假如CGI解釋器保持在內(nèi)存中并接受FastCGI進(jìn)程管理器調(diào)度,則可以提供良好的性能、伸縮性、Fail-Over特性等等。

  一般情況下,F(xiàn)astCGI的整個工作流程是這樣的:

  WebServer啟動時載入FastCGI進(jìn)程管理器(IISISAPI或ApacheModule)。FastCGI進(jìn)程管理器自身初始化,啟動多個CGI解釋器進(jìn)程(可見多個php-cgi)并等待WebServer的連接。當(dāng)客戶端請求到達(dá)WebServer時,F(xiàn)astCGI進(jìn)程管理器選擇并連接到一個CGI解釋器。Webserver將CGI環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到FastCGI子進(jìn)程php-cgi。FastCGI子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯誤信息從同一連接返回WebServer。當(dāng)FastCGI子進(jìn)程關(guān)閉連接時,請求便告處理完成,F(xiàn)astCGI子進(jìn)程接著等待并處理來自FastCGI進(jìn)程管理器(運(yùn)行在WebServer中)的下一個連接,在CGI模式中,php-cgi在此便已經(jīng)退出。

  也就是說FastCGI是CGI的升級版,一種語言無關(guān)的協(xié)議,用來溝通程序(如PHP,Python,Java)和Web服務(wù)器(Apache2,Nginx),理論上任何語言編寫的程序都可以通過FastCGI來提供Web服務(wù)。

  FastCGI的特點是會在一個進(jìn)程中依次完成多個請求,以達(dá)到提高效率的目的,大多數(shù)FastCGI實現(xiàn)都會維護(hù)一個進(jìn)程池。

  通俗解釋:FastCGI事先就需要啟動,而且可以啟動多個CGI模塊,在那里一直運(yùn)行等著web發(fā)請求,然后再給php解析運(yùn)算,完成后生成html返回給web后,但是完成后它不會退出,而是繼續(xù)等著下一個web請求。

  PHP-FPM

  PHP-FPM就是針對于PHP的FastCGI的一種實現(xiàn),他負(fù)責(zé)管理一個進(jìn)程池,來處理來自Web服務(wù)器的請求。

  但是PHP-FPM僅僅是個“PHPFastCGI進(jìn)程管理器”,它仍會調(diào)用PHP解釋器本身來處理請求,PHP解釋器(在Windows下)就是php-cgi.exe。

感謝各位的閱讀,以上就是“PHP-FPM跟php有什么關(guān)系”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對PHP-FPM跟php有什么關(guān)系這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI