PHP版本如何选择?应该使用哪个版本?


Posted in PHP onMay 13, 2015

超过75%的网站使用了PHP作为开发语言,wordpress,phpmyadmin和其他一些开源项目的盛行,带来了一大批的长尾用户。然而,他们一般安装之后却很少升级。下图是目前PHP的使用统计。

PHP版本如何选择?应该使用哪个版本?

惊人的是,此图的左半部分表示已经不被支持的PHP版本。PHP 5.2早在2011年1月已经不再维护。这并不意味着你就不能使用它,但是这意味着某些安全更新,你就无法跟进了。一些发行版将尝试修复一些BUG,但你的PHP版本似乎有点乏善可陈,因为,你正在使用的是2006年的过时技术。

该从哪里开始

已经没有人选择PHP 5.2版本了,但这些事情已经发生了,但我不是说我写这篇博客来吐槽什么,更不是说给你一些升级的指南。通常他们使用的都是一些2006开始的主机空间,他们有一个“长期支持”的版本,来避免使用更新的版本,或者他们目前还没有升级的打算。又或者,理由真的很多。然而,好东西在新版的PHP等着您。

PHP 5.3 加入了很多有用的OOP特性!例如:匿名函数,SPL扩展不仅仅是迭代器,神话般的DateTime扩展都已经集成在PHP 5.3里面。还加入极其重要的E_DEPRECATED的错误报告标志。它会提醒您现在用的那些特性,将在下一版本无法使用。如果您已经在使用PHP 5.3,那么您往后的升级道路将会更加顺畅。如果您有线上程序运行在低版本,我不建议您升级。

PHP 5.4则进行了一系列的优化,它具有更快的执行效率和更少的内存占用。以下是基准测试的结果。

PHP版本如何选择?应该使用哪个版本?

不管你使用使用到traits特性,PHP 5.4提高了程序性能,并降低了硬件成本。所以,我建议您使用开源软件的时候要保持升级。

PHP 5.5 还在测试当中,不适用于生产环境。自PHP 5.3之后,升级的风险和改动都会大大降低。

下面是麦子同学整理的文章

大家在选择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版本如何选择?应该使用哪个版本?

None-thread-safe or thread-safe

Apache 一般选 none-thread-safe,IIS选后者(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位,不解释,信哥。 

未来

说实话,未来是属于那些使用PHP5.4及以上的人。保持升级,定期跟踪语言的新特性和进展是我们日常工作的一部分。如果您已经落后了,那么我强烈建议您开始做升级计划,升级到一个比较新的版本。努力是值得的,毕竟程序是长年累月运行的。

PHP 相关文章推荐
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
php二分查找二种实现示例
Mar 12 PHP
PHP批量生成静态HTML的简单原理和方法
Apr 20 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
thinkphp中html:list标签传递多个参数实例
Oct 30 PHP
PHP中使用数组指针函数操作数组示例
Nov 19 PHP
php在数组中查找指定值的方法
Mar 17 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
php 数组元素快速去重
May 05 PHP
PDO::query讲解
Jan 29 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
PHP Hash算法:Times33算法代码实例
May 13 #PHP
你应该知道PHP浮点数知识
May 13 #PHP
PHP浮点数精度问题汇总
May 13 #PHP
PHP生成器简单实例
May 13 #PHP
php实现比较两个字符串日期大小的方法
May 12 #PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 #PHP
PHP异常处理浅析
May 12 #PHP
You might like
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
JavaScript函数节流概念与用法实例详解
2016/06/20 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
python文件操作相关知识点总结整理
2016/02/22 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
自荐信写法介绍
2014/01/25 职场文书
高级编程求职信模板
2014/02/16 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
2015年前台文员工作总结
2015/05/18 职场文书