分类目录

链接

友情链接

统计信息

  • 日志总数:116篇
  • 评论总数:185条
  • 分类总数:11个
  • 标签总数:391个
  • 友情链接:0个
  • 网站运行:3288天

2019年十二月
« 10月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
>
现在位置:    首页 > php/mysql > 正文

ecshop php5.4/5.5报错如何处理

php/mysql 暂无评论

相信大家对ecshop都比较熟悉了吧  一个可以说是老得不能更老,但依旧活跃在各大社区 的电商系统,不知这样说大家会不会反对,废话不多说,现在开始修改关于升级PHP版本所出现的错误吧。

开始之前 先来普及 一下关于php版本之间的变化 在ecshop中所引走的问题吧。

其实主要是归三大类:

第一类,类的规范发生变化。

  1,  类中的函数如果要使用 obj::method();  这样的方法调用,哪么这个method必须要是静态的方法,也就是要在方法 前用static定义   static function method();

  2,类中构造方法(function __CONSTUCT())  与 类中与类名相同的方法  如:      

   class a{
       function a(){};
       
       function __construct(){};
       
   }

这里是php4与php5的区别
PHP4中构造方法是一个与类同名的方法,而从PHP5开始,用__construct()做为构造方法,但仍然支持PHP4的构造方法。如果同时使用的话,如果 同名方法在前的话,则会报错..所以 。这也是一些支付接口等类经常报错的地方,大家只要调换一下  构造方法  与  同名方法 的位置就可以了。

如以下的报错:Strict standards: Redefining already defined constructor for class
alipay in \includes\modules\payment\alipay.php on line 85Call Stack

第二类,一些语法的变动。

   1,在5.5中,不再使用/e了 如果要使用这功能   请用preg_replace_callback 来替换  preg_relace(/e,'',$x);  这种写法,其中报错最多的就是includes/cls_template.php

最常见的代码就是 cls_template.php  1073行

/* 将模板中所有library替换为链接 */
            $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';
            $replacement = "'{include file='.strtolower('\\1'). '}'";
            $source      = preg_replace($pattern, $replacement, $source);

改为-》

            /* 将模板中所有library替换为链接 */
            $pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s';
            $replacement = "'{include file='.strtolower('\\1'). '}'";
            $source      = preg_replace_callback($pattern, function($r){
                                return "{include file='".$r[1]."'}";}, $source);

其它同样的错误在这文件中出现多次 ,修改方法 是一样的。不在此列举了。

2,不允许向方法传入引用 。

   这个报错的地方也不少。意思就是说以后不能向方法中传入引用。如:

function(&$arr){}

这种写法是错的的,也包括ecshop中报: Strict standards: Only variables should be passed by reference in \includes\lib_main.php on line 1329

$ext = end(explode('.', $tmp));

//修改为: 
$ext = explode('.',$tmp);
$ext = end($ext);

3,废除一些函数。列表我就不列出来了 ecshop使用最多的就是

  mktime();了,现在统一使用time();

修改过以上的问题,ecshop基本在5.4+上运行是没有问题的了。。

本文版权归企业网站建设,做网站,网站建设,php网站建设,dedecms建站,ecshop二次开发,html空间,网站修改所有,转载引用请完整注明以下信息:
本文作者:admin
本文地址:ecshop php5.4/5.5报错如何处理 | 企业网站建设,做网站,网站建设,php网站建设,dedecms建站,ecshop二次开发,html空间,网站修改

抱歉!评论已关闭.