资源说明:从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模式对
标题中的“PHP 线程安全与非线程安全版本的区别深入解析”主要涉及的是PHP在Windows环境下,特别是在IIS服务器上,线程安全(Thread Safe, TS)和非线程安全(None Thread Safe, NTS)版本的选择及其对性能和安全性的影响。描述中提到了多进程与多线程的工作方式差异,以及CGI、ISAPI和FastCGI这三种不同的PHP运行模式。
线程安全和非线程安全是PHP在Windows环境下特有的概念,因为在Linux/Unix系统中,PHP主要基于多进程模型运行,而在Windows系统特别是IIS中,可以使用多线程的ISAPI扩展。线程安全版本的PHP是为了应对那些可能会在多线程环境中出现问题的扩展,它会进行线程安全检查,以确保在多线程环境下运行时的稳定性,但这种检查可能会带来额外的性能开销。非线程安全版本则不进行线程安全检查,因此在不涉及线程安全问题的环境中,比如使用FastCGI,它能提供更高的效率。
CGI模式下,每个HTTP请求都会启动一个新的PHP进程,这在高并发情况下会导致资源消耗过大。而ISAPI模式作为多线程的解决方案,可以复用进程,但某些扩展可能因设计原因在ISAPI中出现错误。FastCGI结合了CGI的稳定性和ISAPI的高效性,它允许多个进程同时处理请求,且能复用进程,从而提高了性能。
PHP的VC9和VC6版本区别在于编译器。VC9版本是使用Visual Studio 2008编译器编译的,仅适用于IIS服务器,不支持Apache。VC6版本则是使用较旧的Visual Studio 6编译器,兼容IIS和Apache。因此,Apache用户应选择VC6版本的PHP,而IIS用户应选择VC9版本。
在运行方式上,ISAPI适合线程安全版本的PHP,因为它使用DLL动态库并在处理请求后保持活跃,需要线程安全检查。FastCGI则适合非线程安全版本,因为它以单一线程运行,不需要线程安全检查,从而提高效率。
选择PHP线程安全或非线程安全版本应根据服务器类型和运行模式来决定。此外,安全方面,应考虑使用FastCGI以减少潜在的线程安全问题,同时关注PHP的其他安全实践,如过滤用户输入、使用安全的密码加密机制等,以确保应用程序的安全性。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。