转载别人的,只为了以后记录
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 ); |