中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何理解PHP中的fastcgi和php-fpm

發布時間:2021-06-15 17:32:38 來源:億速云 閱讀:343 作者:chen 欄目:編程語言

這篇文章主要講解了“如何理解PHP中的fastcgi和php-fpm”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何理解PHP中的fastcgi和php-fpm”吧!

講到PHP開發,就一定會提到fastcgi和php-fpm,這兩個東西對PHP的性能有著至關重要的作用。在百度實習的這段時間里,用到的ODP環境就是用的php-fpm,但一直以來對它一無所知,甚至對整個PHP都概念模糊,這兩天任務提前完成,借此機會對PHP做一點深入的了解。

Web服務器

PHP作為一種專門為Web開發而生的服務端語言,其實現必須借助Web服務器,常見的PHP架構有LAMP和LNMP,找張圖片解釋了PHP的訪問情況。

如何理解PHP中的fastcgi和php-fpm

Apache處理PHP請求

mod_php模式

可以看出請求是發送到Apache,之后由Apache來解析處理PHP并返回結果給客戶端。當我們使用LAMP架構時,需要改動Apache的配置文件httpd.conf

加入如下兩句
LoadModule phpx_module PHP_ROOT/phpxapache2_2.dllAddType appliaction/x-httpd-php.php
將下面語句做如下修改<IfModule dir_module> DirectoryIndex index.html</IfModule>改為 <IfModule dir_module> DirectoryIndex index.html index.htm index.php index.phtml</IfModule>

使用LoadModule來加載phpx_module(x為PHP版本號)。可以理解為將PHP作為Apache的一個子模塊來運行,當請求訪問PHP時,Apache就會調用phpx_module來解析PHP代碼。

php_module是如何解析PHP代碼的呢?——通過sapi。

Apache和PHP與sapi的關系如下圖:

如何理解PHP中的fastcgi和php-fpm

sapi就是一個中間層,提供和外部通信的接口,類似于socket,使得PHP可以和其他應用進行數據交互。PHP提供了多種sapi,如給Apache和Nginx的php_module,給IIS的ISAPI等。

Apache調用PHP的執行過程:

Apache -> httpd -> php_module -> sapi -> PHP

總之,Web服務器通過php_module方式解析執行PHP的模式即為mod_php。

mod_fastcgi模式

PHP的sapi的另一種方式就是提供cgi模式,現在cgi已經被fastcgi取代。

所謂cgi,就是common gateway interface,當Web服務器收到請求,就會把請求交給cgi程序(如PHP的fastcgi),cgi就將請求做處理(解析PHP),然后將結果返回給Web服務器,Web服務器再將請求返回給客戶端。

cgi的不足之處就是每次請求都會有啟動和退出的過程,也就是飽受詬病的fork-and-execute模式,在大量并發的請況下就完蛋了。

fastcgi的誕生彌補這一不足,它的原理是早早啟動好等待請求,在響應完請求后不會退出,繼續等待下一個請求。

利用fastcgi的運行方式稱為mod_fastcgi。

對比一下mod_php和mod_fastcgi的不同。前者是將PHP作為Web服務器的一個模塊來運行,PHP與服務器結合度大。后者是將fastcgi作為中間過程,PHP和Web服務器只通過fastcgi來完成請求與響應。

如何理解PHP中的fastcgi和php-fpm

mod_php模式

mod_php模式下,Apache每接受一個請求,就會產生一個進程來連接PHP通過sapi完成請求,在高并發的情況下,顯然服務器會無法承受。

如何理解PHP中的fastcgi和php-fpm

mod-fastcgi模式

這張圖可以看出,每當有請求到達時,httpd會調用sapi將請求傳遞給PHP,完成后不退出,等待下一請求。并發性能大大提高。

php-fpm

磨刀不誤砍柴工,前面的講解只為引出php-fpm。php-fpm是做什么的呢?其實就是用來輔助fastcgi的。

fastcgi是一種與平臺無關,與語言無關的接口實現,只需要不同語言按照規定方式實現即可完成與Web服務器的通信。上圖所示的php-cgi就是PHP自帶的fastcgi管理器。

網上看到的php-cgi的問題主要有兩點:

  • php-cgi變更php.ini陪之后需要重啟php-cgi才能使新的php.ini生效,不能平滑重啟。

  • 若直接殺死php-cgi,PHP便無法運

php-fpm完美解決了上述不足,是一款專用的fastcgi管理器。

總之,php-fpm的作用就是專門管理PHP中的fastcgi,使PHP在高并發的情況下也能安全穩定的與Web服務器合作,完成請求響應過程。

感謝各位的閱讀,以上就是“如何理解PHP中的fastcgi和php-fpm”的內容了,經過本文的學習后,相信大家對如何理解PHP中的fastcgi和php-fpm這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦江县| 赞皇县| 高州市| 临沭县| 合川市| 区。| 溧水县| 高清| 景谷| 雷山县| 新龙县| 宁乡县| 平塘县| 关岭| 信宜市| 巴里| 遵义市| 本溪市| 马龙县| 永仁县| 屏东县| 汤原县| 汶上县| 罗江县| 布拖县| 丁青县| 吉隆县| 襄城县| 四平市| 塔河县| 赣榆县| 池州市| 沙洋县| 灯塔市| 宜良县| 临沭县| 晋州市| 九龙县| 应城市| 商洛市| 双柏县|