最近在纠结 PHP 版本的问题,现版本 5.2 ,因种种原因需要升级版本,那么问题来了,究竟是升 5.5 还是 5.6 还是一步到 7 呢?
私下测试过 5.6 能跑起来但是有一些功能无法正常运行,被抛弃的语法需要做相应的改动。
按照惯例, PHP 是世界上最好的语言~
1 873681136 2016-03-02 20:41:11 +08:00 我目前做的校园项目都是基于 PHP 7.0 开发的 |
![]() | 2 ivmm 2016-03-02 20:45:59 +08:00 程序能兼容 php7 的,基本上都上了。 |
3 VmuTargh 2016-03-02 20:46:01 +08:00 一步到 7 不解释 |
![]() | 4 dapang1221 2016-03-02 20:46:55 +08:00 不敢上,生产环境不像是自己鼓捣完似的,一个是重新改代码麻烦,另一个是万一改完后出来莫名其妙的问题,再改回来可就麻烦了……所以说个人感觉这玩意既然能用就尽量别再动它。。 |
![]() | 6 yanyandenuonuo OP |
![]() | 9 yanyandenuonuo OP |
10 VmuTargh 2016-03-02 21:06:54 +08:00 @yanyandenuonuo 妾身用的是 openshift ,有现成的可以用,再说了编译数据库很耗时间。(不好意思我又抽风了) |
11 snnn 2016-03-02 21:14:05 +08:00 via Android 我们公司有一半的线上机器都换成 7 了 |
![]() | 12 yanyandenuonuo OP @VmuTargh 哦哦 没试过 不过这几天也在更改部署环境 估计明天就要编译一下试试了。。 |
![]() | 13 yanyandenuonuo OP @snnn 线上机器 != 生产环境吧 ,那另一半为啥没上 7 呢? |
![]() | 14 Zzzzzzzzz 2016-03-02 21:19:40 +08:00 5.5 七月停止安全支持. |
![]() | 15 kn007 2016-03-02 21:23:07 +08:00 生产已经是 7 |
![]() | 16 wujunze 2016-03-02 21:23:50 +08:00 我们生产是 php5.6 |
![]() | 17 vibbow 2016-03-02 21:41:10 +08:00 via Android 之前升到了 7 ,后来发现脚本连续运行几十分钟后有概率崩溃,就退回到 5.6 了。 |
![]() | 18 yanyandenuonuo OP |
![]() | 20 xiaoshangmin 2016-03-03 01:08:27 +08:00 via iPhone php7+mysql5.6 |
![]() | 21 iyaozhen 2016-03-03 01:16:12 +08:00 问这个没有意义呀。能上就上 |
![]() | 22 Wangxf 2016-03-03 02:44:37 +08:00 via iPhone 没有历史包袱了为啥不上呢 |
![]() | 23 kn007 2016-03-03 07:37:28 +08:00 @yanyandenuonuo 第一个版本有,后续修复了 |
24 wd0g 2016-03-03 08:24:57 +08:00 5.2...哥们刚才哪儿回来啊? |
25 furick 2016-03-03 08:55:24 +08:00 貌似 7 的 memcache 扩展有点问题? 有朋友实践成功了吗 |
![]() | 26 realpg PRO php7 早就生产环境了 redis 自己编译,不用复杂功能 redis 扩展无 bug 初期是 php5 php7 双 fpm 共存, fastcgi 7:3 负载均衡 同时做了一个值守进程, php7 的 fpm 所有程序功能性报错和未知错误进行记录,非单点请求出现超过几次,自动做个标志位禁用 php7fpm ,都丢到 php5 处理,同时提供完整日志和数据进出供测试复现,一周没出现问题的,撤掉 php5 的负载均衡,仍然保留 failsafe ,对于 php7 出现问题的时候, php7 停用全部交由 php5 处理。 两周后,生产环境干掉 php5 |
![]() | 27 realpg PRO 另外,我本人开发以及所有可以接受管辖的人开发的程序,统统有专门的向新兼容性要求,非常注意各种 php 版本在测试期就表现出来的未来不兼容特性,及时进行修改。所有 php 的版本变动的新特性和不兼容,我们都统一在公司技术会议 /培训时,最早的提前进行预警, php 出现第二位的版本变化,在测试环境对所有旧程序兼容性进行考验,如果出现不兼容且不兼容的具体位置是在开发时间点之前公司有布置下去的,提前预警过的,要进行处罚(非经济) |
28 simapple 2016-03-03 09:25:27 +08:00 所有新也许开发,只要不设计旧的兼容,无论系统 组件 语言 模式 一律按官方支持的最新版本 |
![]() | 29 realpg PRO ![]() 另外,公布一下我这边所有管理的开源项目、公司项目、个人项目、业余爱好项目的 PHP7 性能提升情况。 1. 简单网站,纯增删改查展示性,充分优化到具体页面都只是增删改查没有复杂逻辑,尤其是同时使用轻量级框架(比如 CI )的,以及复查度统统是复杂查询压到数据库上的复杂 SQL , PHP 端超级简单没有复杂逻辑的,这种项目 PHP7 的性能提升,不超过 5%,尤其是一些逻辑异常简单的 APP 后端的 RESTFUL API 类,同时使用情形框架的,性能完全无提升!实际项目,可以这么说,那些不涉及 MYSQL 重型查询的,平时在服务器上执行时间是 0.00XX 到 0.015X 之间的 PHP5 程序,到了 PHP7 基本还是这个执行时间(包含简单 MYSQL 查询开销的执行时间) 2. 纯 PHP 语法逻辑复杂的,性能提升十分明显,官方说的性能提升 50%,实际上看,比如一些财务性质的内部系统,数据库 /缓存提取简单数据后进行二次实时处理展示的,有些能提升 100%以上,压缩一半的执行时间。 3. 重型框架,那些加载机制异常复杂,功能完备,预载入特别多的重型框架,无论逻辑简单与否,性能提升都比较明显。比如 laravel ;由于 laravel 并没有内置简单 benchmark ,生产环境也不适合自己外挂个执行时间消耗内存的额外模块,以上为基于服务器负载 QPS 之类的大致推测 |
![]() | 30 yanyandenuonuo OP @vibbow 确定是因为 7 的异常处理机制导致的么 还是程序出现了严重的 bug @xiaoshangmin MySQL 是 5.6 的 但是 PHP 的话没确定 5.6 还是 7 , 5.5 的话因为之前没确定是否是今年停止更新才考虑,昨天看到了官方的版本说明确定了今年停止安全更,那就不考虑 5.5 了。另外 7 的话有遇到什么坑可以说下么 @iyaozhen 主要是公司生产环境 不是我一个人能主导的,所以想了解全面一点,然后放心大胆的说服大家上 7 啊 @Wangxf 有历史包袱,上 5.6 和上 7 改动都比较大 @kn007 7 的第一个版本? @wd0g [qweasd 星球] @furick 暂时还没用 memcache 不过后续有计划上 @realpg 第一条回复是个很棒的建议 ,第二条我也有过这样的思路 不过在我们这里不好执行罢了。。第三条我们的算是第三种吧 @simapple 是老版本迁移 个人项目是直接上最新版的。 |
31 codegeek 2016-03-03 10:02:22 +08:00 如果你的程序还没有出现性能瓶颈,还没有到必须优化的阶段,那么最好不要动;建议先在一些独立的新项目里使用。 |
![]() | 32 kn007 2016-03-03 10:04:36 +08:00 |
![]() | 33 Pastsong 2016-03-03 10:08:25 +08:00 via Android 公司代码库很多 5 , 6 年前的东西,不敢上 7 |
![]() | 34 barbery 2016-03-03 10:10:05 +08:00 基本上能跑在 PHP5.6 了 都可以直接上 7 ,密集运算的项目升 PHP7 ,性能感人,直飚几倍不是问题 |
![]() | 35 phpcxy 2016-03-03 10:18:27 +08:00 最近用 laravel5.1 写的一个项目,部署到 PHP7 上没问题~ |
![]() | 36 yanyandenuonuo OP |
![]() | 37 shyling 2016-03-03 10:48:19 +08:00 via Android 测试测试测试。 |
38 lucifer4he 2016-03-03 11:26:41 +08:00 开个分支升 7 呗,实在不行把代码往回一滚拉倒。 真相就是懒=。= |
![]() | 39 yanyandenuonuo OP @lucifer4he 是生产环境啊。。确定要升级版本并且没那么多人力物力去做这件事情。。所以只能确定好一个版本 然后 just do it 。 |
40 wdd2007 2016-03-03 12:12:15 +08:00 http://aso100.com/ 运行在 PHP 7 上 |
![]() | 41 endoffight 2016-03-03 12:39:04 +08:00 via iPhone 已用 702 |
42 lucifer4he 2016-03-03 12:56:31 +08:00 @yanyandenuonuo 我的意思不是两个版本并进=。= 虽然我不弄 php ,但是我所有和程序相关的东西,只要官方发了稳定版本,有空我都会升上去 |
![]() | 43 iyaozhen 2016-03-03 13:00:43 +08:00 其实这些都是虚的还有要靠测试说话。线上引流,小流量机制,这些都是很重要的。没有这些的话先线下测试,然后低流量时上一台机器试试。 |
![]() | 44 yanyandenuonuo OP @shyling 功能的话肯定要走测试流程的,性能的话项目貌似还没到优化的阶段,现阶段压力不大。 @wdd2007 看起来挺不错的样子 @endoffight 效果怎么样 @lucifer4he 生产环境一般不会轻易动啊 所以这次动一下估计未来 1 到 N 年内很难再做大的改动了。。 @iyaozhen 目前打算采用#26 的建议 正常升级 然后走测试 没问题做负载均衡 然后跑段时间没问题就完全上 7 |
![]() | 45 Grant06 2016-03-03 15:52:30 +08:00 |
![]() | 47 realpg PRO @yanyandenuonuo 我这边的 fastcgi upstream 的负载均衡使用了 OpenResty ,本质上 fastcgi 的配置使用了 lua 脚本,并不是静态配置,所以可以比较方便的上层统计各种错误,动态的决定把脚本处理丢给 php5-fpm 还是 php7-fpm ,可以通过外部标志位控制 failsafe 禁用 php7 ,把所有请求丢给 php5 这种。 如果使用纯 nginx 等基本 webserver ,想实现这个,在 conf 文件加 if 判断,性能估计感人 |
![]() | 48 yanyandenuonuo OP |
![]() | 49 realpg PRO @yanyandenuonuo 任何抛出的 PHP 错误,都算数。因为能推到生产环境下, PHP 不应该抛出语言的错误。 而且在 PHP5 上跑起来不会抛出 PHP ERROR ,在 PHP7 下能抛出来的才算。 至于因为不同特性导致预期不符,能通过 PHPUNIT 就认为没有了 |
![]() | 50 weer0026 2016-03-03 16:43:38 +08:00 我把公司以前的一个项目放到 PHP7 环境里了,除了一个 excel 的第三方库报了一个错,其他目前正常。 |
![]() | 51 Grant06 2016-03-03 16:43:58 +08:00 @yanyandenuonuo 部分业务是,还有很多其他语言的项目… |
![]() | 52 moliliang 2016-03-03 16:46:30 +08:00 @yanyandenuonuo 还好,不是很大,比不上阿里云,, |
![]() | 53 yanyandenuonuo OP |
54 edwinlll 2016-03-03 17:49:04 +08:00 @furick 去 github 上看,有支持 7 的分支, master 目前还不支持。主要 PHP7 很多的宏和方法都变了,扩展都需要重写。 |
![]() | 55 yanyandenuonuo OP @weer0026 貌似我们也有用到 excel 的第三方库== |
![]() | 56 sheldondai 2016-03-04 21:32:35 +08:00 已经升级 500 台生产服务器到 php7.0.3 了 |
![]() | 57 yanyandenuonuo OP @sheldondai 升级前版本呢? 升级后有坑么? |
![]() | 58 sheldondai 2016-03-07 11:17:01 +08:00 @yanyandenuonuo 7.0.3 以前 session 有 bug 。 0.3 已经修复。还有微信支付的 PHP SDK 稍微修改下就好了。其它没碰到 |
![]() | 59 yanyandenuonuo OP @sheldondai soga 暂时没用到微信支付:-) |
![]() | 60 yangqi 2016-03-08 10:32:53 +08:00 不上,等一堆小白鼠们把坑都填的差不多了再考虑上 |
![]() | 61 yanyandenuonuo OP @yangqi 填的差不多了又有 PHP7.1 可选了== |
![]() | 62 yangqi 2016-03-08 11:26:49 +08:00 @yanyandenuonuo 小版本之前不会有那么多坑的。但是从 5 跳到 7 变化太大了,坑不可避免 |
![]() | 63 realpg PRO |
![]() | 64 yangqi 2016-03-08 22:26:00 +08:00 @realpg http://php.net/manual/en/migration70.incompatible.php 不兼容的地方还是很多的,用框架的要好很多。如果自己写的,尤其是比较老的,即使升级到了 5.6 ,再到 7 肯定还会有坑的。不一定程序运行没问题就说明没坑,只是坑还没被踩到而已 |
65 aksoft 2016-03-12 17:03:25 +08:00 期待小白鼠的结果 |
66 mingyun 2016-04-05 22:48:46 +08:00 新项目就 php7 吧,据说性能比 5 高一倍,如果是原有项目不建议 |