ECShop在PHP5.3以上版本中存在诸多PHP函数兼容问题。
参考:http://www.wuyouhuan.com/archives/6
参考:http://blog.sina.com.cn/s/blog_6f145be10102v2px
修改数据库连接信息
打开data目录下面的config.php文件,找到:
// database name $db_name = "dbname"; 修改成数据库名称 // database username $db_user = "dbuser"; 修改成数据库用户名 // database password $db_pass = "dbpass"; 修改成数据库密码
修改目录权限
chmod -R 777 cert data images temp themes
报错:Deprecated: preg_replace()
路径:includes/cls_template.php
报错:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in ...
原因:preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。
1. 将 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);
2. 将cls_template.php的493行
$out = "<?php \n" . '$k = ' . preg_replace("/(\'\\$[^,]+)/e" , "stripslashes(trim('\\1','\''));", var_export($t, true)) . ";\n";
换成:
$replacement = preg_replace_callback("/(\'\\$[^,]+)/" , function($matcher){ return stripslashes(trim($matcher[1],'\'')); }, var_export($t, true)); $out = "<?php \n" . '$k = ' . $replacement . ";\n";
3. 将cls_template.php的552行
$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);
换成:
$val = preg_replace_callback("/\[([^\[\]]*)\]/", function($r) {return '.'.str_replace('$','$',$r[1]);}, $val);
4. 将cls_template.php的1069行
$pattern = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se'; $replacement = "'{include file='.strtolower('\\1'). '}'"; $source = preg_replace($pattern, $replacement, $source);
换成:
$pattern = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s'; $source = preg_replace_callback($pattern, function($r){return '{include file='.strtolower($r[1]). '}';}, $source);
报错:Non-static method cls_image::gd_version()
路径:/includes/lib_base.php
报错:
Strict Standards: Non-static method cls_image::gd_version() should not be called statically
原因:未声明静态static。
将 lib_base.php 的351行
return cls_image::gd_version();
换成:
$p = new cls_image(); return $p->gd_version();
因为系统是PHP5.5的,又要使用ECShop。但ECShop目前仅对PHP5.3支持良好。所以需要进行一些适应性修改。
1. 修改WAP版logo时报错(解决方法适用同类报错)
Strict standards: Only variables should be passed by reference in /admin/shop_config.php on line 173
问题:array_pop() 的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值。
方法:需要拆分为两行。
将/admin/shop_config.php 的173行
$ext = array_pop(explode('.', $file['name']));
修改为
$ext_arr = explode('.',$file['name']); $ext = array_pop($ext_arr);
2. 设置支付方式时报错(解决方法适用其他支付接口文件)
Strict standards: Redefining already defined constructor for class alipay in /includes/modules/payment/alipay.php on line 85
问题:这里是php4与php5的区别,PHP4中构造方法是一个与类同名的方法,而从PHP5开始,用__construct()做为构造方法,但仍然支持PHP4的构造方法。如果同时使用的话,如果同名方法在前的话,则会报错。
方法:只需要把 function __construct()移到同名函数之前。
将/includes/modules/payment/alipay.php 的85行
function alipay() { } function __construct() { $this->alipay(); }
修改为
function __construct() { $this->alipay(); } function alipay() { }
3. 商店设置时报错(解决方法也适用于/admin/shop_config.php 的同类报错)
Strict standards: mktime(): You should be using the time() function instead in /admin/sms_url.php on line 31
问题:PHP版本问题
方法:将mktime()修改为 time()
将/admin/sms_url.php 的31行
$auth = mktime();
修改为
$auth = time();
4. 安装时报错
Strict Standards: Non-static method cls_image::gd_version() should not be called statically in install/includes/lib_installer.php on line 31
问题:找到install/includes/lib_installer.php中的第31行 return cls_image::gd_version();然后在找到include/cls_image.php中的678行,发现gd_version()方法未声明静态static,所以会报错。
方法:将function gd_version()改成static function gd_version()。
5. 进入站点地图报错
Deprecated: Assigning the return value of new by reference is deprecated in /admin/sitemap.php on line 46
问题:在5.3版本之后已经不允许在程序中使用”=&”符号。如果你的网站出现了Deprecated: Assigning the return value of new by reference is deprecated in 错误,先定位到出错的文件,查找下是不是在程序中使用了”=&”。
方法:去掉‘&’符号之后程序运行正常。
将/admin/sitemap.php 的46行
$sm =& new google_sitemap(); $smi =& new google_sitemap_item($domain, $today, $_POST['homepage_changefreq'], $_POST['homepage_priority']);
修改为
$sm = new google_sitemap(); $smi = new google_sitemap_item($domain, $today, $_POST['homepage_changefreq'], $_POST['homepage_priority']);
6. 生成站点地图时报错
Warning: file_put_contents(../sitemaps.xml): failed to open stream: Permission denied in /admin/includes/cls_google_sitemap.php on line 72
问题:ECShop的主目录没有设置写权限
方法:将ECShop的主目录设置权限为777
参考:
- http://blog.csdn.net/liangjiu2009/article/details/34100189
- http://blog.csdn.net/ibmfahsion/article/details/9200721
- http://www.cnblogs.com/kristain/articles/3423149
- http://www.lyecs.com/article/w-50
- http://www.ctrol.cn/post/freesource/code-tech/04-15-ctrol-4291
- http://blog.csdn.net/lllljz/article/details/9400641
- http://jingyan.baidu.com/article/915fc414ede78b51384b207f
- http://www.omybug.com/2014/05/13/Ecshop%E5%AE%89%E8%A3%85/
- http://www.huangguangwu.cn/2014/experience_0314/59
- http://www.jsjtt.com/kaiyuanjianzhan/ECSHOP/39
- 最新补丁 http://bbs.ecshop.com/thread-1186045-1-1
- 新增管理员已绕道解决获取管理权限 http://www.lxyd.com/cn/info.asp?id=1116