1. 程式人生 > >PHP版本VC6與VC9 Thread Safe與None-Thread Safe等的區別

PHP版本VC6與VC9 Thread Safe與None-Thread Safe等的區別

               

轉載:http://www.cnblogs.com/whoknows/articles/2425841.html

最近發現很多PHP程式設計師對PHP版本知識瞭解不是很清楚,自己也看了不少類似的文章,還是感覺不夠明確和全面,網上的結論又都是模稜兩可,在此,給出最完整甚至武斷的解釋。

    本文講解:VC6與VC9,Thread Safety與None-Thread Safe,Apache module與fastcgi的區別與選擇。

PHP的大版本主要分三支:PHP4/PHP5/PHP6

  其中,PHP4由於太古老、對OO支援不力已基本被淘汰,請無視PHP4。

  PHP6由於基本沒有生產線上的應用,還基本只是一款概念產品,很多功能已在PHP5.3.3上實現,所以也不詳述,請無視PHP6。

  PHP5的版本主要分四支:PHP5.2之前的版本、PHP5.2.X、PHP5.3和日前釋出的PHP5.4。

那我們應該如何選擇適用自己專案的版本呢?

    PHP5.2之前的版本不值得考慮,因為某些功能缺陷或者BUG,PHP5.2之前的版本。PHP5.4還處於Beta試用的版本號,非穩定版本,請無視PHP5.4。

  主流PHP程式對PHP5.2.X的相容性最好,而每次版本號的升級帶來的都是安全性和穩定性的改善,所以宜挑選最新的版本。目前PHP5.2系列最新的是PHP5.2.17。

  而如果產品是自己開發自己使用,PHP5.3在某些方面更具優勢,在穩定性上更勝一籌,增加了很多PHP5.2所不具有的功能,比如內建php-fpm、更完善的垃圾回收演算法、名稱空間的引入、sqlite3的支援等等,是部署專案值得考慮的版本,強烈推薦PHP5.3.3。

  除了版本號的不同,同一版本號的PHP版本也有區別,並且在選擇PHP擴充套件的時候需要注意。

  • install版:可執行的MSI格式安裝包。
  • ZIP版:解壓即可用。和install版無區別。建議選擇ZIP版。
  • DEBUG版:請無視。

VC6與VC9

   對於VC6還是VC9版本的選擇,PHP官方網站有詳細的描述,原文如下:

Which version do I choose?If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHPIf you are using PHP with IIS you should use the VC9 versions of PHPVC6 Versions are compiled with the legacy Visual Studio 6 compilerVC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installedDo NOT use VC9 version with apache.org binaries
我該選擇哪個版本?如果你在apache1或者apache2下使用PHP,你應該選擇VC6的版本如果你在IIS下使用PHP應該選擇VC9的版本VC6的版本使用visual studio6編譯VC9使用Visual Studio 2008編譯,並且改進了效能和穩定性。VC9版本的PHP需要你安裝Microsoft 2008 C++ Runtime不要在apache下使用VC9的版本

TS和NTS

TS指Thread Safety,即執行緒安全,一般在IIS以ISAPI方式載入的時候選擇這個版本。

NTS即None-Thread Safe,一般以fast cgi方式執行的時候選擇這個版本,具有更好的效能。

  從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的版本?一個很簡單的辦法就是phpinfo();

Thread Safety disabled是NTS,enabled是TS

Configure Command看到VC98字樣的是VC6,Compiler標明 MSVC9 (Visual C++ 2008) 的是VC9

在WIN7下:IIS7+NTS+FastCGI+vc9 是最佳搭檔或者apache+fastcgi+nts+vc6。

在WINXP下:Apache+TS+Apache module +vc6最合適的搭檔。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

IIS

如果想使用IIS配置PHP的話,那麼需要選擇Non-Thread Safe(NTS)版本的PHP

Apache

如果你是用的Apache的版本來自Apache Lounge(website:http://apachelounge.com/),可以使用PHP VC11 x86或者x64版本。

如果你使用的是從apache.org下載的Apache1或者Apache2來搭建PHP環境的話,只能使用VC6版本,無法使用VC9+以上版本。

VC9 和VC11

VC9和VC11是PHP的最新版本(這兩個版本分別通過Visual Studio 2008和Visual Studio 2012編譯),其中包含了對於效能和穩定性的改進。

VC9版本要求使用者安裝Microsoft Visual C++ 2008 SP1 Redistributable Package(x86 | x64

VC11版本要求使用者安裝Visual C++ Redistributable for Visual Studio 2012(x86 | x64