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

 更新时间:2016年2月18日 10:11  点击:1703

在 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

 

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

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

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

 

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

 

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

 

单击下一步,报错

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

 

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

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

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

 

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

 

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

 

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

 

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

 

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

 

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

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

[!--infotagslink--]

相关文章

  • Ecshop提示Only variables should be passed by reference in错误

    在安装好ecshop软件之后我们打开首页时提示Only variables should be passed by reference in错误了,碰到这个问题是什么原因呢?下面我们就一起来看看解决办法吧。...2016-11-25
  • golang 调用 php7详解及实例

    这篇文章主要介绍了golang 调用 php7详解及实例的相关资料,需要的朋友可以参考下...2017-01-15
  • 浅析JavaScript中浏览器的兼容问题

    下面小编就为大家带来一篇浅析JavaScript中浏览器的兼容问题。小编觉得挺不错的,现在分享给大家,也给大家做个参考...2016-04-22
  • JS实现pasteHTML兼容ie,firefox,chrome的方法

    这篇文章主要介绍了JS实现pasteHTML兼容ie,firefox,chrome的方法,涉及javascript针对页面元素的动态操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2016-06-24
  • 服务器迁移php版本不同可能诱发的问题

    今天在服务器做了迁移以后,前台可以正常显示和调用,登陆后台显示500错误,一般这种情况下都要查看核心跳转文件,经查看发现login.php文件并没有调用.因为找不到login.php文件,那就证明这个文件里是有语法错误...2015-12-24
  • js事件驱动机制 浏览器兼容处理方法

    下面小编就为大家带来一篇js事件驱动机制 浏览器兼容处理方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-07-29
  • ecshop自动分成二次开发实例

    自动分成功能在ecshop系统自带是没有的,如果我们需要对一单添加分成功能我们是需要进入二次开发的,下面小编来为各位介绍一个例子。 大概逻辑:后台操作一个订单发货...2016-11-25
  • php5.5中ecshop提示Only variables should be passed by reference

    php5.5升级了很多功能的同时也去除了不少功能了,小编在使用ecshop提示Only variables should be passed by reference错误了,下文就来和各位一起看解决办法。 php大...2016-11-25
  • 变量在 PHP7 内部的实现(一)

    这篇文章主要介绍了变量在 PHP7 内部的实现(一)的相关资料,需要的朋友可以参考下...2015-12-24
  • PHP中仿制 ecshop验证码实例

    这篇文章主要介绍了PHP中仿制 ecshop验证码实例,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2017-01-15
  • ecshop分类树显示所有分类的解决方法

    ecshop分类树显示所有分类的解决方法 有需要的朋友可参考一下本文章。 解决方法如下: 比如在goods.php里, 代码如下 复制代码 $smarty->assi...2016-11-25
  • 基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏

    但是由于浏览器的兼容性问题,之前用的很多代码都失去效果,下面就给出一段能够兼容各个浏览器的代码,也不能够算是兼容,只能说在不支持的浏览器中能够给出提示,对js兼容各个浏览器设为首页加入收藏相关知识感兴趣的朋友可以参考下本文...2016-01-08
  • win10环境PHP 7 安装配置【教程】

    PHP,是英文超文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛地运用。...2016-05-13
  • ECshop 迁移到 PHP7版本时遇到的兼容性问题

    最近有网友问我在php7上安装ecshopv2.7.3时,报错,究竟了半天没有找到原因,下面由脚本之家小编给大家分析此问题出现的原因...2016-02-18
  • 变量在 PHP7 内部的实现(二)

    在上篇文章给大家介绍了变量在 PHP7 内部的实现(一),本篇继续给大家介绍php7内部实现相关知识,感兴趣的朋友通过本篇文章一起学习吧...2015-12-24
  • 在openSUSE42.1下编译安装PHP7 的方法

    这篇文章主要介绍了在openSUSE42.1下编译安装PHP7 的方法的相关资料,需要的朋友可以参考下...2015-12-25
  • ECSHOP完美解决Deprecated: preg_replace()报错的问题

    下面小编就为大家带来一篇ECSHOP完美解决Deprecated: preg_replace()报错的问题。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • javaScript事件机制兼容【详细整理】

    下面小编就为大家带来一篇javaScript事件机制兼容【详细整理】。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-07-29
  • 简述MySQL分片中快速数据迁移

    这篇文章主要介绍了MySQL分片中快速数据迁移的相关资料,需要的朋友可以参考下...2016-03-27
  • ecshop 无限级分类分析

    function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id])) { retur...2016-11-25