测试 php7
2017-02-10 by dongnan
目标
对存量的 PHP
项目进行升级,目标有两个一是测试 PHP7
性能与兼容性,二是记录 PHP 5.6.x
升级到 PHP 7.x
版本升级。
升级PHP7面临的风险
对于一个已经现网在线的 Web服务来说,基础公共软件升级,通常是一件吃力不讨好的工作,做得好,不一定被大家感知到,但是,升级出了问题,则需要承担责任。 为了尽量减少升级的风险,我们必须先弄清楚我们的升级存在的风险。
软件版本
- 当前版本:
php 5.6.x
与tengine 2.1.x
- 升级版本:
php php-7.1.x
与tengine 2.2.x
语法兼容
- 语法兼容性问题,从
PHP 5.6
到PHP 7.1
,即使 PHP官方号称在向下兼容方面做到99%,但是在没有落地之前它仍然是一个未知的风险。 - 参考: 从PHP 5.6.x 移植到 PHP 7.0.x
安装部署
部署脚本
- 更新和测试
shell
部署脚本。
遇到问题
- 主要是兼容性问题,
- 编译安装
libiconv
报错,不支持centos 7
系统。 php-memcache
扩展报错,不支持php 7.x
,移除。php-memcached
扩展报错,更新php 7
分支。phpredis
扩展报错,更新php 7
分支。
测试过程
- PHP扩展模块。
- PHP配置文件。
- 性能测试对比。
- 代码兼容性测试。
- php7应用在开发环境。
- php7应用在测试环境。
- php7应用在生产环境。
简单的php7性能测试
环境
php5
php 5.6.x ON CentOS 6.8 amd64
gcc --version | head -n1
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17)
php7
php 7.1.x ON CentOS 7.3 amd64
gcc --version | head -n1
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
测试目标
在 100
万个元素的数组中,搜索 key
(键) 是否存在。
测试步骤
代码
cat array_key_exists.php
<?php
$a = array();
for($i=0;$i<1000000;$i++){
$a[$i] = $i;
}
foreach($a as $i)
{
array_key_exists($i, $a);
}
php5
time php array_key_exists.php
real 0m4.713s
user 0m3.322s
sys 0m1.389s
time php array_key_exists.php
real 0m4.628s
user 0m3.232s
sys 0m1.396s
time php array_key_exists.php
real 0m4.999s
user 0m3.497s
sys 0m1.500s
php7
time php array_key_exists.php
real 0m0.646s
user 0m0.557s
sys 0m0.088s
time php array_key_exists.php
real 0m0.698s
user 0m0.608s
sys 0m0.091s
time php array_key_exists.php
real 0m0.728s
user 0m0.621s
sys 0m0.107s
小结
php 5.6.13
执行时间,平均值:4.78
秒php 7.1.1
执行时间,平均值:0.69
秒- 就本次简单的测试而言,
php 7.1.1
的执行效率是php 5.6.13
的6.9
倍。
参考
部分内容参考以下文章