PS:昨晚想在win7里调试个php程序,顺便试试nginx在win里的运行效率怎样。就配了一下。好长时间没在win里跑php了,去php官网一看,发现win版本的php居然有好几种。PHP官网(http://windows.php.net/download/)5.3一共给了四个版本,VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe。我囧~~
我开始就下了个PHP5.3的VC9 x86 Thread Safe版本,配合nginx用FastCGI模式运行,开始一切正常。30分钟左右,突然提示FastCGI程序遇到问题关闭。之后几次我重启FastCGI都还是如此。切换到IIS7.5里跑,又很正常。后来一想,会不会是php版本的问题,之后用VC9 x86 Non Thread Safe版本跑,马上恢复正常。为什么会出现这个问题呢?
下面简单总结一下这几个版本的区别:
FastCGI程序非法关闭的日志信息:
VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。
VC9版本是使用Visual Studio 2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本
先从字面意思上理解,Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。
再来看PHP的两种执行方式:ISAPI和FastCGI。
ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;
而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。
总结:如果是以FastCGI方式(搭配IIS、apache、nginx)来执行PHP ,都建议下载、执行 non-thread safe 版本的 PHP(PHP的二进位档有两种包装方式:msi 、zip ,建议使用zip解压包)。而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。在生产环境里跑php,还是Linux为王。如果一定需要win环境,建议用Win Server 2008 R2的IIS 7.5跑。