標籤:
每次安裝php開發環境的時候總是得或多或少困惑一陣,今天來梳理一下apache,php之間的關係(根據http://www.ituring.com.cn/article/128439整理,添加。)
1.apache和php都是由visual studio編譯。
因此我們經常會遇到選擇VC6/VC9/VC11的困惑。PHP官方不建議在Windows下安裝從apache.org網站下載的Apache二進位安裝包。原因就是這些安裝包是基於陳舊的Visual Studio 6編譯的,導致你不得不必須使用同樣陳舊的PHP版本(即VC6的PHP版本。也即使用Visual Studio 6編譯的PHP版本)。PHP官方的建議是你在Windows下可以使用IIS,或者使用來自Apache Lounge(www.apachelounge.com)的Apache版本。
2.windows下php選擇安全執行緒的還是非安全執行緒的。
要弄清這個問題,首先要看選擇的伺服器,根據所選的伺服器以及php工作方式,再決定php的選擇。windows下我們可以選擇iis或apache。
1.採用iis時php有兩種工作方式:
2.1 isapi 則你應該使用PHP的安全執行緒版本(Thread Safe,TS)。原因是PHP以ISAPI方式安裝時,PHP沒有獨立的進程,而是作為DLL被IIS載入啟動並執行,即是依附於Web伺服器處理序的。當Web伺服器運行在多線程模式下(IIS正是這種情況),PHP自然也就運行在多線程模式下。只要是在多線程模式下運行,就可能存線上程安全問題,因此應選擇PHP的安全執行緒版本。
2.2 fastcgi 則應該使用PHP的非安全執行緒的版本(Non-Thread Safe,NTS)。原因是以FastCGI方式安裝PHP時,PHP擁有獨立的進程,並且FastCGI是單一線程的,不存在多個線程之間可能引發的相互幹擾(這種幹擾通常都是由於全域變數和靜態變數導致的)。由於省去了安全執行緒的檢查,因此使用FastCGI方式比ISAPI方式的效率更高一些。
2.採用apache時有三中工作方式:
在這裡還有必要說明一下,儘管Apache本身是安全執行緒的,同時你也選擇了PHP的安全執行緒版本,但由於一些Apache和PHP下的第三方擴充最初是基於Unix的多進程思想開發出來的,在設計開發時沒有考慮安全執行緒的問題,因此,不排除在這種情況下仍然存在IIS被某些第三方擴充搞崩潰的可能。
2.1 模組 如果你要在Apache中以模組方式安裝PHP,則你應該使用PHP的安全執行緒的版本。原因是當PHP作為Apache的模組安裝時,PHP沒有獨立的進程,而是作為模組以DLL的形式被載入到Apache中的,是隨Apache的啟動而啟動的,而Windows下的Apache為多線程工作模式,因此PHP自然也就運行在多線程模式下。
2.2 ISAPI 通常認為ISAPI是配合IIS使用的,因為ISAPI最初就是微軟為IIS開發的。但Apache現在也可以通過載入mod_isapi.so模組來實現ISAPI的功能,以允許PHP以ISAPI的方式安裝。.so檔案是Apache自1.3版本後制定的用於Windows下的模組命名規則,對於Windows下的Apache而言,.so與.dll檔案一樣,都是動態連結程式庫檔案。
當要以ISAPI方式來安裝PHP時,通常是載入一個名如phpXisapi.dll的DLL檔案,其中的X為阿拉伯數字4、5等等這樣子。
但一般不建議在Apache中以ISAPI方式來安裝PHP,原因是到目前為止,Apache通過mod_isapi.so模組來實現的ISAPI功能並不完整,並未完整實現微軟對ISAPI所制定的全部規範。同樣的,由於以ISAPI方式來安裝PHP時,PHP也沒有獨立的進程,也是作為模組被載入到Apache中的,因此,同樣也需要使用PHP的安全執行緒版本。
2.3 FastCGI 如果你要在Apache中以FastCGI方式使用PHP,則同在IIS中使用FastCGI的PHP的情況一樣,你應該使用PHP的非安全執行緒的版本。原因是在Apache中以FastCGI方式安裝PHP時,PHP擁有獨立的進程,並且FastCGI是單一線程的,故應使用PHP的非安全執行緒版本以提高效能。
windows下 php、apache 版本選擇 解惑說明