• 欢迎访问MACD实战投资网站,推荐使用最新版谷歌Chrome浏览器访问本网站,关注公众号 丁火甲木庚金 www.macd11.com/subscriptions

Windows里PHP5.x的VC6、VC9、Thread Safe、Non Thread Safe各种版本区别

未分类 丁火 14年前 (2011-04-01) 1747次浏览 0个评论

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 SafeVC6 x86 Thread Safe。我囧~~

我开始就下了个PHP5.3的VC9 x86 Thread Safe版本,配合nginx用FastCGI模式运行,开始一切正常。30分钟左右,突然提示FastCGI程序遇到问题关闭。之后几次我重启FastCGI都还是如此。切换到IIS7.5里跑,又很正常。后来一想,会不会是php版本的问题,之后用VC9 x86 Non Thread Safe版本跑,马上恢复正常。为什么会出现这个问题呢?
下面简单总结一下这几个版本的区别:

FastCGI程序非法关闭的日志信息:

<System>
<Provider Name=”Application Error” />
<EventID Qualifiers=”0“>1000</EventID>
<Level>2</Level>
<Task>100</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime=”2011-04-01T00:28:00.000000000Z” />
<EventRecordID>1430</EventRecordID>
<Channel>Application</Channel>
<Computer>IBM-T43</Computer>
<Security />
</System>
<EventData>
<Data>php-cgi.exe</Data>
<Data>5.3.6.0</Data>
<Data>4d81e480</Data>
<Data>php5ts.dll</Data>
<Data>5.3.6.0</Data>
<Data>4d81e545</Data>
<Data>c0000005</Data>
<Data>000f75e0</Data>
<Data>a48</Data>
<Data>01cbf003a7ad378a</Data>
<Data>D:\Server\PHP\v5.3\php-cgi.exe</Data>
<Data>D:\Server\PHP\v5.3\php5ts.dll</Data>
<Data>e58e10fa-5bf6-11e0-8fd9-005056c00008</Data>
</EventData>
</Event>

一、如何选择PHP5.3的VC9版本和VC6版本

VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。
VC9版本是使用Visual Studio 2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。

二、如何选择PHP5.3的Thread SafeNon 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跑。


macd11.com 和 丁火甲木庚金 公众号版权所有丨如未注明 , 均为原创丨转载请注明原文链接。
喜欢 (0)
[sp91@qq.com]
分享 (0)

您必须 登录 才能发表评论!