跳转至

测试 php7


2017-02-10 by dongnan

目标

对存量的 PHP 项目进行升级,目标有两个一是测试 PHP7 性能与兼容性,二是记录 PHP 5.6.x 升级到 PHP 7.x 版本升级。

升级PHP7面临的风险

对于一个已经现网在线的 Web服务来说,基础公共软件升级,通常是一件吃力不讨好的工作,做得好,不一定被大家感知到,但是,升级出了问题,则需要承担责任。 为了尽量减少升级的风险,我们必须先弄清楚我们的升级存在的风险。

软件版本

  • 当前版本: php 5.6.xtengine 2.1.x
  • 升级版本: php php-7.1.xtengine 2.2.x

语法兼容

  • 语法兼容性问题,从 PHP 5.6PHP 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.136.9倍。

参考

部分内容参考以下文章

欢迎关注微信公众号: 运维录

Back to top