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 CKEditor 上传图片实现代码
Nov 06 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
May 08 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
Zend Framework教程之Zend_Config_Xml用法分析
Mar 23 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
php判断电子邮件是否正确方法
Dec 04 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 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
关于php mvc开发模式的感想
2011/06/28 PHP
php写的AES加密解密类分享
2014/06/20 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
js 获取html5的data属性实现方法
2017/07/28 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python的urllib模块显示下载进度示例
2014/01/17 Python
python中xrange和range的区别
2014/05/13 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python实现汉诺塔方法汇总
2016/07/25 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
营业经理岗位职责
2013/11/10 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
详解Spring事件发布与监听机制
2021/06/30 Java/Android
python多线程方法详解
2022/01/18 Python