您现在的位置是:首页 > 教程 > ecshop商城教程ecshop商城教程
ecshop适应PHP7的实现方法
从蓉2024-11-27 22:20:41ecshop商城教程已有人查阅
导读说实话,ecshop这个系统,到目前也没见怎么推出新版本,如果是新项目,不太建议使用它。不过,因为我一直以来都在使用中,所以不得不更改让其适应PHP新版本。
说实话,ecshop这个系统,到目前也没见怎么推出新版本,如果是新项目,不太建议使用它。不过,因为我一直以来都在使用中,所以不得不更改让其适应PHP新版本。现在PHP 7已经出发行版了,所以更改来继续使用吧。具体的更改有以下方面:
(1)将mysql扩展的使用替换掉,改为使用mysqli或pdo:
从php5.5开始,mysql扩展将废弃了。
具体更改的文件在于includes/cls_mysql.php。这是个不小的工程,文件代码太长……
代码当中加了几个方法,用于支持事务。
(2)更改cls_image.php的gd_version()方法,将这个方法改为静态方法,并且所有调用此方法的地方,都改为静态调用。
PHP5.6开始,已经不支持不兼容的上下文调用方法, 并且产生 E_DEPRECATED 错误 (以前是 E_STRICT)。
更改如下:
includes/cls_images.php,(gd_version方法体添加static关键字)
在好几处调用此方法的地方都改为静态调用,比如includes/cls_images.php的好几个方法在调用时使用类对象调用:
(3)更改includes/lib_main.php文件的get_dyna_libs函数,该第一行的代码:
(4)includes/cls_template.php代码:
preg_replace方法,自PHP5.5开始 /e修饰符已经废弃,所以要使用preg_replace_callback代替。此代替有多处:
fetch_str方法:
涉及此改动的超多,用搜索一一找到并改动吧……这个就不列举了。
(1)将mysql扩展的使用替换掉,改为使用mysqli或pdo:
从php5.5开始,mysql扩展将废弃了。
具体更改的文件在于includes/cls_mysql.php。这是个不小的工程,文件代码太长……
代码当中加了几个方法,用于支持事务。
(2)更改cls_image.php的gd_version()方法,将这个方法改为静态方法,并且所有调用此方法的地方,都改为静态调用。
PHP5.6开始,已经不支持不兼容的上下文调用方法, 并且产生 E_DEPRECATED 错误 (以前是 E_STRICT)。
更改如下:
includes/cls_images.php,(gd_version方法体添加static关键字)
在好几处调用此方法的地方都改为静态调用,比如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():涉及此改动的超多,用搜索一一找到并改动吧……这个就不列举了。
本文标签:
很赞哦! ()
相关文章
随机图文
-
ecshop底部帮助中心文章创建和修改方法
如果安装时没有选择安装测试数据,网站底部的帮助中心并不会显示任何内容,需要做如下设置: -
ecshop商品评论30秒时间限制的删除方法
如果商品评论或留言 没有启用验证码的话,ECSHOP默认有30秒的限制,也就是两次评论之间需要间隔30秒。有的店长建站之初 -
ecshop商城不同分辨率调用不同CSS的方法
ECSHOP中,可能部分模板对浏览器的支持不够完善,我们可以用以下方法来解决!就是在不同的分辨率下,调用不同的CSS代码来解决! -
ecshop后台订单信息页或ecshop打印页显示商品缩略图
1、打开 admin/order.php 文件 (建议使用editplus)2、打开 admin/templates/order_info.htm 模板页3、打开 data/order_print.html 模板页
留言与评论 (共有 条评论) |