A-A+

Deprecated preg_replace() The e modifier is deprecated, use preg_replace_callback instead in…….

2015年09月07日 PHP开源系统 暂无评论 阅读 13 views 次

随着 PHP 的更新,ecshop 出现的问题越来越多了,在夏日博客上一篇的文章中,就提到因为 php 的更新而导致专题页不能够正常添加,今天又遇到了一些新的问题,PHP 的版本同样为是最新的 php5.5 版本了,我们来看一下遇到的错误代码如下:

Deprecated preg_replace() The e modifier is deprecated, use preg_replace_callback instead in.......

这种错误并不是所有人都会遇到的,只有当 PHP 的环境更新到 php5.5 及以上的时候才会出现,这是典型的 php 与 ecshop 不兼容所导致的,而 ecshop 官网又不能及时的更新这些 bug,很是遗憾,只能自己到 gg 里面找解决的方案了。

一,错误原因

看上面的错误代码可以看出是 preg_replace() 函数出现的问题,这个函数实际在 php5.5中已经被弃用了,也就是在最新的 php 中是不起作用的,而 ecshop 还在使用这个函数,所以就出现问题了。

二,解决方法

既然 preg_replace() 的函数已经在最新版的 php 中弃用了,哪我们就找一个替代的函数好了,替代的函数如:preg_replace_callback,找到替换的函数之后就好说好了,打开:includes/cls_template.php 文件,找到如下的代码:

return preg_replace("/{([^\}\{\n]*)}/e", "\$this->sel ect('\\1');", $source);
替换为

return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->sel ect($r[1]); }, $source);
问题解决。

其实像这种问题不仅仅是出现在 ecshop 程序中,一些其它老的 CMS 可能也会因为 PHP 的升级而出现这种问题,我们举一反三,按照这种方法都可以很好的解决的。

标签:

给我留言