這篇文章主要介紹了php的4種常見運行方式,本文講解了CGI、FastCGI、APACHE2HANDLER、CLI等4種運行方式,需要的朋友可以參考下
SAPI:Server Application Programming Interface服務端應用編程連接埠。他就是php與其他應用互動的介面,php指令碼要執行有很多中方式,通過web伺服器,或者直接在命令列行下,也可以嵌入其他程式中。SAPI提供了一個和外部通訊的介面,常見的SAPI有:cgi、fast-cgi、cli、Apache模組的dll等。
1、CGI
CGI即通用閘道介面(common gatewag interface),它是一段程式,通俗的講CGI就象是一座橋,把網頁和WEB伺服器中的執行程式串連起來,它把HTML接收的指令傳遞給伺服器的執 行程式,再把伺服器執行程式的結果返還給HTML頁。CGI 的跨平台效能極佳,幾乎可以在任何作業系統上實現。
CGI方式在遇到串連請求(使用者 請求)先要建立cgi的子進程,啟用一個CGI進程,然後處理請求,處理完後結束這個子進程。這就是fork-and-execute模式。所以用cgi 方式的伺服器有多少串連請求就會有多少cgi子進程,子進程反覆載入是cgi效能低下的主要原因。都會當使用者請求數量非常多時,會大量擠占系統的資源如內 存,CPU時間等,造成效能低下。
2、FastCGI
fast-cgi 是cgi的升級版本,FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行著,只要啟用後,不會每次都要花費時間去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI進程管理器進行管理。
Web Server啟動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)。FastCGI進程管理器自身初始化,啟動多個CGI解譯器進程(可見多個php-cgi)並等待來自Web Server的串連。
當用戶端請求到達Web Server時,FastCGI進程管理器選擇並串連到一個CGI解譯器。Web server將CGI環境變數和標準輸入發送到FastCGI子進程php-cgi。
FastCGI子進程完成處理後將標準輸出和錯誤資訊從同一串連返回Web Server。當FastCGI子進程關閉串連時,請求便告處理完成。FastCGI子進程接著等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個串連。 在CGI模式中,php-cgi在此便退出了。
在上述情況中,你可以想象CGI通常有多慢。每一個Web 請求PHP都必須重新解析php.ini、重新載入全部擴充並重初始化全部資料結構。使用FastCGI,所有這些都只在進程啟動時發生一次。一個額外的 好處是,持續資料庫連接(Persistent database connection)可以工作。
3、APACHE2HANDLER
PHP作為Apache模組,Apache伺服器在系統啟動後,預先產生多個進程副本駐留在記憶體中,一旦有請求出 現,就立即使用這些空餘的子進程進行處理,這樣就不存在產生子進程造成的延遲了。這些伺服器複本在處理完一次HTTP請求之後並不立即退出,而是停留在電腦中等待下次請求。對於客戶瀏覽器的請求反應更快,效能較高。
4、CLI
cli是php的命令列運行模式,大家經常會使用它,但是可能並沒有注意到(例如:我們在linux下經常使用 “php -m”尋找PHP安裝了那些擴充就是PHP命令列運行模式;