ecshop在在PHP5.6.6版本以后,有了很多细微的变化。而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,导致用户安装使用过程中错误百出。
整理一下我遇到的问题希望对你们能有些帮助也为了自己以后查看。
-
问题1
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in cls_template.php XXX line
出错原因:
出现以上问题是 preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。在PHP 5.5以上的版本用 preg_replace_callback 函数替换了 preg_replace函数。
解决方法:代码中使用 preg_replace 函数的部分全部替换成 preg_replace_callback 函数,并且将一被废弃的 /e 修饰符 删除
示例:
//将文件中的下列代码 return preg_replace("/{([^\}\{\n]*)}/e", "\$this->sel ect('\\1');", $source); //替换为 return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->sel ect($r[1]); }, $source);
-
问题2
Strict Standards: Only variables should be passed by reference in \includes\cls_template.php on line 418
出错原因:
出现这个问题的原因,貌似在php5.4中array_shift只能为变量,不能是函数返回值。
解决方法://将文件中的下列代码 $tag_sel = array_shift(explode(‘ ‘, $tag)); //替换成 $tag_arr = explode(‘ ‘, $tag); $tag_sel = array_shift($tag_arr);
-
问题3
Deprecated: Assigning the return value of new by reference is deprecated in…
出错原因:
PHP5.3+废除了”=&”符号,对象复制用”=”
解决方法:搜索所有PHP文件,将”=&”替换为”=”
-
问题4
Strict Standards: mktime(): You should be using the time() function instead in …\admin\shop_config.php on line 32
出错原因:
这个错误提示的意思:mktime()方法不带参数被调用时,会被抛出一个报错提示
解决方法:$auth = mktime(); //将mktime替换成time(); $auth = time();
-
问题5
Strict Standards: Redefining already defined constructor for class cls_sql_dump …
出错原因:
原因跟PHP类中的构造函数有关,PHP早期版本是使用跟类同名的函数作为构造函数,后来又出现了使用 __construct()作为构造函数, 这俩个函数可以同时存在。到了PHP5.4版本,对这俩个函数在代码中的先后顺序有了严格的要求。在PHP5.4版本下,必须__construct() 在前, 同名函数在后,否则就会出现上面的的错误提示。
解决方法:把__construct()函数放在,同名函数上面就行了。
-
问题6
ECSHOP中transport.js和jquery的冲突问题
出错原因:
ecshop模板兼容jquery问题, 主要原因是 transprot.js 文件中, 大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。
解决方法:在 page_header.lbi 库文件中加入如下代码,注意操作顺序:
//1.先导入 transport.js文件 {insert_scripts files='transport.js,utils.js'} //2.然后导入您网站使用的jquery文件 <script language="javascript" src="您的jquery存放路径"></script> //3.之后加入代码 <script type="text/javascript"> $(function() { window.__Object_toJSONString = Object.prototype.toJSONString; delete Object.prototype.toJSONString; }); </script>