A-A+

echsop 出现 cls_template.php on line 300 错误

2015年06月28日 PHP开源系统 评论 1 条 阅读 127 views 次

给客户新安装的 ecshop 系统,出现了 cls_template.php on line 300 的错误,直接导致 ecshop 系统无法正常预览,以前没出现过这个问题呀,用的是 xampp 环境,完整的错误代码如下所示:

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in D:\xampp\htdocs\tutechan\includes\cls_template.php on line 300

我们先看一下错误代码的提示,是 cls_template.php 这个文件出的错,在 300 行左右,而且还是 preg_replace() 这个语句,找到 includes\cls_template.php 文件并打开,找到 300 行左右 reg_replace() 语句的代码:

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

仔细看来也是没有问题的,在本地打印也没有问题,但在服务器端就是出现了问题,随后在群里面问了下夏日博客的小童鞋一起查找出错的原因,后来经过高人指点,说是 PHP 版本太高的问题,马上到服务器上面看了下,蛮高的 PHP 版本,在看一下自己本地的版本,还是 php 5.2 的,难怪,在最新版的 PHP 中 preg_replace() 语句已经被停用了,所以导致出现了问题,而在老版本的PHP中,还可以正常使用,这就是为什么在本地能够正常预览的原因了。

找到了原因,我们就来修改一下吧,将:

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

替换成如下代码:

return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);

实质就是把停用掉的 preg_replace 函数换成了 preg_replace_callback 函数,保存后,我们再刷新下前台,基本上已经OK了,如果不行的话就再清理一下后台缓存。

标签:

1 条留言  访客:1 条  博主:0 条

  1. 小军旗

    不错不错,学习了,希望博主多多分享

给我留言