php在apache中一共有三種工做方式: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已經不作這個產品了。
php在apache中一共有三種工做方式:CGI模式、FastCGI模式、Apache 模塊DLL)
如下分別比較:
1、CGI模式與模塊模式比較:
php在apache中兩種工做方式的區別(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