PHP x86,x64,VC6,VC9,VC11,TS和NTS的选择

        在windows下搭建PHP环境时,我们从PHP官网下载PHP常常会遇到 x86,x64,VC6、VC9、VC11以及Thread Safe(以下简称TS)和Non Thread Safe(一下简称NTS)等多个版本的选择,不熟悉的往往只能随机选择一个版本下载安装,其结果往往是无法运行或者在运行过程中产生各种奇怪的问题。那 么这些不同的版本到底有哪些含义呢?官网已经做说明了:

  • x86与x64比较好理解,如果操作系统是32位的就选x86,如果是64位的就选x64。

  • VC6版本是指用Visual Studio 6编译器编译的,不过官方从5.3.5以后就不再提供VC6版本。

  • VC9版本是指用Visual Studio 2008编译的,下载安装需要事先安装Visual C++ Redistributable for Visual Studio 2008 SP1。

  • VC11版本是指用VisualStudio2012编译的,下载安装需要事先安装Visual C++ Redistributable for Visual Studio 2012。

  • TS:Thread Safe 线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源;

  • NTS:Non Thread Safe 非线程安全, 在执行时不进行线程(Thread)安全检查。

        与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就必须用ThreadSafe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。

如果是用Apache httpd来发布PHP,还会遇到另外一个问题:Apache httpd的官方发布版本只有VC6编译的,这也就意味着Apache httpd的官方最新版本与PHP的官方最新版本是不兼容的!

那么现有的Apache+PHP怎么配置呢?可以自己下载Apache httpd的源码自己用VC9或者VC11编译Apache httpd,或者下载PHP的源码用VC6编译,但这两个方式都比较折腾。再者就是下载第三方用VC9或VC11打包好的Apache httpd了,推荐http://www.apachelounge.com/,这也是PHP官方推荐的方式。

        另外需要说明的一点是:VC11不支持windows XP和windows Server 2003及以下版本的windows,所以,截止目前,VC9版本的最高官方发布版本是5.4.40。


你可能感兴趣的:(PHP x86,x64,VC6,VC9,VC11,TS和NTS的选择)