转载别人的,只为了以后记录
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in cls_template.php on line 300
1、错误原因:
preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。
如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似这样的错误。
2、解决办法:
一、将 cls_template.php的300行
|
1
|
return preg_replace("/{([^\}\{\n]*)}/e",
"\$this->select('\\1');",
$source); |
换成:
|
1
|
return preg_replace_callback("/{([^\}\{\n]*)}/",
function($r)
{ return $this->select($r[1]);
}, $source); |
二、将cls_template.php的493行
|
1
|
$out =
"<?php
\n" .
'$k
= ' .
preg_replace("/(\'\\$[^,]+)/e" ,
"stripslashes(trim('\\1','\''));",
var_export($t,
true)) . ";\n"; |
换成:
|
1
|
$out =
<?php \n"
. '$k = ' . preg_replace_callback("/(\'\\$[^,]+)/"
, function($r) {return stripslashes(trim($r[1],'\''));},
var_export($t,
true)) . ";\n"; |
三、将cls_template.php的552行
|
1
|
$val =
preg_replace("/\[([^\[\]]*)\]/eis",
"'.'.str_replace('$','\$','\\1')",
$val); |
换成:
|
1
|
$val =
preg_replace_callback("/\[([^\[\]]*)\]/",
function($r)
{return '.'.str_replace('$','$',$r[1]);},
$val); |
四、将cls_template.php的1069行
|
1
2
3
|
$pattern =
'/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';$replacement =
"'{include
file='.strtolower('\\1'). '}'";$source =
preg_replace($pattern,
$replacement,
$source); |
换成:
|
1
2
|
$pattern =
'/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s';$source =
preg_replace_callback($pattern,
function($r){return '{include
file='.strtolower($r[1]).
'}';},
$source); |
本文介绍了如何解决ECSHOP在PHP5.5.x环境中因使用废弃的preg_replace/e修饰符而产生的错误。通过将preg_replace/e替换为preg_replace_callback,并给出了具体修改的文件位置及代码示例。

871

被折叠的 条评论
为什么被折叠?



