免费索取

SEO

赚钱方法大揭秘》
王通老师根据大量实战赚钱案例和经验撰写,它将彻底颠覆你的赚钱思维

现在留言,即可免费获得

姓名

手机

新书推荐
我们的著作

Ecshop如何解决Deprecated: preg_replace()报错

最近把一个ecshop程序做的网站转移到一台php5.5版本的服务器上,由于之前的网站模板做过修改,不兼容php7,所以选择使用低版本的php服务器,然而从php5.3.28转到php5.5g还是遇到了问题,出现很多的Deprecated: preg_replace()错误,怎么办?由于自己不做开发,但做seo时间还是比较久,这点相对来说还是难不倒我,百度就是最好的老师,你所遇到的绝大部分问题百度上其他网友都已给出了答案,所以只要你认真产找一般都能找到。


对于参加了seo培训的学员,你学习的目的就是要把网站的关键词seo到百度搜索结果首页,所以和百度打交道是必须的,那么我们就要很好的利用百度,熟悉百度,从而在使用的过程中总结百度的一些排名规律,把这些规律做为我们seo的一个辅助项。费话不多说,我从网站找到很多条答案,有的只有一两条管用,有的干脆就不管用,这应该取决于当时发布者所使用的服务器php版本和我使用的有区别的原因吧,总之能够把自己遇到问题解决的方法分享出来,这些都应该成为我们的老师。


下面我把ecshop2.7.3针对php5.5版本出现的错误解决方法分享出来,以提供给遇到我同样错误的seo人员解决遇到的问题。

Deprecated: preg_replace() 之类的报错最多,要修改的文件路径:includes/cls_template.php


如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似下面这样的错误:

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


解决办法:


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


原有内容:

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


修改后内容:

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


2. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \includes\cls_template.php on line 491

原有内容:

$out = "<?php " . '$k = ' . preg_replace("/(\'\\$[^,] )/e" , "stripslashes(trim('\\1','\''));", var_export($t, true)) . ";";


修改后内容:

$out = "<?php " . '$k = ' . preg_replace_callback("/(\'\\$[^,] )/" , function($match){return stripslashes(trim($match[1],'\''));}, var_export($t, true)) . ";"


3. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \includes\cls_template.php on line 550

原有内容:

$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);


修改后内容:

$val = preg_replace_callback('/\[([^\[\]]*)\]/is',function ($matches) {return '.'.str_replace('$','\$',$matches[1]);},$val);


4. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \includes\cls_template.php on line 1074

原有内容:

$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);


5. Strict Standards: Only variables should be passed by reference in ...\upload\includes\lib_main.php on line 1329

原有内容:

$ext = end(explode('.', $tmp));


修改后内容:

$extsub = explode('.', $tmp);

$tmp = end($extsub);

$tmp = basename($tmp,".$ext");


最后,将错误修改后,上传到服务器.然后进入后台,清空缓存,刷新页面即可。


建议修改前,做文件备份,以防止修改错误导致网站打不开~




分享到:


京公网安备 11010502039099号