PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析


Posted in PHP onApril 04, 2016

编辑整理:麦子

大家在选择PHP版本时一定很困惑,有这么多版本究竟选那个呢?

问题:

我们现在新买了个服务器,用的是windows server 2008 r2。配置php 5.4的环境。
但我们之前开发的用2003,php是用5.2版本的,移植到新服务器,程序运行会有影响吗?或者我还需要注意那些问题?
API版本

PHP采用大版本向下兼容的升级方式,也就是说5.5兼容5.1-5.4,话虽如此,实际上兼容性并不乐观,大家也不要指望PHP官方会给出什么好的解决办法。现在2013年9月,版本有5.2.17 5.3.27 5.4.17 5.5.3

5.2.17
这一版本可以说是支持最广泛的版本了,现在还有绝大部分开源软件使用该版本,例如Drupal7.23,Joomla2.5,国内绝大多数软件:dedecms5.7,discuzX3等等最新版还在支持5.2,如果没特别要求,安装这一版本是最省心省力的,但长远来看可能终要被抛弃。现在许许多多的主机商为了省人力成本也懒得去升级PHP版本,反正基本上都支持。(这里插一句,现在国内软件为了兼容更多的安装环境,可谓用心良苦,甚至PHP5.1也能支持(discuzX3不支持),最难得的是性能竟然也没落后多少,能做到如些极致真心不容易!)Drupal6建议使用该版本。

5.3.28(推荐)
这个版本虽然名称上是5开头,但很多人认为是PHP6.0版本的开始,性能有所提升,而且因为许多API都发生了变化,对5.2的兼容不太好,虽然有一部分开源软件声称能兼容5.2-5.3,但问题好像也不少,许多索性就放弃5.2了,例如Joomla3只支持5.3以上。而对于Drupal7强烈建议使用该版本,支持相当好。而对于Drupal8也可以使用该版本,支持也相当不错。该版本使用范围非常广,在兼顾性能和兼容性之间做出一个不错的平衡点。

5.4(轻轻推荐)
5.4基本上已经接近完整体了,现时比较完善,稳定性和性能也不错,未来升级的重点版本,Drupal7.X对其支持尚可,但第三方模块还不太完美。如果懒得以后升级,可以一步到位安装该版本。

5.5
从5.3开始,以后版本基本上都是主打性能上的提升,函数什么的都能向后兼容。5.5开始好像有了64位版本,性能更加强劲,我没试过,不敢发表言论。

总结
如果开源软件说建议安装PHP5.3,那你就老老实实用5.3,别用5.5什么的,你可能认为反正都能兼容,性能可能更好,为什么不用新的呢?话是这么说,但你知道开源软件在开发的时候一般都是在特定的环境开发,就算兼容再好也会有想不到的意外(再强大的队伍也不可能对所有函数API进行兼容测试,那是相当可怕的工作量!),它只会在特定的环境下进行测试和优化,而且就算知道兼容有问题,团队也不会去为了兼容更高版本去修改,不是他们死板,而是为了安全和稳定来考虑的。在开源氛围下,我们应该有个意识就是“够用就是最好”,而不是“最新是最好”。举个列子,Joomla3.1在5.4-5.5都运行不良,甚至安装不能成功。但Drupal却在5.5.3下也运行正常(本机),我想是个别案例吧?但好像运行中出现过意料之外的错误,不知道是不是版本的问题,希望不是。

PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析

None-thread-safe or thread-safe

Apache 一般选 none-thread-safe,IIS选后者(FAST-CGI),我就不解释了,信哥就没错。

三水点靠木小编补充一下: 2003系统中,我们一般用isapi加载,如果是2008及以上系统用fast-cgi方式。

TS指Thread Safety,即线程安全,一般在IIS以ISAPI方式加载的时候选择这个版本。

NTS即None-Thread Safe,一般以fast cgi方式运行的时候选择这个版本,具有更好的性能。
从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,非线程安全)的版本能够更好的提高效率。

64位和32位的选择问题

你的系统是64位就选64位,是32位就选32位,不解释,信哥。

三水点靠木小编补充:很多情况下我们不能保证我们所有需要iis中加载的软件都是64位的,有些软件还必须用32格式兼容跑。

PHP 相关文章推荐
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
php防止sql注入代码实例
Dec 18 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
PHP模块memcached使用指南
Dec 08 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
利用php生成验证码
Feb 23 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 PHP
php pdo连接数据库操作示例
Nov 18 PHP
PHP命名空间和自动加载类
Apr 03 #PHP
PHP中的Trait 特性及作用
Apr 03 #PHP
PHP错误处理函数
Apr 03 #PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 #PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
Apr 02 #PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
Apr 02 #PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 #PHP
You might like
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Hadoop中的Python框架的使用指南
2015/04/22 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
小学毕业感言150字
2014/02/05 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
优秀教师个人总结
2015/02/11 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
拙作再改《我的收音机情缘》
2022/04/05 无线电