windows下 php、apache 版本選擇 解惑說明

每次安裝php開發環境的時候老是得或多或少困惑一陣,今天來梳理一下apache,php之間的關係(根據http://www.ituring.com.cn/article/128439整理,添加。)php

1.apache和php都是由visual studio編譯。apache

所以咱們常常會遇到選擇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版本。windows

2.windows下php選擇線程安全的仍是非線程安全的。api

要弄清這個問題,首先要看選擇的服務器,根據所選的服務器以及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爲阿拉伯數字四、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的非線程安全版本以提升性能。

相關文章
相關標籤/搜索