ECshop 迁移到 PHP7版本时遇到的兼容性问题


Posted in PHP onFebruary 15, 2016

在 PHP7 上安装 ECShop V2.7.3时,报错!

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ECS has a deprecated constructor in /usr/local/nginx/html/ecshop/upload/includes/cls_ecshop.php on line 25

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

这个报错的原因是 PHP7 不再支持与类名相同的构造方法,构造方法统一使用 __construct(), 比如下面的写法 PHP7 就会报这个错误。

<?php 
class foo { 
function foo() {
echo 'I am the constructor';
}
}
?>

回到 ecshop 我们看一下 cls_ecshop.php 文件的25行。如下

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

果然有与类名相同的构造方法,我们将构造方法 ECS 修改为 __construct,

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

回到 ecshop 的安装首页刷新,发现已经没有错误了。

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

单击下一步,报错

Deprecated: Non-static method cls_image::gd_version() should not be called statically in /usr/local/nginx/html/ecshop/upload/install/includes/lib_installer.php on line 31

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

这个报错的原因是静态调用非静态方法,比如下面的代码就会报这个错误

<?php 
class foo { 
function bar() {
echo 'I am not static!';
}
}
foo::bar(); 
?>

修改方法也很简单,要么将该方法改为静态方法,要么将该调用改为非静态调用。 我们看一下报错的文件 lib_installer.php 的 31行代码

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

还有cls image类文件的 gd version() 方法,可以看到的确没有使用 static关键字

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

第一种修改方式,将该方法修改为静态方法,在方法前加关键字 public static

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

第二种修改方式,采用非静态方式的调用,修改lib_installer.php 的 31行代码

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

这两种方法都可以解决问题。 回到ecshop的安装步骤第二页,错误提示已经不见了。

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

再下一步悲剧了,PHP7 不支持原始的 mysql api 了,PHP7 支持更好的 Mysqli API 和 pdo_mysql api 所以 ecshop 不改掉操作 mysql 的 api 是无法在 PHP7 上运行起来了。

ECshop 迁移到 PHP7版本时遇到的兼容性问题 

OneAPM for PHP 能够深入到所有 PHP 应用内部完成应用性能管理 能够深入到所有 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。

以上所述给大家分享了ECshop 迁移到 PHP7版本时遇到的兼容性问题,希望对大家有所帮助。

PHP 相关文章推荐
PHP 中的类
Oct 09 PHP
十天学会php之第一天
Oct 09 PHP
30 个很棒的PHP开源CMS内容管理系统小结
Oct 14 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
深入PHP curl参数的详解
Jun 17 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
laravel 使用auth编写登录的方法
Sep 30 PHP
基于PHP实现堆排序原理及实例详解
Jun 19 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 #PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 #PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 #PHP
php socket通信(tcp/udp)实例分析
Feb 14 #PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 #PHP
php中的常用魔术方法汇总
Feb 14 #PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 #PHP
You might like
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
python创建和删除目录的方法
2015/04/29 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
Python assert关键字原理及实例解析
2019/12/13 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
django queryset相加和筛选教程
2020/05/18 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
linux面试题参考答案(10)
2013/11/04 面试题
历史教育专业个人求职信
2013/12/13 职场文书
小区门卫值班制度
2014/01/24 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
导游词之无锡梅园
2019/11/28 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers