线程安全与非线程安全PHP Windows安装包之间的技术差异是什么?


What are the technical differences between the Thread Safe and Non Thread safe PHP Windows Installation Packages?

我目前正准备为基于Apache/windows的开发环境安装PHP,但似乎我即将在第一个障碍中跌倒:选择正确的软件包来安装。

PHP有不少于四种版本:

  • VC9 x86非线程安全
  • VC9 x86 Thread Safe
  • VC6 x86非线程安全
  • VC6 x86 Thread Safe

这些版本在实际意义上有什么区别?

如果这还不够复杂的话,PHP 5.3版本只在VC9中可用(VC6包将附带5.2版本)。然而,根据PHP站点,您应该而不是在Apache中使用VC9…那么为什么Apache要使用旧版本呢?

经过大量的研究,我终于找到了我自己的答案。

在其最基本的形式,答案是:你应该安装什么版本的PHP取决于你正在运行的web服务器

下面是根据我所学到的内容对选择PHP版本时使用的术语的更深入的解释:


VC6 vs VC9

首先,不同版本的Apache for Windows使用不同的编译器进行编译。例如,Apache.org上的版本被设计为使用Microsoft Visual c++ 6进行编译,也称为VC6。这个编译器很流行,但也很老旧。(追溯到1998年)

针对不同的编译器有不同的Apache版本。例如,可以从ApacheLounge.com下载的版本被设计为使用流行的和最新的编译器Microsoft Visual c++ 9从2008年开始编译。也称为VC9

(注意:这两个编译器是最常用的两个选项。因此,虽然有可能有VC7, VC8等Apache的编译版本,但你不太可能遇到它们。

使用这个最新的编译器(VC9)是很重要的,因为最新版本的PHP只以VC9的形式发布(尽管VC6仍然可以使用旧版本)。

最重要的是,根据ApacheLounge,使用VC9编译的Apache版本在性能,内存管理和稳定性等方面有许多改进。

如果这还不够,PHP的开发人员在他们的网站上做了以下声明:

Windows用户:请注意我们这样做不再提供使用创建的构建Visual Studio c++ 6 (VC6)。它是不可能保持高质量和安全构建的PHP为Windows使用这个未维护的编译器

我们推荐VC9 Apache构建如下由ApacheLounge提供.

所有PHP用户都应该注意PHP不再支持5.2系列。强烈建议所有用户这样做升级到PHP 5.3.6.

总之,如果你问我的话,这是一个非常有说服力的理由来使用VC9版本的Apache和PHP。

因此,如果您正在使用来自官方Apache站点的Apache版本,它将使用VC6进行编译,因此,您应该为该编译器使用旧版本的PHP。如果你使用的是VC9编译的Apache版本,就像ApacheLounge.com上提供的那样,你可以使用最新版本的PHP(用于VC9)。

对于我来说,运行本地开发环境,最好使用最新版本的PHP,所以需要VC9版本的Apache,所以我可以使用VC9版本的PHP。

线程安全与非线程安全

再一次,这归结到你的web服务器。默认情况下,Apache在Windows上安装为Module,但它可以更改为运行为FastCGI。两者之间有很多不同之处,但从本质上讲,FastCGI更现代、更快、更健壮,而且更需要资源。对于运行本地开发环境的人来说,FastCGI可能是多余的,但显然许多托管公司由于我所说的原因而运行FastCGI,因此在开发环境中这样做是有很好的理由的。

如果你正在运行Apache(或IIS)作为FastCGI(或CGI),那么你需要非线程安全版本的PHP。如果你将Apache作为默认(作为一个模块)运行,那么你将需要更传统的线程安全版本。

请注意:这一切只适用于Windows用户。


我不打算麻烦FastCGI(除非有人说服我),所以对我来说,我想要的是VC9线程安全版本的PHP

就是这样。

进一步阅读:

    关于PHP和VC6的官方声明PHP线程安全与非线程安全二进制文件的区别
  • FastCGI在维基百科
  • FastCGI for IIS
  • Visual c++ at Wikipedia
  • 编译你自己的PHP (VC6/VC9的解释)

我个人使用虚拟化的LAMP服务器。我使用的每个托管服务都是基于某种Linux风格的,WAMP和LAMP之间有太多的差异。然后我只使用该版本Linux的默认tasksel LAMP服务器。

我现在的实际设置是VMWare (Mac上的Fusion, Windows上的Player)。我有3个虚拟机-一个用于PHP5.3和Ubuntu 10.04 LTS,另一个用于php5.1和Ubuntu 8.04 LTS。(我使用的一个主机是RedHat,它目前只支持PHP 5.1)。我有第三个虚拟机RubyOnRails开发。

换句话说,我试图使我的开发环境尽可能接近我的生产环境。所以弄清楚你主机上的Apache和PHP版本,并以此为指导。