ecshop php报错,Ecshop在PHP5.4以上高版本报错的解决方案最全集合

Ecshop在PHP5.4以上高版本报错的解决方案最全集合

2020-04-08

ecshop二次开发在PHP5.4以上高版本报错的解决方案集合

20170608更新

这个ECSHOP高版本出错的修改是在做项目开发过程中边做边修改出来的,基本上支持到5.6都没发现什么问题了,下图是我系统运行的PHP版本情况,由于系统原因,我没有安装php5.6,另外,在后面如果遇到有更新的与PHP版本有关的BUG,也会在这里更新,大家可以关注。

51c5d26a90c5d8eb240c3fdaf66376c4.png

一、include/cls_template.php

1、找到$tag_sel = array_shift(explode(' ', $tag));

改为$tag_arr = explode(' ', $tag);

$tag_sel = array_shift($tag_arr);

2、 找到return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);

改为return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]);}, $source);

3、找到$out = "<?php  \n" . '$k = ' . preg_replace("/(\'\\$[^,]+)/e" ,"stripslashes(trim('\\1','\''));", var_export($t, true)) . ";\n";

改为$out = <?php  \n" . '$k = ' . preg_replace_callback("/(\'\\$[^,]+)/" , function($r){return stripslashes(trim($r[1],'\''));}, var_export($t, true)) . ";\n";

4、找到$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);

改为$val = preg_replace_callback("/\[([^\[\]]*)\]/", function($r) {return '.'.str_replace('$','$',$r[1]);}, $val);

5,找到$pattern = '/.*?/se';

$replacement = "'{include file='.strtolower('\\1'). '}'";

$source = preg_replace($pattern, $replacement, $source);

改为$pattern = '/.*?/s';

$source = preg_replace_callback($pattern, function($r){return '{include file='.strtolower($r[1]). '}';}, $source);

6、类似这样的报错:

Deprecated: preg_replace(): The /e

modifier is deprecated, use preg_replace_callback instead in

D:\wyh\ecshop\includes\cls_template.php on line 300

(1)错误原因:preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似这样的错误。

(2)解决办法:

A、将 cls_template.php的300行return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);

改为return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);

B、将 cls_template.php$out = "<?php  \n" . '$k = ' . preg_replace("/(\'\\$[^,]+)/e" , "stripslashes(trim('\\1','\''));", var_export($t, true)) . ";\n";

改为$out = <?php  \n" . '$k = ' . preg_replace_callback("/(\'\\$[^,]+)/" , function($r) {return stripslashes(trim($r[1],'\''));}, var_export($t, true)) . ";\n";

C、将cls_template.php$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);

改为$val = preg_replace_callback("/\[([^\[\]]*)\]/", function($r) {return '.'.str_replace('$','$',$r[1]);}, $val);

D、将cls_template.php$pattern = '/.*?/se';

$replacement = "'{include file='.strtolower('\\1'). '}'";

$source = preg_replace($pattern, $replacement, $source);

改为$pattern = '/.*?/s';

$source = preg_replace_callback($pattern, function($r){return '{include file='.strtolower($r[1]). '}';}, $source);

二、include/lib_base.php

1、找到return cls_image::gd_version();

改为$p = new cls_image();

return $p->gd_version();

2、找到function gd_version()

改为static function gd_version()

三、admin/shop_config.php和sms_url.php

找到$auth = mktime();

改为$auth = time();

四、上传LOGO和水印出现Strict Standards: Only variables should be passed by reference

后台admin/shop_config.php,将两处$ext = array_pop(explode('.', $file['name']));

改为$ext_tmp = explode('.', $file['name']);

$ext = array_pop($ext_tmp);

五、数据库备份出现edefining already defined constructor for class cls_sql_dump\admin\includes\cls_sql_dump.php on line 90

将function __construct(&$db, $max_size =0)

{

$this->cls_sql_dump($db, $max_size);

}

移到function cls_sql_dump(&$db, $max_size=0)

前面

七、出现Non-static method cls_sql_dump::get_random_name() admin\database.php on line 64

打开includes\cls_sql_dump.php 479行 ,将function get_random_name()

修改为static function get_random_name()

八、支付出错:Strict

Standards: Redefining already defined constructor for class kuaiqian in

/data/web/includes/modules/payment/kuaiqian.php on line 83 Strict

Standards: Redefining already defined constructor for class cod in

/data/web/includes/modules/payment/cod.php on line 82

解决办法,将所有的构造函数放到前面,如alipay.php

将function __construct()

{

$this->alipay();

}

移到function alipay()

{

}

前面

九、出现Non-static method cls_sql_dump::get_random_name() admin\database.php on line 64

打开includes\cls_sql_dump.php 479行function get_random_name()

修改成static function get_random_name()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值