V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yanyandenuonuo
V2EX  ›  PHP

所以现在有多少生产环境用上了 PHP7?

  •  
  •   yanyandenuonuo · 2016-03-02 20:36:51 +08:00 · 5688 次点击
    这是一个创建于 3180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在纠结 PHP 版本的问题,现版本 5.2 ,因种种原因需要升级版本,那么问题来了,究竟是升 5.5 还是 5.6 还是一步到 7 呢?
    私下测试过 5.6 能跑起来但是有一些功能无法正常运行,被抛弃的语法需要做相应的改动。

    按照惯例, PHP 是世界上最好的语言~

    第 1 条附言  ·  2016-03-03 09:51:29 +08:00
    5.5 的话因为之前没确定是否是今年停止更新才考虑,昨天看了 @Zzzzzzzzz 的回复然后去搜了下官方的版本说明确定了今年停止安全更,那就不考虑 5.5 了。
    第 2 条附言  ·  2016-03-09 09:49:30 +08:00
    所以升级的过程肯定是一级一级升,那中间版本要走每个版本的测试吗?比如图 5.2 升到 7 ,那中间的 5.3 5.4 5.5 5.6 都要走测试流程么?
    66 条回复    2016-04-05 22:48:46 +08:00
    873681136
        1
    873681136  
       2016-03-02 20:41:11 +08:00
    我目前做的校园项目都是基于 PHP 7.0 开发的
    ivmm
        2
    ivmm  
       2016-03-02 20:45:59 +08:00
    程序能兼容 php7 的,基本上都上了。
    VmuTargh
        3
    VmuTargh  
       2016-03-02 20:46:01 +08:00
    一步到 7 不解释
    dapang1221
        4
    dapang1221  
       2016-03-02 20:46:55 +08:00
    不敢上,生产环境不像是自己鼓捣完似的,一个是重新改代码麻烦,另一个是万一改完后出来莫名其妙的问题,再改回来可就麻烦了……所以说个人感觉这玩意既然能用就尽量别再动它。。
    shiji
        5
    shiji  
       2016-03-02 20:48:11 +08:00
    @873681136
    @ivmm
    @VmuTargh
    那你们是自己编译的,还是用别人的第三方源?像 dotdeb 那种的?
    yanyandenuonuo
        6
    yanyandenuonuo  
    OP
       2016-03-02 20:50:26 +08:00
    @873681136 校园项目是指学生的项目 or 学校的项目?
    @ivmm 肯定一堆东西要改的 到 5.6 已经一堆抛弃的语法问题需要解决了
    @VmuTargh 我也想啊,但是有一些反对意见,所以要确定有哪些坑需要填
    ivmm
        7
    ivmm  
       2016-03-02 20:53:35 +08:00
    @shiji dotdeb 也用,自己编译也有。 编译为主
    VmuTargh
        8
    VmuTargh  
       2016-03-02 20:56:37 +08:00
    @shiji 自己编译……对于服务端的东西我一向编译,除了数据库
    yanyandenuonuo
        9
    yanyandenuonuo  
    OP
       2016-03-02 21:05:40 +08:00
    @dapang1221 现在是确定要升了,只是版本未定。升级版本肯定要走完整套完整测试流程的,只不过如果升 7 的话不知道会有哪些隐藏的坑。

    @VmuTargh 数据库为啥不能自己编译啊
    VmuTargh
        10
    VmuTargh  
       2016-03-02 21:06:54 +08:00
    @yanyandenuonuo 妾身用的是 openshift ,有现成的可以用,再说了编译数据库很耗时间。(不好意思我又抽风了)
    snnn
        11
    snnn  
       2016-03-02 21:14:05 +08:00 via Android
    我们公司有一半的线上机器都换成 7 了
    yanyandenuonuo
        12
    yanyandenuonuo  
    OP
       2016-03-02 21:16:20 +08:00
    @VmuTargh 哦哦 没试过 不过这几天也在更改部署环境 估计明天就要编译一下试试了。。
    yanyandenuonuo
        13
    yanyandenuonuo  
    OP
       2016-03-02 21:17:22 +08:00
    @snnn 线上机器 != 生产环境吧 ,那另一半为啥没上 7 呢?
    Zzzzzzzzz
        14
    Zzzzzzzzz  
       2016-03-02 21:19:40 +08:00
    5.5 七月停止安全支持.
    kn007
        15
    kn007  
       2016-03-02 21:23:07 +08:00
    生产已经是 7
    wujunze
        16
    wujunze  
       2016-03-02 21:23:50 +08:00
    我们生产是 php5.6
    vibbow
        17
    vibbow  
       2016-03-02 21:41:10 +08:00 via Android
    之前升到了 7 ,后来发现脚本连续运行几十分钟后有概率崩溃,就退回到 5.6 了。
    yanyandenuonuo
        18
    yanyandenuonuo  
    OP
       2016-03-02 22:01:26 +08:00
    @Zzzzzzzzz 是的 之前看了 5.4 的周期估计了一下 5.5 今年也会停止 看了你的回复去搜了下果然是今年 我是主导升级到 5.6 当然最好是 7 了

    @kn007 有遇到什么坑么

    @wujunze 目前待选的版本是 5.5 (其他人意见)、 5.6 or 7 (如果 7 没有重大问题)。

    @vibbow 没有查找崩溃原因么
    vibbow
        19
    vibbow  
       2016-03-02 23:19:13 +08:00
    @vibbow 是该扔 Exception 的地方,没有正确的扔出来 Exception ,而是直接整个进程驾崩了。
    xiaoshangmin
        20
    xiaoshangmin  
       2016-03-03 01:08:27 +08:00 via iPhone
    php7+mysql5.6
    iyaozhen
        21
    iyaozhen  
       2016-03-03 01:16:12 +08:00
    问这个没有意义呀。能上就上
    Wangxf
        22
    Wangxf  
       2016-03-03 02:44:37 +08:00 via iPhone
    没有历史包袱了为啥不上呢
    kn007
        23
    kn007  
       2016-03-03 07:37:28 +08:00
    @yanyandenuonuo 第一个版本有,后续修复了
    wd0g
        24
    wd0g  
       2016-03-03 08:24:57 +08:00
    5.2...哥们刚才哪儿回来啊?
    furick
        25
    furick  
       2016-03-03 08:55:24 +08:00
    貌似 7 的 memcache 扩展有点问题? 有朋友实践成功了吗
    realpg
        26
    realpg  
       2016-03-03 09:14:48 +08:00
    php7 早就生产环境了
    redis 自己编译,不用复杂功能 redis 扩展无 bug
    初期是 php5 php7 双 fpm 共存, fastcgi 7:3 负载均衡 同时做了一个值守进程, php7 的 fpm 所有程序功能性报错和未知错误进行记录,非单点请求出现超过几次,自动做个标志位禁用 php7fpm ,都丢到 php5 处理,同时提供完整日志和数据进出供测试复现,一周没出现问题的,撤掉 php5 的负载均衡,仍然保留 failsafe ,对于 php7 出现问题的时候, php7 停用全部交由 php5 处理。
    两周后,生产环境干掉 php5
    realpg
        27
    realpg  
       2016-03-03 09:18:53 +08:00
    另外,我本人开发以及所有可以接受管辖的人开发的程序,统统有专门的向新兼容性要求,非常注意各种 php 版本在测试期就表现出来的未来不兼容特性,及时进行修改。所有 php 的版本变动的新特性和不兼容,我们都统一在公司技术会议 /培训时,最早的提前进行预警, php 出现第二位的版本变化,在测试环境对所有旧程序兼容性进行考验,如果出现不兼容且不兼容的具体位置是在开发时间点之前公司有布置下去的,提前预警过的,要进行处罚(非经济)
    simapple
        28
    simapple  
       2016-03-03 09:25:27 +08:00
    所有新也许开发,只要不设计旧的兼容,无论系统 组件 语言 模式 一律按官方支持的最新版本
    realpg
        29
    realpg  
       2016-03-03 09:26:50 +08:00   ❤️ 2
    另外,公布一下我这边所有管理的开源项目、公司项目、个人项目、业余爱好项目的 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 之类的大致推测
    yanyandenuonuo
        30
    yanyandenuonuo  
    OP
       2016-03-03 09:50:19 +08:00
    @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 是老版本迁移 个人项目是直接上最新版的。
    codegeek
        31
    codegeek  
       2016-03-03 10:02:22 +08:00
    如果你的程序还没有出现性能瓶颈,还没有到必须优化的阶段,那么最好不要动;建议先在一些独立的新项目里使用。
    kn007
        32
    kn007  
       2016-03-03 10:04:36 +08:00
    Pastsong
        33
    Pastsong  
       2016-03-03 10:08:25 +08:00 via Android
    公司代码库很多 5 , 6 年前的东西,不敢上 7
    barbery
        34
    barbery  
       2016-03-03 10:10:05 +08:00
    基本上能跑在 PHP5.6 了 都可以直接上 7 ,密集运算的项目升 PHP7 ,性能感人,直飚几倍不是问题
    phpcxy
        35
    phpcxy  
       2016-03-03 10:18:27 +08:00
    最近用 laravel5.1 写的一个项目,部署到 PHP7 上没问题~
    yanyandenuonuo
        36
    yanyandenuonuo  
    OP
       2016-03-03 10:41:50 +08:00
    @Pastsong 5.4 已经停止安全更新了啊 5.5 也即将停止 总归要升级版本的吧

    @barbery 跑 5.6 一些功能是会报错的,暂时发现的问题主要是一些抛弃的语法,现在是不确定直接上 7 会不会有什么隐藏的坑 毕竟是生产环境。

    @phpcxy Laravel 5 好像就开始支持 7 了:-)
    shyling
        37
    shyling  
       2016-03-03 10:48:19 +08:00 via Android
    测试测试测试。
    lucifer4he
        38
    lucifer4he  
       2016-03-03 11:26:41 +08:00
    开个分支升 7 呗,实在不行把代码往回一滚拉倒。
    真相就是懒=。=
    yanyandenuonuo
        39
    yanyandenuonuo  
    OP
       2016-03-03 12:09:41 +08:00
    @lucifer4he 是生产环境啊。。确定要升级版本并且没那么多人力物力去做这件事情。。所以只能确定好一个版本 然后 just do it 。
    wdd2007
        40
    wdd2007  
       2016-03-03 12:12:15 +08:00
    http://aso100.com/ 运行在 PHP 7 上
    endoffight
        41
    endoffight  
       2016-03-03 12:39:04 +08:00 via iPhone
    已用 702
    lucifer4he
        42
    lucifer4he  
       2016-03-03 12:56:31 +08:00
    @yanyandenuonuo 我的意思不是两个版本并进=。=
    虽然我不弄 php ,但是我所有和程序相关的东西,只要官方发了稳定版本,有空我都会升上去
    iyaozhen
        43
    iyaozhen  
       2016-03-03 13:00:43 +08:00
    其实这些都是虚的还有要靠测试说话。线上引流,小流量机制,这些都是很重要的。没有这些的话先线下测试,然后低流量时上一台机器试试。
    yanyandenuonuo
        44
    yanyandenuonuo  
    OP
       2016-03-03 13:30:01 +08:00
    @shyling 功能的话肯定要走测试流程的,性能的话项目貌似还没到优化的阶段,现阶段压力不大。

    @wdd2007 看起来挺不错的样子

    @endoffight 效果怎么样

    @lucifer4he 生产环境一般不会轻易动啊 所以这次动一下估计未来 1 到 N 年内很难再做大的改动了。。

    @iyaozhen 目前打算采用#26 的建议 正常升级 然后走测试 没问题做负载均衡 然后跑段时间没问题就完全上 7
    Grant06
        45
    Grant06  
       2016-03-03 15:52:30 +08:00
    据我所知 B 站的 space.bilibili.com 域名已经是 PHP7 了…
    听说 account.bilibili.com 也离 7 不远了
    moliliang
        46
    moliliang  
       2016-03-03 15:58:14 +08:00
    锐壳也支持 php7 了~~~ rkidc.net
    realpg
        47
    realpg  
       2016-03-03 16:29:56 +08:00
    @yanyandenuonuo
    我这边的 fastcgi upstream 的负载均衡使用了 OpenResty ,本质上 fastcgi 的配置使用了 lua 脚本,并不是静态配置,所以可以比较方便的上层统计各种错误,动态的决定把脚本处理丢给 php5-fpm 还是 php7-fpm ,可以通过外部标志位控制 failsafe 禁用 php7 ,把所有请求丢给 php5 这种。

    如果使用纯 nginx 等基本 webserver ,想实现这个,在 conf 文件加 if 判断,性能估计感人
    yanyandenuonuo
        48
    yanyandenuonuo  
    OP
       2016-03-03 16:38:20 +08:00
    @Grant06 原来 B 站是 PHP 啊。。

    @moliliang 锐壳的用户量大么

    @realpg 我原来的想法是只做负载均衡,跑一段时间后查看使用 PHP7 的服务器的 log ,若没有重大问题就切过去,并没有考虑去统计各种错误。。。 麻烦问下您统计的各种错误一般指哪些呢 ?
    realpg
        49
    realpg  
       2016-03-03 16:41:30 +08:00
    @yanyandenuonuo
    任何抛出的 PHP 错误,都算数。因为能推到生产环境下, PHP 不应该抛出语言的错误。
    而且在 PHP5 上跑起来不会抛出 PHP ERROR ,在 PHP7 下能抛出来的才算。
    至于因为不同特性导致预期不符,能通过 PHPUNIT 就认为没有了
    weer0026
        50
    weer0026  
       2016-03-03 16:43:38 +08:00
    我把公司以前的一个项目放到 PHP7 环境里了,除了一个 excel 的第三方库报了一个错,其他目前正常。
    Grant06
        51
    Grant06  
       2016-03-03 16:43:58 +08:00
    @yanyandenuonuo 部分业务是,还有很多其他语言的项目…
    moliliang
        52
    moliliang  
       2016-03-03 16:46:30 +08:00
    @yanyandenuonuo 还好,不是很大,比不上阿里云,,
    yanyandenuonuo
        53
    yanyandenuonuo  
    OP
       2016-03-03 16:59:30 +08:00
    @realpg 那估计我们监控这些错误的意义不大,从来没发现过这些问题:-)

    @Grant06 soga 印象中之前 B 站好像招过 Python , by the way, B 站有内推么~

    @moliliang 那比腾讯云呢 或者它在国内的用户量排名大概在多少呢 没怎么了解过国内的虚拟主机提供商。。
    edwinlll
        54
    edwinlll  
       2016-03-03 17:49:04 +08:00
    @furick 去 github 上看,有支持 7 的分支, master 目前还不支持。主要 PHP7 很多的宏和方法都变了,扩展都需要重写。
    yanyandenuonuo
        55
    yanyandenuonuo  
    OP
       2016-03-04 09:22:02 +08:00
    @weer0026 貌似我们也有用到 excel 的第三方库==
    sheldondai
        56
    sheldondai  
       2016-03-04 21:32:35 +08:00
    已经升级 500 台生产服务器到 php7.0.3 了
    yanyandenuonuo
        57
    yanyandenuonuo  
    OP
       2016-03-06 19:28:53 +08:00
    @sheldondai 升级前版本呢? 升级后有坑么?
    sheldondai
        58
    sheldondai  
       2016-03-07 11:17:01 +08:00
    @yanyandenuonuo 7.0.3 以前 session 有 bug 。 0.3 已经修复。还有微信支付的 PHP SDK 稍微修改下就好了。其它没碰到
    yanyandenuonuo
        59
    yanyandenuonuo  
    OP
       2016-03-07 11:24:57 +08:00
    @sheldondai soga 暂时没用到微信支付:-)
    yangqi
        60
    yangqi  
       2016-03-08 10:32:53 +08:00
    不上,等一堆小白鼠们把坑都填的差不多了再考虑上
    yanyandenuonuo
        61
    yanyandenuonuo  
    OP
       2016-03-08 10:39:13 +08:00
    @yangqi 填的差不多了又有 PHP7.1 可选了==
    yangqi
        62
    yangqi  
       2016-03-08 11:26:49 +08:00
    @yanyandenuonuo 小版本之前不会有那么多坑的。但是从 5 跳到 7 变化太大了,坑不可避免
    realpg
        63
    realpg  
       2016-03-08 21:42:21 +08:00
    @yangqi 5.6 跳到 7 基本没啥不兼容的东西,不兼容的地方极其有限

    如果你是 5.4 跳到 7 ,在 5.X 时代都不跟进升级的,扯到蛋是必然的
    yangqi
        64
    yangqi  
       2016-03-08 22:26:00 +08:00
    @realpg http://php.net/manual/en/migration70.incompatible.php

    不兼容的地方还是很多的,用框架的要好很多。如果自己写的,尤其是比较老的,即使升级到了 5.6 ,再到 7 肯定还会有坑的。不一定程序运行没问题就说明没坑,只是坑还没被踩到而已
    aksoft
        65
    aksoft  
       2016-03-12 17:03:25 +08:00
    期待小白鼠的结果
    mingyun
        66
    mingyun  
       2016-04-05 22:48:46 +08:00
    新项目就 php7 吧,据说性能比 5 高一倍,如果是原有项目不建议
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1147 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 23:37 · PVG 07:37 · LAX 15:37 · JFK 18:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.