最近把一个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");
最后,将错误修改后,上传到服务器.然后进入后台,清空缓存,刷新页面即可。
建议修改前,做文件备份,以防止修改错误导致网站打不开~