升级PHP7过程记录

一、背景

项目一直处于PHP5.6的运行环境中,决定将PHP升级到PHP7,考虑的原因主要包括:

1、PHP7的正式版也已经发布了很长时间,就稳定性和资料的丰富程度来说都足够了

2、看到PHP5.*的不会进行安全维护的通知

3、PHP7相对PHP5的性能相关有提升

4、生命不息,折腾不止

特此将升级过程及步骤进行记录,希望可以帮到有类似需求的小伙伴!

二、安装PHP7

这个步骤就不多说了,从网上查找下安装过程,按照教程进行即可。(ps:公司的服务器上已经有其他同事安装过了,我直接使用就好了)

php7和php5.6具体信息:

# php7 -v
PHP 7.1.12 (cli) (built: Jun  8 2018 19:36:50) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

# php -v
PHP 5.6.10 (cli) (built: Jun  8 2018 14:46:07) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

三、项目使用PHP7环境

测试环境上运行的项目有很多,所以不能直接将默认的php替换成PHP7,采用的方式是使用nginx配置进行处理,设置这个项目使用phpfpm7。

调用项目中的测试接口,测试接口内容:echo phpinfo(); 可以观察到已经替换为PHP7了!

四、静态代码检测

众所周知,PHP7废除了很多函数,所以我们需要对代码进行检测项目的兼容性。

采用的方法是利用 PHPCS和PHPCompatibility 对项目进行PHP7的编码规范检测。

//PHPCS和PHPCompatibility安装和使用流程
mkdir /tmp/php_codesniffer 
curl -s http://getcomposer.org/installer | php 
./composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com 
./composer.phar selfupdate 
./composer.phar require "squizlabs/php_codesniffer=*" 
cd /tmp/PHPCompatibility 
git clone https://github.com/wimg/PHPCompatibility.git 
/tmp/PHPCompatibility/vendor/bin/phpcs --config-set installed_paths /tmp/PHPCompatibility/PHPCompatibility/ 
/tmp/PHPCompatibility/vendor/bin/phpcs -i 
/tmp/PHPCompatibility/vendor/bin/phpcs --standard=PHPCompatibility --report-file=/tmp/check_php7_report [项目路径] 

之后就可以根据生成的报表'/tmp/check_php7_report',逐条对项目代码进行处理了。

五、错误日志哪去了?

项目使用的是ThinkPHP3.2.2框架,但是到目前为止,仍未找到错误日志输出到哪里了,之后有时间再继续进行吧,大概流程如下:

1、首先在nginx中增加如下配置:
error_log logs/error.log error;
然后经过几天的使用,从未看到有过日志记录,认为没有出现问题。

2、突发奇想,想验证下错误情况是可以被记录的,于是写了个接口,具体内容:

 $str = 'asdasdaiAAS';
 echo preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str);
 
在Linux下执行PHP脚本输出以下内容,同理接口也应该返回同意内容:
php5.6 : asdasdai_a_a_s
php7   :PHP Warning:  preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in ..

3、但是实际情况,在PHP5.6接口返回与预期符合,但是在PHP7直接返回空并且httpcode为200(问题出现)

4、初步猜测是由于ThinkPHP框架导致未记录错误情况,所以查看其配置及框架的日志,均未发现异常。

5、未完待续,等有时间再查下错误日志去哪了

六、接口检测

本来是想通过错误日志来确认接口是否存在问题的,但是由于找不到错误日志,所以无奈下换另外的方案:

1、通过nginx的日志获取调用过的接口,然后跟项目所有接口去重,找到未调用的接口

2、调用过的接口使用脚本分别在PHP5.6和PHP7的环境下重新调用获取返回值,把两次的返回值md5加密后进行对比

有了方案后处理起来并不难,按照预期应该是一致的,但是确实存在问题了!(从侧面也说明这个接口检测是很有必要的,不能仅靠测试人员在功能上验证)

七、发现的坑及填坑方法

1、问题:php7的json_encode处理float类型会出现溢出的现象

php5.6:[6.28] 
php7:[6.2800000000000002] 

解决方案:修改php.ini中serialize_precision 到17以下,自测php7恢复正常

2、问题:在命令行解决了json_encode溢出问题,然后接口还是会存在问题

解决方案:重启PHP7的phpfpm

3、问题:php7的计算中,如果除数为0会导致结果为NAN

php5.6:0 
php7:NAN

解决方案:判断下除数为0的情况

八、结语

这次升级PHP7的工作还没有结束!目前只是完成自测部分,等待测试通过后,完美上线才能算收工大吉!

如果后续还有发现坑,会及时更新在这边的。

希望可以前路坦荡,一路无坑喽~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 下面我会详细的介绍下我们是如何把应用前移动php7的,我们在这中间遇到的问题及处理情况,还有最终的结果。但首先让我...
    优才学院阅读 818评论 0 5
  • 2015.12.3 发生了两件大事, PHP7 问世了, Swift 开源了。最好的语言发布了新的版本,一个划时代...
    搬砖家阅读 536评论 0 1
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,169评论 0 9
  • 有个年轻人自己吞了个.22子弹,然后就昏了过去。第二天早上醒来,他完全不记得昨晚的事,就去上班了。两小时后,他说感...
    e541c2720df7阅读 62评论 0 0
  • 写在前面的话 伴随一场严重的流感,我忙忙碌碌折腾了一个月。 教师共读分享、教师资格证面试、生活课程分享、期末评语,...
    傅大江阅读 265评论 0 4