PHP的ISAPI和FastCGI比較

來源:互聯網
上載者:User
PHP的ISAPI和FastCGI比較

http://www.cnblogs.com/huangye-dream/p/3560722.html

1、CGI(通用閘道介面/Common Gateway Interface)一般是可執行程式,例如EXE檔案,和WEB伺服器各自佔據著不同的進程,而且一般一個CGI程式只能處理一個使用者請求。這樣,當用 戶請求數量非常多時,會大量佔用系統的資源,如記憶體、CPU時間等,造成效能低下。

2、ISAPI(Internet Server Application Program Interface)是微軟提供的一套面向WEB服務的API介面,它能實現CGI提供的全部功能,並在此基礎上進行了擴充,如提供了過濾器應用程式接 口。ISAPI應用大多數以DLL動態庫的形式使用,可以在被使用者請求後執行,,在處理完一個使用者請求後不會馬上消失,而是繼續駐留在記憶體中等待處理別的 使用者輸入。此外,ISAPI的DLL應用程式和WEB伺服器處於同一個進程中,效率要顯著高於CGI。

3、FastCGI是可伸縮架構的CGI開放擴充,其主要行為是將CGI解譯器進程保持在記憶體中並因此獲得較高的效能。傳統的CGI解譯器的反覆載入是 CGI效能低下的主要原因,如果CGI解譯器保持在記憶體中並接受FastCGI進程管理器調度,則可以提供良好的效能、伸縮性等。

以 ISAPI 模式運行 PHP 的,這種方式最大的缺點就是穩定性不好,當 PHP 出錯的時候,Apache進程也死掉。

FastCGI 模式運行 PHP 的優點:

首先就是 PHP 出錯的時候不會搞垮 Apache,只是 PHP 自己的進程當掉(但 FastCGI 會立即重新啟動一個新 PHP 進程來代替當掉的進程)。

其次 FastCGI 模式運行 PHP 比 ISAPI 模式效能更好

最後,就是可以同時運行 PHP5 和 PHP4

FastCGI 模式的一些缺點:

用 FastCGI 模式更適合生產環境的伺服器,但對於開發用機器來說就不太合適。因為當使用 Zend Studio 偵錯工具時,由於 FastCGI 會認為 PHP 進程逾時,從而在頁面返回 500 錯誤。

從版本 4.3.0 開始,PHP 提供了一種新類型的 SAPI(Server Application Programming Interface,服務端應用編程連接埠)支援,名為 CLI,意為 Command Line Interface,即命令列介面。顧名思義,該 SAPI 模組主要用作 PHP 的開發外殼應用。CLI SAPI 和其它 SAPI 模組相比有很多的不同之處。值得一提的是,CLI 和 CGI 是不同的 SAPI,儘管它們之間有很多共同的行為。

CLI SAPI 最先是隨 PHP 4.2.0 版本發布的,但仍舊只是一個實驗性的版本,並需要在運行 ./configure 時加上 –enable-cli 參數。從 PHP 4.3.0 版本開始,CLI SAPI 成為了正式模組,–enable-cli 參數會被預設得設定為 on,也可以用參數 –disable-cli 來屏蔽。

從 PHP 4.3.0開始,CLI/CGI 二進位執行檔案的檔案名稱、位置和是否存在會根據 PHP 在系統上的安裝而不同。在預設情況下,當運行 make 時,CGI 和 CLI 都會被編譯並且分別放置在 PHP 源檔案目錄的 sapi/cgi/php 和 sapi/cli/php 下。可以注意到兩個檔案都被命名為了 php。在 make install 的過程中會發生什麼取決於配置行。如果在配置的時候選擇了一個 SAPI 模組,如 apxs,或者使用了 –disable-cgi 參數,則在 make install 的過程中,CLI 將被拷貝到 {PREFIX}/bin/php,除非 CGI 已經被放置在了那個位置。因此,例如,如果在配置行中有 –with–apxs,則在 make install 的過程中,CLI 將被拷貝到 {PREFIX}/bin/php。如果希望撤銷 CGI 執行檔案的安裝,請在 make install 之後運行 make install-cli。或者,也可以在配置行中加上 –disable-cgi 參數。

以下為 CLI SAPI 和其它 SAPI 模組相比的顯著區別:

* 與 CGI SAPI 不同,其輸出沒有任何頭資訊。儘管 CGI SAPI 提供了取消 HTTP 頭資訊的方法,但在 CLI SAPI 中並不存在類似的方法以開啟 HTTP 頭資訊的輸出。CLI 預設以安靜模式開始,但為了保證相容性,-q 和 –no-header 參數為了向後相容仍然保留,使得可以使用舊的 CGI 指令碼。在運行時,不會把工作目錄改為指令碼的目前的目錄(可以使用 -C 和 –no-chdir 參數來相容 CGI 模式)。出錯時輸出純文字的錯誤資訊(非 HTML 格式)。

* CLI SAPI 強制覆蓋了 php.ini 中的某些設定,因為這些設定在外殼環境下是沒有意義的。

  1. nginx+php-fpm實現原理及問題記錄
  2. connect() php-cgi.sock failed (2: No such file or directory) 問題解決
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.