php在apache中一共有三種工做方式:CGI模式、FastCGI模式、Apache 模塊DLL

phpapache中一共有三種工做方式:CGI模式、FastCGI 、FastCGI是什麼? 

  FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行 爲是將CGI解釋器進程保持在內存中並所以得到較高的性能。衆所周知,CGI解釋器的反覆加載是CGI性能低下的主要緣由,若是CGI解釋器保持在內存中 並接受FastCGI進程管理器調度,則能夠提供良好的性能、伸縮性、Fail-Over特性等等。 

  FastCGI的官方站點在http://www.fastcgi.com 一、Web Server 啓動時載入FastCGI進程管理器(IIS ISAPI或Apache Module); 

  二、FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程 (在任務管理器中可見多個php-cgi.exe)並等待來自Web Server的鏈接。 

  三、當客戶端請求到達Web Server時,FastCGI進程管理器選擇並鏈接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi.exe。 

  四、FastCGI子進程完成處理後將標準輸出和錯誤信息從同一鏈接返回Web Server。當FastCGI子進程關閉鏈接時,請求便告處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在 WebServer中)的下一個鏈接。 在正常的CGI模式中,php-cgi.exe在此便退出了。 

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

  2、爲何要使用FastCGI,而不是多線程CGI解釋器? 

  這可能出於多方面的考慮,例如: 

  一、你不管如何也不能在windows平臺上穩定的使用多線程CGI解釋器,不管是IIS ISAPI方式仍是APACHE Module方式,它們老是運行一段時間就崩潰了。奇怪麼?可是確實存在這樣的狀況! 

  固然,也有不少時候你可以穩定的使用多線程CGI解釋器,可是,你有可能發現網頁有時候會出現錯誤,不管如何也找不到緣由,而換用FastCGI方式時 這種錯誤的機率會大大的下降。我也不清楚這是爲何,我想獨立地址空間的CGI解釋器可能終究比共享地址空間的形式來得穩定一點點。 

  二、性 能!性能?可能麼,難道FastCGI比多線程CGI解釋器更快?但有時候確實是這樣,只有測試一下你的網站,才能最後下結論。緣由嘛,我以爲很難講,但 有資料說在Zend WinEnabler的時代,Zend原來也是建議在Windows平臺下使用FastCGI而不是IIS ISAPI或Apache Module,不過如今Zend已經不作這個產品了。 

  phpapache中一共有三種工做方式:CGI模式、FastCGI模式、Apache 模塊DLL) 

  如下分別比較: 

  1、CGI模式與模塊模式比較: 

  phpapache中兩種工做方式的區別(CGI模式、Apache 模塊DLL) 

  這兩種工做方式的安裝: 

  PHP 在 Apache 2.0 中的 CGI 方式 

  ScriptAlias /php/ "c:/php/" 

  AddType application/x-httpd-php .php 

  # 對 PHP 4 用這行 

  Action application/x-httpd-php "/php/php.exe" 

  # 對 PHP 5 用這行 

  Action application/x-httpd-php "/php/php-cgi.exe" 

  PHP 在 Apache 2.0 中的模塊方式 

  # 對 PHP 4 用這兩行: 

  LoadModule php4_module "c:/php/php4apache2.dll" 

  # 別忘了從 sapi 目錄中把 php4apache2.dll 拷貝出來! 

  AddType application/x-httpd-php .php 

  # 對 PHP 5 用這兩行: 

  LoadModule php5_module "c:/php/php5apache2.dll" 

  AddType application/x-httpd-php .php 

  # 配置 php.ini 的路徑 

  PHPIniDir "C:/php

  這兩種工做方式的區別: 

  在CGI模式下,若是客戶機請求一個php文件,Web服務器就調用php.exe去解釋這個文件,而後再把解釋的結果以網頁的形式返回給客戶機; 

  而在模塊化(DLL)中,PHP是與Web服務器一塊兒啓動並運行的。 

  因此從某種角度上來講,以apache模塊方式安裝的 PHP4有着比CGI模式更好的安全性以及更好的執行效率和速度。 

  2、FastCGI運行模式分析: 

  FastCGI 模式運行 PHP 的優勢: 

  以 FastCGI 模式運行 PHP 有幾個主要的好處。首先就是 PHP 出錯的時候不會搞垮 Apache,只是 PHP 本身的進程當掉(但 FastCGI 會當即從新啓動一個新 PHP 進程來代替當掉的進程)。其次 FastCGI 模式運行 PHP 比 ISAPI 模式性能更好(我原本用 ApacheBench 進行了測試,但忘了保存結果,你們有興趣能夠本身測試)。 

  最後,就是能夠同時運行 PHP5 和 PHP4。參考下面的配置文件,分別創建了兩個虛擬主機,其中一個使用 PHP5,另外一個使用 PHP4。 

  LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll 

  ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/" 

  FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3 

  ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/" 

  FastCgiServer "d:/usr/local/php-4.3.11/php.exe" 

  Listen 80 

  NameVirtualHost *:80 

  DocumentRoot d:/www 

  Options Indexes FollowSymlinks MultiViews 

  ServerName php5.localhost 

  AddType application/x-httpd-fastphp5 .php 

  Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe" 

  IndexOptions FancyIndexing FoldersFirst 

  Options Indexes FollowSymLinks MultiViews 

  AllowOverride None 

  Order allow,deny 

  Allow from all 

  Listen 8080 

  NameVirtualHost *:8080 

  DocumentRoot d:/www 

  Options Indexes FollowSymlinks MultiViews 

  ServerName php4.localhost 

  AddType application/x-httpd-fastphp4 .php 

  Action application/x-httpd-fastphp4 "/fcgi-php4/php.exe" 

  Options Indexes FollowSymLinks MultiViews 

  AllowOverride None 

  Order allow,deny 

  Allow from all 

  使用上面的配置,訪問 http://localhost/就使用 PHP5,而訪問 http://localhost:8080/就使用 PHP4。因此只要合理配置,就可讓不一樣的虛擬主機使用不一樣版本的 PHP。FastCGI 模式的一些缺點: php


  說完了好處,也來講說缺點。從個人實際使用來看,用 FastCGI 模式更適合生產環境的服務器。但對於開發用機器來講就不太合適。由於當使用 Zend Studio 調試程序時,因爲 FastCGI 會認爲 PHP 進程超時,從而在頁面返回 500 錯誤。這一點讓人很是惱火,因此我在開發機器上仍是換回了 ISAPI 模式。 

  最後,在 Windows 中以 FastCGI 模式存在潛在的安全漏洞。由於我尚未找到如何在 Windows 環境下實現 SuEXEC 的方法,所以 PHP 的進程老是以最高權限運行,這從安全角度來看顯然不是個好消息。 很抱歉,由於您在網易相冊發佈了違規信息,帳號被屏蔽。被屏蔽期間他人沒法訪問您的相冊。數據庫

  去幫助中心,瞭解如何從新恢復服務。 apache

相關文章
相關標籤/搜索