转载别人的,只为了以后记录
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,并给出了具体修改的文件位置及代码示例。
359

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



