内容简介:项目一直处于PHP5.6的运行环境中,决定将PHP升级到PHP7,考虑的原因主要包括:1、PHP7的正式版也已经发布了很长时间,就稳定性和资料的丰富程度来说都足够了2、看到PHP5.*的不会进行安全维护的通知
项目一直处于 PHP 5.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的情况
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 升级vue全家桶过程记录
- JDK 8 升级 JDK 11 过程记录
- JDK 8 升级 JDK 11 过程记录
- 在CentOS 7系统下升级 Jenkins版本(含排坑过程)
- Rxjava1升级Rxjava2过程中的一些知识总结
- 存储过程 – 重新编译后,存储过程运行得很快
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Introduction to Tornado
Michael Dory、Adam Parrish、Brendan Berg / O'Reilly Media / 2012-3-28 / USD 23.99
Tornado is a scalable, non-blocking web server and web application framework written in Python. It is also light-weight to deploy, fun to write for, and incredibly powerful. Tornado was written with p......一起来看看 《Introduction to Tornado》 这本书的介绍吧!