mod_php、FastCGI、PHP-FPM等PHP運(yùn)行方式對比
概述
寫這篇文章的是因?yàn)榻裉煲猆buntu下搭建LNMP環(huán)境,Nginx使用的是PHP-FPM,所以對Web服務(wù)器與PHP解釋器的交互方式做了個整理。
眾所周知,PHP是跨平臺、跨服務(wù)器的語言,這也是它如此流行的原因之一。但是,很少有人知道PHP解釋器可以以不同的方式運(yùn)行在Web服務(wù)器中。PHP最常用的方式是以模塊的方式(mod_php)運(yùn)行在Apache中,也是Apache運(yùn)行PHP的默認(rèn)方式。但是在Nginx中,Nginx又使用的是PHP-FPM。
這篇文章就對這些概念做個介紹,如有不對的地方,請多多批評指教。
什么是PHP處理器(PHP handlers)?
首先需要記住的是,任何一種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處理器。
mod_php
首先,來看一下以Apache模塊方式運(yùn)行PHP。mod_php現(xiàn)在在Linux各版本的軟件倉庫里都有,因此很容易被安裝。
當(dāng)PHP以模塊的方式運(yùn)行在Apache中時,PHP解釋器被“內(nèi)嵌”在Apache的進(jìn)程里。Apache不會調(diào)用任何外部的PHP進(jìn)程,因此這種方式使Apache與PHP能更好的通信。但是,當(dāng)以這種方式運(yùn)行PHP的時候,哪怕Apache提供的僅僅是靜態(tài)的資源(如HTML),Apache的每個子進(jìn)程也都會載入 mod_php,導(dǎo)致了比正常情況下更多的內(nèi)存開銷。
以這種方式運(yùn)行的另一個缺點(diǎn)是,它僅能與Apache一起配合工作。另外,在小型的VPS和大型的網(wǎng)站中,這種方式也不合適,因?yàn)榇笮途W(wǎng)站可能有很多靜態(tài)資源,而這些靜態(tài)資源是不需要PHP程序解釋的。
優(yōu)點(diǎn):
1.易于安裝和更新
2.容配置
缺點(diǎn):
1.僅能與Apache一起工作
2.增加了Apache子進(jìn)程內(nèi)存開銷
3.當(dāng)更改php.ini文件后,需要重啟Apache
FastCGI
FastCGI是交互程序與Web服務(wù)器通用的協(xié)議接口,是早期CGI(Common Gateway Interface)的一個變種。相對于CGI來說,F(xiàn)astCGI減少了和Web服務(wù)器交互的開銷,同時一次可以處理更多的請求。
Apache可以以mod_fcgid的形式使用FastCGI。其他Web服務(wù)器,如lighttpd, nginx, Cherokee,甚至微軟的IIS也都能使用FastCGI。使用FastCGI,可以同時設(shè)置多個版本的PHP,這在某些情況下非常有用。
FastCGI還利用suexec來支持不同的用戶用自己的PHP的實(shí)例。這個特性對于在共享環(huán)境下提高安全性尤其重要。FastCGI在保證性能的同時,也減少了Web服務(wù)器的內(nèi)存開銷。
優(yōu)點(diǎn):
1.兼容多數(shù)Web服務(wù)器
2.比mod_php占內(nèi)存小
3.更多的配置項(xiàng),包括多版本PHP和suexec
缺點(diǎn)
1.配置復(fù)雜
2.不被大家所熟知
PHP-FPM(FastCGI Process Manager)
PHP-FPM是Web服務(wù)器使用PHP的一種最新方式,也是PHP FastCGI的另外一種實(shí)現(xiàn)。PHP-FPM對于運(yùn)行在小型VPS和多服務(wù)器上的Web應(yīng)用非常應(yīng)用。同時,它也可以被兼容FastCGI的任何Web服務(wù)器所使用。
PHP-FPM使管理員能夠優(yōu)雅地停止和啟動PHP工作進(jìn)程而不丟失任何查詢。這允許我們逐步更新配置和二進(jìn)制,而不會損失任何查詢。它還允許我們在發(fā)生任何意外破壞的情況下,緊急重啟進(jìn)程。
優(yōu)點(diǎn):
1.兼容多數(shù)Web服務(wù)器
2.比mod_php占內(nèi)存小
3.更多的配置項(xiàng),包括多版本PHP和suexec
缺點(diǎn)
1.配置復(fù)雜
2.不被大家所熟知
補(bǔ)充:Apache運(yùn)行PHP的四種方式
mod_php (DSO,Dynamic Shared Object)
CGI
suPHP
FastCGI
總結(jié)
內(nèi)容相對抽象,理解的不深,記錄下留作以后參考~:)
- php以fastCGI的方式運(yùn)行時文件系統(tǒng)權(quán)限問題及解決方法
- php的4種常見運(yùn)行方式
- Window下PHP三種運(yùn)行方式圖文詳解
- php cli 方式 在crotab中運(yùn)行解決
- php運(yùn)行出現(xiàn)Call to undefined function curl_init()的解決方法
- Windows下Apache+MySQL+PHP運(yùn)行環(huán)境的安裝圖文方法
- PHP運(yùn)行出現(xiàn)Notice : Use of undefined constant 的完美解決方案分享
- Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL運(yùn)行環(huán)境搭建教程
- 在命令行下運(yùn)行PHP腳本[帶參數(shù)]的方法
- php的4種常用運(yùn)行方式詳解
相關(guān)文章
PHP實(shí)現(xiàn)實(shí)時生成并下載超大數(shù)據(jù)量的EXCEL文件詳解
EXCEL文件的處理是我們在日常工作中經(jīng)常會遇到的,這篇文章主要給大家介紹了關(guān)于利用PHP如何實(shí)現(xiàn)實(shí)時生成并下載超大數(shù)據(jù)量的EXCEL文件,通過文中介紹的這個方法對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10
php實(shí)現(xiàn)點(diǎn)擊可刷新驗(yàn)證碼
這篇文章主要介紹了php如何實(shí)現(xiàn)點(diǎn)擊即可刷新驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-11-11
PHP在不同頁面間傳遞Json數(shù)據(jù)示例代碼
本文為大家介紹下PHP如何在不同頁面間傳遞Json數(shù)據(jù),具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-06-06
php實(shí)現(xiàn)Linux服務(wù)器木馬排查及加固功能
這篇文章主要介紹了php實(shí)現(xiàn)Linux服務(wù)器木馬排查及加固功能,本文給出了根據(jù)特征碼查找、搜索最近被修改的文件、修改php.ini、修改nginx.conf等方法,需要的朋友可以參考下2014-12-12
php數(shù)組函數(shù)array_key_exists()小結(jié)
本文給大家匯總介紹了php數(shù)組函數(shù)array_key_exists()的相關(guān)知識以及與in_array的性能對比,與isset的區(qū)別分析,非常的詳細(xì),有需要的小伙伴可以參考下。2015-12-12
php采用curl實(shí)現(xiàn)偽造IP來源的方法
這篇文章主要介紹了php采用curl實(shí)現(xiàn)偽造IP來源的方法,主要涉及使用curl的CURLOPT_REFERER參數(shù)實(shí)現(xiàn)該功能,需要的朋友可以參考下2014-11-11

