关于ECSHOP模板架设的服务器php版本过高报错的解决方法集合

本文介绍了如何解决ECSHOP模板中的错误,并提供了优化构造函数位置的方法,包括修改时间函数调用、数组操作以及类构造函数的重新组织。

1、admin/index.php

admin/sms_url.php

 ECSHOP模板

报错:Strict Standards: mktime(): You should be using the time() function instead in/data/web/ledetaoadmin/sms_url.php on line 31

 

$auth = mktime();

替换为:

$auth = time();

 

报错:Strict Standards: Only variables should be passed by reference in /data/web/includes/lib_main.php on line1336

 

2、lib_main.php

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

替换为:

         $ext = end();  

     $ar = explode('.', $tmp);

     $ext = end($ar);

继续报错 ECSHOP模板

Warning: end() expects parameter 1 to be array, null given in /data/web/includes/lib_main.php on line 1336

将刚刚的代码改成:

         $arr=array();

         $ext = end($arr);  

    $ar = explode('.', $tmp);

    $ext = end($ar);

 

3、cls_template.php

 

                   $tag_sel = array_shift(explode(' ', $tag));

替换为: ECSHOP模板

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

                            $tag_sel = array_shift($tag_arr);

 

 

 

4、cls_captcha.php

    /**

     * 构造函数

     *

     * @access  public

     * @param

     *

     * @return void

     */

    function __construct($folder = '', $width = 145, $height = 20)

    {

        $this->captcha($folder, $width, $height);

    }

移动到:

    /**

     * 构造函数

     *

     * @access  public

     * @param   string  $folder     背景图片所在目录

     * @param   integer $width      图片宽度

     * @param   integer $height     图片高度

     * @return  bool

     */

前面

  ECSHOP模板

5、admin\includes\cls_sql_dump.php

 

    /**

     *  类的构造函数

     *

     * @access  public

     * @param

     *

     * @return void

     */

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

    {

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

    }

移动到:

    /**

     *  类的构造函数

     *

     * @access  public

     * @param

     *

     * @return void

     */

前面

 

 

 

Strict Standards: Redefining already defined constructor for class chinabank in/data/web/includes/modules/payment/chinabank.php on line 85

Strict Standards: Redefining already defined constructor for class paypal_ec in/data/web/includes/modules/payment/paypal_ec.php on line 96

Strict Standards: Redefining already defined constructor for class shenzhou in/data/web/includes/modules/payment/shenzhou.php on line 81

Strict Standards: Redefining already defined constructor for class ips in/data/web/includes/modules/payment/ips.php on line 82

Strict Standards: Redefining already defined constructor for class balance in/data/web/includes/modules/payment/balance.php on line 79

Strict Standards: Redefining already defined constructor for class alipay in/data/web/includes/modules/payment/alipay.php on line 85

Strict Standards: Redefining already defined constructor for class tenpay in/data/web/includes/modules/payment/tenpay.php on line 83

Strict Standards: Redefining already defined constructor for class post in/data/web/includes/modules/payment/post.php on line 79

Strict Standards: Redefining already defined constructor for class paypal in/data/web/includes/modules/payment/paypal.php on line 82

Strict Standards: Redefining already defined constructor for class tenpayc2c in/data/web/includes/modules/payment/tenpayc2c.php on line 83

Strict Standards: Redefining already defined constructor for class cappay in/data/web/includes/modules/payment/cappay.php on line 81

Strict Standards: Redefining already defined constructor for class bank in/data/web/includes/modules/payment/bank.php on line 79

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()

    {

    }

前面。

在将 **ECShop 2.7.3** 从 PHP 5.3 升级到 PHP 5.6 的过程中,由于语言特性和函数弃用等原因,会出现一系列兼容性问题。以下是常见的错误及其解决方案: ### 1. `preg_replace()` 中 `/e` 修饰符被弃用的问题 PHP 5.5 起已弃用 `preg_replace()` 函数中使用 `/e` 修饰符的功能,PHP 5.6 及更版本则完全移除了该功能,导致 ECShop 在执行某些正则替换逻辑时会报错。 **错误示例:** ```php $out="<?php ".'$k='.preg_replace("/(\'\\$[^,])/e","stripslashes(trim('\\1','\''));",var_export($t,true)).";"; ``` **解决方案:** 将 `preg_replace()` 替换为 `preg_replace_callback()`,修改如下: ```php $out = "<?php\n" . '$k = ' . preg_replace_callback("/(\'\\$[^,]+)/", function($matches) { return stripslashes(trim($matches[1], '\'')); }, var_export($t, true)) . ";"; ``` 此方法通过回调函数实现相同逻辑,避免了 `/e` 修饰符的使用 [^3]。 --- ### 2. 静态调用非静态方法引发的 Strict Standards 报错 例如,在 `admin/database.php` 中调用了非静态方法 `cls_sql_dump::get_random_name()` 作为静态方法,这在 PHP 5.4 及以上版本会触发 `Strict standards` 错误。 **解决方案:** 将类实例化后再调用方法: ```php $sql_dump = new cls_sql_dump(); $random_name = $sql_dump->get_random_name(); ``` 或直接修改方法为静态方法(如果逻辑允许): ```php public static function get_random_name() { // 方法体 } ``` 确保类的设计与调用方式一致 [^2]。 --- ### 3. 仅变量应以引用方式传递的 Strict Standards 报错 PHP 5.3 开始对“仅变量应以引用方式传递”的规则更严格,以下代码会报错: ```php $ext = end(explode('.', $tmp)); ``` **解决方案:** 拆分表达式,先赋值给中间变量: ```php $tmp_ext = explode('.', $tmp); $ext = end($tmp_ext); ``` 类似地,处理 `array_shift(explode())` 的情况也应做同样处理 [^2]。 --- ### 4. 构造函数调用冲突问题 在升级后可能出现类似 `php cannot call constructor` 的错误,特别是在使用 `parent::__construct()` 或继承机制中存在语法不一致时。 **解决方案:** 检查所有类的构造函数是否符合 PHP 5.6 的语法规范,特别是父类构造函数的调用方式是否正确,确保使用 `parent::__construct()` 显式调用,并且没有遗漏参数传递 [^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值