Windows下的PHP開發環境搭建——PHP執行緒安全與非執行緒安全、Apache版本選擇,及詳解五種執行模式。
Windows下的PHP開發環境搭建——PHP執行緒安全與非執行緒安全、Apache版本選擇,及詳解五種執行模式。
今天為在Windows下建立PHP開發環境,在考慮下載何種PHP版本時,遭遇一些讓我困惑的情況,為了解決這些困惑,不出意料地牽扯出更多讓我困惑的問題。
為了將這些困惑一網打盡,我花了一下午加一晚上的時間查閱了大量資料,並做了一番實驗後,終於把這些困惑全都搞得清清楚楚了。
說實話,之所以花了這麼多時間,很大程度上是由於網上的資料幾乎全都是支離破碎、以訛傳訛的。既然我已經搞懂了,就花時間整理出來,即方便自己看,也便於大家閱讀。相信通過這篇文章,可以解答很多在Windows下搭建PHP開發環境的朋友的困惑。
關於從何處下載Apache:
要安裝Apache,你可能想當然地會去Apache官方網站下載適用於Windows的二進位制版本。而這恰恰錯了!
PHP官方不建議在Windows下安裝從apache.org網站下載的Apache二進位制安裝包。原因是如果你使用來自apache.org的安裝包,則由於這些安裝包是基於陳舊的Visual Studio 6編譯的,導致你不得不必須使用同樣陳舊的PHP版本(即VC6的PHP版本。也即使用Visual Studio 6編譯的PHP版本)才能與其配合使用。
要想使用最新版的PHP,應聽從PHP的官方建議。PHP官方的建議是你在Windows下可以使用IIS,或者使用來自Apache Lounge(www.apachelounge.com)的Apache版本。
Apache Lounge所提供的Apache二進位制安裝包是使用VC11建立的。因此可搭配最新版本的PHP使用。
網上很多資料說如果你是在Windows下使用 Apache,則必須使用PHP的VC6版本,只有使用IIS時才能使用VC9及以上版本,完全是沒有搞清情況的以訛傳訛。
如何選擇PHP版本(選擇執行緒安全還是非執行緒安全):
在Windows下安裝PHP,在選擇PHP版本上很有講究。
Windows下的PHP版本分兩種:執行緒安全版本與非執行緒安全版本。
如果你打算使用IIS,則你可以以ISAPI或FastCGI這兩種方式來安裝PHP。CGI的方式因為效率低下,故不予考慮。
如果你要在IIS中以FastCGI方式使用PHP,則你應該使用PHP的非執行緒安全的版本(Non-Thread Safe,NTS)。原因是以FastCGI方式安裝PHP時,PHP擁有獨立的程式,並且FastCGI是單一執行緒的,不存在多個執行緒之間可能引發的相互干擾(這種干擾通常都是由於全域性變數和靜態變數導致的)。由於省去了執行緒安全的檢查,因此使用FastCGI方式比ISAPI方式的效率更高一些。
如果你要在IIS中以ISAPI的方式使用PHP,則你應該使用PHP的執行緒安全版本(Thread Safe,TS)。原因是PHP以ISAPI方式安裝時,PHP沒有獨立的程式,而是作為DLL被IIS載入執行的,即是依附於Web伺服器程式的。當Web伺服器執行在多執行緒模式下(IIS正是這種情況),PHP自然也就執行在多執行緒模式下。只要是在多執行緒模式下執行,就可能存線上程安全問題,因此應選擇PHP的執行緒安全版本。
但在這裡還有必要說明一下,儘管Apache本身是執行緒安全的,同時你也選擇了PHP的執行緒安全版本,但由於一些Apache和PHP下的第三方擴充套件最初是基於Unix的多程式思想開發出來的,在設計開發時沒有考慮執行緒安全的問題,因此,不排除在這種情況下仍然存在IIS被某些第三方擴充套件搞崩潰的可能。
如果你打算使用Apache,則你可以以模組、ISAPI、FastCGI這三種方式來安裝PHP。CGI的方式因為效率低下,故不予考慮。
如果你要在Apache中以模組方式安裝PHP,則你應該使用PHP的執行緒安全的版本。原因是當PHP作為Apache的模組安裝時,PHP沒有獨立的程式,而是作為模組以DLL的形式被載入到Apache中的,是隨Apache的啟動而啟動的,而Windows下的Apache為多執行緒工作模式,因此PHP自然也就執行在多執行緒模式下。因此,這種情況下應使用PHP的執行緒安全版本。
再來看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的執行緒安全版本。
如果你要在Apache中以FastCGI方式使用PHP,則同在IIS中使用FastCGI的PHP的情況一樣,你應該使用PHP的非執行緒安全的版本。原因是在Apache中以FastCGI方式安裝PHP時,PHP擁有獨立的程式,並且FastCGI是單一執行緒的,故應使用PHP的非執行緒安全版本以提高效能。
相關文章
- 畫江湖之 PHP 多執行緒開發 【執行緒安全 互斥鎖】PHP執行緒
- 畫江湖之 PHP 多執行緒開發 [執行緒安全 互斥鎖]PHP執行緒
- Java執行緒(一):執行緒安全與不安全Java執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 詳解Java執行緒安全Java執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- iOS開發基礎——執行緒安全(執行緒鎖)iOS執行緒
- Java併發實戰一:執行緒與執行緒安全Java執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 小度分享-【多執行緒工作及執行緒安全】執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- 執行緒安全執行緒
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 併發程式設計之多執行緒執行緒安全程式設計執行緒
- PHP 的多程式與執行緒PHP執行緒
- 執行緒以及多執行緒,多程式的選擇執行緒
- 什麼是執行緒安全和執行緒不安全執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 畫江湖之 PHP 多執行緒開發 【建立一個新的執行緒】PHP執行緒
- 畫江湖之 PHP 多執行緒開發 [建立一個新的執行緒]PHP執行緒
- 靜態變數在多執行緒環境下的初始化是執行緒安全的嗎?變數執行緒
- 執行緒安全(二)執行緒
- Java執行緒安全Java執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- 多執行緒併發安全問題詳解執行緒
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Java 執行緒安全 與 鎖Java執行緒
- 集合框架與執行緒安全解決框架執行緒
- 執行緒與多執行緒執行緒
- Java—執行緒的生命週期及執行緒控制方法詳解Java執行緒
- pymysql 非執行緒安全導致的故障.MySql執行緒
- 多執行緒(五)---執行緒的Yield方法執行緒