PHP版本的区别

原文:PHP版本的区别

以为这个已经写过了,发现没有,赶紧补充下。

PHP的版本,自从进入5以后,发布新版本速度明显提升很多,从PHP5.2开始,5.3 、5.4 、5.5,就快要6.0了。

注:ecshop用户请自觉使用php5.2.17版本。呵呵。

在php官网下载php时,我们会发现有vc6、vc9的区别,这是什么意思呢?

VC6是legacy Visual Studio 6 compiler,使用这个版本的编译器编译PHP代码的,使用apache做应用程序服务器,则选择vc6。

VC9是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。使用IIS做应用程序服务器,则选择vc9。

那么,我们注意到,php-5.2.17-nts-Win32-VC6-x86.zip php的解压文件中,有nts和没有nts的区别,这个又是什么意思呢?

这要从php的5.2系列版本说起。从5.2.1版本开始,就有ts和nts的区别,Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)

Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。

从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是因为Linux/Unix系统是采用多进程的工作方式,而Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,因为CGI模式建立在多进程的基础之上,而不是多线程。我们在windows上会把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,非线程安全)的版本能够更好的提高效率。

根据不同的webserver,也就是应用程序服务器,在处理应用请求的时候,有些是用多线程而非多进程的方式,那么由于线程会牵扯到共享寄存器和内存方面的,所以很容易出错(考虑c语言指针的情况),那么系统就需要时间和资源来处理寄存器中的数据,保证它们的一致性,也就是保证线程安全了。

所以是否使用Thread Safe(线程安全),主要看web server所采用的PHP请求处理方式,如果是多线程处理如IIS的ISAPI方式,那么请选择线程安全,如果是FastCGI那么选择非线程安全。

最终建议:IIS下,使用ISAPI方式运行PHP,就使用Thread Safe(线程安全)的版本,使用FastCGI方式运行PHP,就使用None Thread Safe(NTS,非线程安全)的版本。

注:php5.2没有vc9,php5.3、php5.4没有vc6。呵呵。PHP5.5开始,不支持xp和win2003了,更是vc11了,呵呵呵呵。

一般来说,我喜欢使用解压配置版本,更能了解PHP的设置和文件。有c语言基础的同仁可以下载源码看看,说不定更有所心得。

时间: 2024-10-10 02:54:59

PHP版本的区别的相关文章

Python3和以前版本的区别

Python3.0和以前版本的区别 (1)print .3.1版本之后要用括号括起来(print("abs"),类似于java)而2.0版本不用. (2)input代替了2.0版本的raw_input: (3)3.0版本没有file函数了,要打开文件要用open:f = open(shoplistfile,'wb'); (4)没有了Cpickle模块了,使用pickle模块: (5)使用pickle.dump()方法时,打开文件的读操作要是"wb",使用load方法

MVC2 ,MVC3 ,MVC4,MVC5的区别,EF的各个版本的区别;LocalDB是个啥

EF6 在 code first的模式下,codefrist不支持的数据库更多,比如access,sqlite,sql compact 3.5,mysql,oracle 关于LocalDB的介绍 类似于sqlite (但是sqlite是不支持存储过程的,而LocalDB则支持存储过程) 导读:LocalDB是SQL Server 2012带来的新特性,它是一个专门为开发人员量身定制的轻量级数据库.本文将为您讲解LocalDB的开发背景,展示其核心特性,并看看它与微软的其它轻量级数据库到底有何不同

debug版本和release版本的区别?

好久没有做web项目了,这项目完成了要发布网站,不好忘了 以前操作过的? 还好脑子还是有点印象 现还是 写个文档吧记录吧 免得 以后作别的了又忘了 那可不妙啊 网站发布步骤:1.先将debug改为Release编译 2.点击web网站点击发布将发布的文件保存在一个文件中 3.将修改过的的编译文件发布到测试服务器或上线服务器 注意:若出现一些问题重新加载一下web.config重新运行一下(对其文件做修改如打空格即可) 再刷新页面即可 今天主要是来讲debug版本和release版本的区别呢? 为

php5 NTS和TS版本的区别

php5 non-thread-safe和thread-safe这两个版本的区别 从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择呢?下面聚友将为您讲述. 先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查:Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以

opencv-3.0.0-beta的windows环境下的配置及与opencv2版本的区别

我的机器:64位系统 第一步: opencv官网下载opencv3.0.0-beta版本,解压到自己的目录,我的目录是E:\,解压后在E盘出现名为opencv的文件夹,该文件夹下有两个子文件夹 第二步:配置环境变量: 右击 ,选择"属性"->"高级系统设置"->"高级"->"环境变量"->"系统变量Path"->添加 E:\opencv\build\x64\vc10\bin,然

VS中 Debug和Release版本的区别

VS Debug和Release版本的区别 1. 变量.大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值近似于随机(我想是直接从内存中分配的,没有初始化过).这样就明确了,如果你的程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将导致流程导向不一致:用作数组下标将会使程序崩溃:更加可能是造成其他变量的不准确而引起其他的错误.所以在声明变量后马上对其初始化一个默认的值是最简单有效的办法

Java JDK 版本的区别

jdk6和jdk5相比的新特性有: 1.instrumentation 在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument.本地代码 instrument,以及动态改变 classpath 等等. 2.Http有所增强 3. Java 管理扩展(JMX) 架构及其框架,以及在 Java SE 5 中新引入的 JMX API -- java.lang.management 包 4.JDK 6 中新增加编译器 API(JSR 199)

驰骋工作流引擎开源版本与商业版本的区别

驰骋工作流商业版本主要是有技术服务,有公司使用授权,以下表单仅仅列出2017版,商业与开源两个版本的区别. 流程引擎 模块 功能 开原版 商业版 应用模式 公司单机版 支持 支持 集团化单机版 支持 支持 集团模式二级管理员 不支持 支持 项目管理模式 项目管理模式 不支持 支持 资料树 不支持 支持 用户模式 外部用户登录 不支持 支持 外部用户参与节点工作 不支持 支持 流程模式 自由流程模式 不支持 支持 异步表单分合流 不支持 支持 流程属性 业务枚举 不支持 支持 表单引擎 模块 功能

MySQL各版本的区别

文章出自:http://blog.sina.com.cn/s/blog_62b37bfe0101he5t.html 感谢作者的分享 MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会有几个版本的选择. 1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持.2. MySQL Enterprise Edition 企业版本,需付费,可以试用30天.3. MySQL Cluster 集群版,开源免费.可将