echsop 出现 cls_template.php on line 300 错误
给客户新安装的 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了,如果不行的话就再清理一下后台缓存。
不错不错,学习了,希望博主多多分享