php-cgi和php-fpm有什麼關係?eechen2017-02-15 16:50:34

php-cgi不是FastCGI程序管理器,php-fpm才是。

要對php-cgi程序進行管理,需要使用特別的模組:

比如Apache的mod_fcgid,IIS的PHP Manager。

而Nginx只負責反向代理/請求轉發,不負責管理php-cgi程序,所以Nginx一般配合能夠自行管理工作程序(子程序)的php-fpm使用。

需要注意的是,php-fpm是一個獨立的SAPI,其管理的不是php-cgi,也就是說php-fpm跟php-cgi無關,php-fpm內建php直譯器,php-fpm的子程序是自己fork出來的,並不會呼叫php-cgi,你把系統中的php-cgi刪了也不會影響到php-fpm服務的正常執行。

php-fpm在pm = static配置下工作程序常駐後臺,也就是如果你配置了5個工作程序pm。max_children = 5,那php-fpm服務啟動時就會自動fork出5個子程序並常駐後臺,不會在請求處理結束後退出,也不會在空閒時退出。如果你在php指令碼中使用了資料庫持久連線,這時這5個工作程序還會建立並維持5個到資料庫的持久連線,實現在處理多個請求的時候重用資料庫連線資源,避免每個請求都建立/釋放一次資料庫連線。持久連線還能做到超時自動重連,對php-fpm裡的指令碼來說是完全透明的,指令碼只需在啟動時指明使用持久連線即可。

php-fpm在pm = dynamic配置下工作程序【部分】常駐後臺,也就是維持一定數量的常駐程序,服務繁忙時fork出更多的程序,服務閒置時自動關掉一些程序,把記憶體資源歸還給作業系統。虛擬主機提供商應該是比較喜歡這種方式的。

總而言之,PHP-FPM這種執行模式類似於Apache的prefork MPM,能靜能動的多程序網路服務。

php-cgi和php-fpm有什麼關係?生長隊大隊長2017-02-16 20:54:09

php54是之前是一種關係,php54之後另一種關係。

php54之前,php-fpm(第三方編譯)是管理器,php-cgi是直譯器

php54之後,php-fpm(官方自帶),master 與 pool 模式。php-fpm 和 php-cgi 沒有關係了。php-fpm又是直譯器,又是管理器

網上大部分說法:php-fpm 是管理php-cgi 的,是針對php54之前的

php-cgi和php-fpm有什麼關係?匿名使用者2017-02-22 10:15:24

針對php-cgi 和 php-fpm , 我自己總結了一下。

cgi、fastcgi、php-cgi、php-fpm剖析

php-cgi和php-fpm有什麼關係?1010102019-07-04 14:44:02

https://www。

basezap。com/difference-

php-cgi-php-fpm/

php-cgi和php-fpm有什麼關係?知乎使用者2019-07-15 10:43:50

關於這個問題,我經過查詢總結網上各方的資料,寫了一篇自己的文章,如有錯誤請大家在文章下方的評論指出,我看第一時間修正:

https://www。

xiebruce。top/606。html

(如果看得到廣告,請幫忙點一下廣告(廣告收入用於補貼網站伺服器費用)。

我在這裡簡單的說一下php-cgi與php-fpm的關係:

1、Linux下安裝好php,會有“php”和“php-cgi”這兩個可執行程式(在win下是php。exe和php-cgi。exe),這兩個程式其實基本上是一樣的,都是“php直譯器”(就是php的核心),就是能把你寫的php程式碼進行解釋最後輸出程式碼的結果。

2、既然php與php-cgi的功能都是“php直譯器”,那它們的不同點在哪?不同點就在於提供的介面不同,php屬於cli介面(client客戶端介面),只能用命令去呼叫,而php-cgi則提供了fastCGI介面,fastCGI介面是一種“網路介面”,你可以透過網路的方式去呼叫它,比如nginx呼叫php-cgi可以用“fastcgi_pass 127。0。0。1:9000;”這樣呼叫,其中的“127。0。0。1”你完全可以換成非本機ip,比如你在B伺服器(ip為23。45。67。78)的9000上運行了一個php-fpm,那麼你A伺服器的nginx可以用“fastcgi_pass 23。45。67。78:9000;”這樣去呼叫B伺服器的php-fpm。

3、解釋了php與php-cgi的區別,再來說php-cgi與php-fpm的區別。簡單來說,就是php-cgi有很多缺點(具體是什麼很多人回答,我就不說了),有些大牛覺得完全可以改進它,於是就有人寫出了php-fpm,最初php-fpm是需要呼叫php-cgi來解釋php程式碼的,php-fpm只起到程序管理的作用,但是因為php-fpm這個民間第三方寫的工具實在比php-cgi好太多了,php官方在php5。4時就把它整合到了php官方釋出的包中,並且php-fpm不需要再依賴php-cgi,直接把php直譯器的功能整合進php-fpm了。

4、所以現在的php-fpm跟php和php-cgi都能解釋php程式碼,只不過,php(強調一下這是可執行檔案,在win下叫php。exe)是cli模式呼叫,即用命令呼叫,而php-cgi和php-fpm可以透過“網路”來呼叫,而所使用的網路協議叫“fastCGI協議”,只不過php-fpm比php-cgi高階很多。(注意,有人說php-cgi不支援fastCGI協議,我這裡必須再次強調,這個說法是錯的,具體請看我這篇文章

https://www。

xiebruce。top/606。html

中的兩個例項證明)。

需要強調一下:win不支援php-fpm,因為php-fpm是使用Linux的fork()來做的,所以win下面基本上還是使用php-cgi,當然有人用“

Cygwin

”這個軟體可以在win下模擬Linux的fork(),但如果你是本地開發環境就沒必要這麼做了,用win10做開發的我建議你們考慮一下wsl。

總結:php-fpm就是php-cgi的升級版(並非簡單的在php-cgi的基礎上升級,而且透過直接採用第三方程式碼的方式,實質上是用php-fpm“替換”了php-cgi,而不是簡單的升級,但我們可以理解為升級),總之,現在在linux伺服器上用php-fpm即可,當然也有人用apache,用apache的話,php可以作為apache的模組,當然也可以用php-fpm的方式,因為apache有支援fastCGI的模組,讓它可以像nginx一樣,把使用者請求的php檔案轉交給php-fpm處理。