咱们先来看一段PHP官网的原话:apache
If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.安全
Please use the Apache builds provided by Apache Lounge. They provide VC9, VC11 and VC14 builds of Apache for x86 and x64. We use their binaries to build the Apache SAPIs.多线程
If you are using PHP as module with Apache builds from apache.org (not recommended) you need to use the older VC6 versions of PHP compiled with the legacy Visual Studio 6 compiler. Do NOT use VC9+ versions of PHP with the apache.org binaries.ide
With Apache you have to use the Thread Safe (TS) versions of PHP.ui
上面一段话翻译过来就是:spa
我选择哪一个版本?线程
IIS
若是你使用的是PHP的FastCGI IIS,你应该使用非线程安全(NTS)版本的PHP。翻译
Apache
请使用Apache Lounge提供的Apache构建。 他们提供了针对x86和x64的Apache的VC9,VC11和VC14版本。 咱们使用他们的二进制文件构建Apache SAPI。进程
若是你使用PHP做为apache.org(不推荐)的Apache模块,你须要使用旧的Visual Studio 6编译的VC6版本的PHP。 不要使用apache.org二进制文件的VC9 +版本的PHP。开发
使用Apache,您必须使用Thread Safe(TS)版本的PHP。
咱们来解释下上面的内容:
从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,非线程安全)的版本可以更好的提升效率。