PHP的4種執行模式
SAPI(Server Application Programming Interface)伺服器應用程式程式設計介面,即PHP與其他應用互動的介面,PHP指令碼要執行有很多方式,通過Web伺服器,或者直接在命令列下,也可以嵌入在其他程式中。
SAPI提供了一個和外部通訊的介面,常見的SAPI有:cgi、fast-cgi、cli、apache模組的DLL、isapi
CGI
CGI 即通用閘道器介面(Commom Gateway Interface),它把網頁和WEB伺服器中的執行程式連線起來,把從HTML接收的指令傳遞給伺服器的執行程式,再把伺服器執行程式的結果返還給HTML頁。CGI的跨平臺效能極佳,幾乎可以在任何作業系統上實現。
CGI方式在遇到連線請求先要建立CGI的子程序,啟用一個CGI程序,然後處理請求,處理完後結束這個子程序。這就是fork-and-execute模式。所以用cgi方式的伺服器有多少連線請求就會有多少cgi子程序,子程序反覆載入是CGI效能低下的主要原因。都會當使用者請求數量非常多時,會大量擠佔系統的資源如記憶體,CPU時間等,造成效能低下。
FastCGI
fast-cgi 是 CGI的升級版本,FastCGI可以看成是一個常駐型的CGI,它可以一直執行著,只要啟用後,不會每次都要花費時間去fork一次。PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI 程序管理器進行管理。
FastCGI的工作原理:
1、Web Server啟動時載入FastCGI程序管理器
2、FastCGI程序管理器自身初始化,啟動多個CGI直譯器(可見多個php-cgi)並等待來自Web Server的連線
3、當客戶端請求到達Web Server是,FastCGI程序管理器選擇並連線到一個CGI直譯器。Web Server將CGI環境變數和標準輸入傳送到FastCGI子程序php-cgi
4、FastCGI子程序完成處理後將標準輸出和錯誤資訊從同一連線返回Web Server。當FastCGI子程序關閉連線是,請求便告知處理完成。FastCGI子程序接著等待並處理來自FastCGI繼承管理器的下一個連線。在CGI模式中,php-cgi在此便退出了。
CGI每個Web請求PHP都必須重新解析php.ini、重新載入全部擴充套件並重出始化全部資料結構。而使用FastCGI,所有這些都只在程序啟動時發生一次。一個額外的好處是,持續資料庫連線可以工作。
cli
cli 是PHP的命令執行模式(Linux下 php -m 查詢php安裝了哪些擴充套件就是php命令列模式)
apache模組的DLL:
在模組化(DLL)中,PHP是與Web伺服器一起啟動並執行(是apache在CGI的基礎上進行的一種擴充套件,加快PHP的執行效率)
作者:風兒–zsj
來源:CSDN
原文:https://blog.csdn.net/u011026037/article/details/81264431
版權宣告:本文為博主原創文章,轉載請附上博文連結!