PHP 運行方式(PHP SAPI介紹)

SAPI:Server Application Programming Interface 服務器端應用編程端口。它就是PHP與其它應用交互的接口,PHP腳本要執行有不少種方式,經過Web服務器,或者直接在命令行下,也能夠嵌入在其餘程序中。
SAPI提供了一個和外部通訊的接口,常見的SAPI有:cgi 、fast-cgi、cli、isapi、apache 模塊的 DLLphp

CGI
CGI即通用網關接口(Common Gateway Interface),它是一段程序,通俗的講CGI就象是一座橋,把網頁和WEB服務器中的執行程序鏈接起來,它把HTML接收的指令傳遞給服務器的執 行程序,再把服務器執行程序的結果返還給HTML頁。CGI 的跨平臺性能極佳,幾乎能夠在任何操做系統上實現。
CGI方式在遇到鏈接請求(用戶 請求)先要建立cgi的子進程,激活一個CGI進程,而後處理請求,處理完後結束這個子進程。這就是fork-and-execute模式。因此用cgi 方式的服務器有多少鏈接請求就會有多少cgi子進程,子進程反覆加載是cgi性能低下的主要緣由。都會當用戶請求數量很是多時,會大量擠佔系統的資源如內 存,CPU時間等,形成效能低下。

FastCGI
fast-cgi 是cgi的升級版本,FastCGI像是一個常駐(long-live)型的CGI,它能夠一直執行着,只要激活後,不會每次都要花費時間去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI進程管理器進行管理。html

FastCGI的工做原理
linux

 

  1. Web Server啓動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)
  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進程管理器(運行在Web Server中)的下一個鏈接。 在CGI模式中,php-cgi在此便退出了。

 

在上述狀況中,你能夠想象CGI一般有多慢。每個Web 請求PHP都必須從新解析php.ini、從新載入所有擴展並重初始化所有數據結構。使用FastCGI,全部這些都只在進程啓動時發生一次。一個額外的 好處是,持續數據庫鏈接(Persistent database connection)能夠工做。數據庫

APACHE2HANDLER
PHP做爲Apache模塊,Apache服務器在系統啓動後,預先生成多個進程副本駐留在內存中,一旦有請求出 現,就當即使用這些空餘的子進程進行處理,這樣就不存在生成子進程形成的延遲了。這些服務器副本在處理完一次HTTP請求以後並不當即退出,而是停留在計 算機中等待下次請求。對於客戶瀏覽器的請求反應更快,性能較高。
apache模塊的DLL:
該運行模式是咱們之前在windows環境下使用apache服務器常常使用的,而在模塊化(DLL)中,PHP是與Web服務器一塊兒啓動並運行的。(是apache在CGI的基礎上進行的一種擴展,加快PHP的運行效率)apache

ISAPI:
ISAPI即Internet Server Application Program Interface,是微軟提供的一套面向Internet服務的API接口.一個ISAPI的DLL,能夠在被用戶請求激活後長駐內存,等待用戶的另外一個請求,還能夠在一個DLL裏設置多個用戶請求處理函數,此外,ISAPI的DLL應用程序和WWW服務器處於同一個進程中,效率要顯著高於CGI。編程

cli:[php CLI模式介紹]
cli是php的命令行運行模式,你們常常會使用它,可是可能並無注意到(例如:咱們在linux下常常使用 「php -m」查找PHP安裝了那些擴展就是PHP命令行運行模式;windows

 

轉載自:http://www.phpddt.com/php/php-sapi.htmlapi

相關文章
相關標籤/搜索