針對 web server 而言,在 windows 環境下,如果你使用的 web server 是 apchae 或者 iis 7 以下版本,
則應該選擇線程安全的安裝文件,而如果你使用 Fast-cgi 模式時,可以選擇非線程安全,因為 web sever 本身能保證線程安全。
如果是使用 ISAPI 的方式來運行 PHP 就必須用 Thread Safe (線程安全) 的版本;
而用 FastCGI 模式運行 PHP 的話就沒有必要用線程安全檢查了,用 None Thread Safe (NTS,非線程安全) 的版本能夠更好的提高效率。
從 2000 年 10 月 20 日發布的第一個 Windows 版的 PHP3.0.17 開始的都是線程安全的版本,這是由於與 Linux/Unix 系統是采用多進程的工作方式不同的是 Windows 系統是采用多線程的工作方式。如果在 IIS 下以 CGI 方式運行 PHP 會非常慢,這是由於 CGI 模式是建立在多進程的基礎之上的,而非多線程。
一般我們會把 PHP 配置成以 ISAPI 的方式來運行,ISAPI 是多線程的方式,這樣就快多了。但存在一個問題,很多常用的 PHP 擴展是以 Linux/Unix 的多進程思想來開發的,這些擴展在 ISAPI 的方式運行時就會出錯搞垮 IIS。因此在 IIS 下 CGI 模式才是 PHP 運行的最安全方式,但 CGI 模式對於每個 HTTP 請求都需要重新加載和卸載整個 PHP 環境,其消耗是巨大的。
為了兼顧 IIS 下 PHP 的效率和安全,微軟給出了 FastCGI 的解決方案。FastCGI 可以讓 PHP 的進程重復利用而不是每一個新的請求就重開一個進程。同時 FastCGI 也可以允許幾個進程同時執行。這樣既解決了 CGI 進程模式消耗太大的問題,又利用上了 CGI 進程模式不存在線程安全問題的優勢。
因此,如果是使用 ISAPI 的方式來運行 PHP 就必須用 Thread Safe (線程安全) 的版本;而用 FastCGI 模式運行 PHP 的話就沒有必要用線程安全檢查了,用 None Thread Safe (NTS,非線程安全) 的版本能夠更好的提高效率。
PHP 官方 http://php.net/ 上關於 widows 的版本有 4 個:VC9 x86 Non Thread Safe,VC9 x86 Thread Safe,VC6 x86 Non Thread Safe,VC6 x86 Thread Safe;那么有什么區別呢?
1. 支持的服務器不同
VC9 版本是針對 IIS 服務器的版本,沒有對 APACHE 的支持,而 VC6 版本對 IIS 和 apache 都提供了支持
VC6 是什么?
VC6 就是 legacy Visual Studio 6 compiler ,就是使用這個編譯器編譯的。
VC9 是什么?
VC9 就是 the Visual Studio 2008 compiler ,就是用微軟的 VS 編輯器編譯的。
那我們如何選擇下載哪個版本的 PHP 呢?
如果你是在 windows 下使用 Apache+PHP 的,請選擇 VC6 版本;
如果你是在 windows 下使用 IIS+PHP 的,請選擇 VC9 版本;
2. 運行方式的不同
PHP 有 2 中運行方式:ISAPI 和 FastCGI。
ISAPI 執行方式是以 DLL 動態庫的形式使用,可以在被用戶請求后執行,在處理完一個用戶請求后不會馬上消失,所以需要進行線程安全檢查,這樣來提高程序的執行效率,所以如果是以 ISAPI 來執行 PHP,建議選擇 Thread Safe 版本;
而 FastCGI 執行方式是以單一線程來執行操作,所以不需要進行線程的安全檢查,除去線程安全檢查的防護反而可以提高執行效率,所以,如果是以 FastCGI 來執行 PHP,建議選擇 Non Thread Safe 版本。
對於 apache 服務器來說一般選擇 isapi 方式,而對於 nginx 服務器則選擇 FastCGI 方式。