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 相关文章推荐
做一个有下拉功能的留言版
Oct 09 PHP
php生成xml简单实例代码
Dec 16 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP数学运算与数据处理实例分析
Apr 01 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
PHP基于phpqrcode类生成二维码的方法详解
Mar 14 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字符串替换函数substr_replace()用法实例
2015/03/17 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
django form和field具体方法和属性说明
2020/07/09 Python
scrapy头部修改的方法详解
2020/12/06 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
升学宴来宾致辞
2015/07/27 职场文书
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL