服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > ecshop教程 >

ecshop适应在PHP7的修改方法解决报错(2)

时间:2016-05-07 01:26来源:未知 作者:最模板 点击:
(2)ecshop更改cls_image.php的gd_version()方法,将这个方法改为静态方法,并且所有调用此方法的地方,都改为静态调用。 PHP5.6开始,已经不支持不兼容的上下

(2)ecshop更改cls_image.php的gd_version()方法,将这个方法改为静态方法,并且所有调用此方法的地方,都改为静态调用。

PHP5.6开始,已经不支持不兼容的上下文调用方法,   并且产生 E_DEPRECATED 错误   (以前是 E_STRICT)。

更改如下:

includes/cls_images.php,(gd_version方法体添加static关键字)

    /**
     * 获得服务器上的 GD 版本
     *
     * @access      public
     * @return      int         可能的值为0,1,2
     */
    static function gd_version()
    {
....

    }

在好几处调用此方法的地方都改为静态调用,比如includes/cls_images.php的好几个方法在调用时使用类对象调用:

    function make_thumb($img, $thumb_width = 0, $thumb_height = 0, $path = '', $bgcolor='')
    {
         $gd = $this->gd_version(); //获取 GD 版本。0 表示没有 GD 库,1 表示 GD 1.x,2 表示 GD 2.x
         。。。

    }

将其改为:

    function make_thumb($img, $thumb_width = 0, $thumb_height = 0, $path = '', $bgcolor='')
    {
         $gd = self::gd_version(); //获取 GD 版本。0 表示没有 GD 库,1 表示 GD 1.x,2 表示 GD 2.x
        。。。
    }

还有includes/lib_base.php文件的gd_version函数,改为:

function gd_version()
{
    include_once(ROOT_PATH . 'includes/cls_image.php');

    return cls_image::gd_version();
}

 

其他文件代码在调用时,最好改为调用lib_base文件的gd_version的函数。可以搜索更改。


(3)更改includes/lib_main.php文件的get_dyna_libs函数,该第一行的代码:

function get_dyna_libs($theme, $tmp)
{
    $ext = end(explode('.', $tmp));
    。。。
}

更改为:

function get_dyna_libs($theme, $tmp)
{
    $tmp_ext = explode('.', $tmp);
        $ext = end($tmp_ext);
}

end方法的接受的参数必须是引用传递值,这里使用了explode方法返回值,不可以直接套用。

(4)includes/cls_template.php代码:

preg_replace方法,自PHP5.5开始 /e修饰符已经废弃,所以要使用preg_replace_callback代替。此代替有多处:

fetch_str方法:

fetch_str($source)
{
     。。。

      return preg_replace_callback("/{([^\}\{\n]*)}/",'self::select_replace', $source);
}

//新增的方法
private function select_replace($matches){
        return $this->select($matches[1]);
}


select方法:

    function select($tag)
    {
       。。。
           $pregReplace = preg_replace_callback("/(\'\\$[^,]+)/" , function($matches){
             return stripslashes(trim($matches[1],'\''));
           }, var_export($t, true));
       。。。
    }

 

smarty_prefilter_preCompile方法:

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

 

(5)将所有类的构造函数,都去除使用类名的构造函数,保留__construct():

涉及此改动的超多,用搜索一一找到并改动吧……这个就不列举了。

(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------