ecshop错误提示:Deprecated: preg_replace(): The /e modifier is deprecated

 ecshop安装使用  1567浏览

具体错误提示如下:

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

产生错误的原因:

首先并不是所有的ecshop环境都会报此错误,只有php5.5.x才会报这样的错误,从提示中也不难发现,用preg_replace_callback 来代替 preg_replace 就可以解决Deprecated: preg_replace()的错误提示了。

找到includes文件夹下的cls_template.php文件,大概在300行

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

改成

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

就可以解决Deprecated: preg_replace()的错误提示了。当然如果你在ecshop程序的其他地方碰到了类似的错误提示,解决方法也是这样。

以下是其他地方出现Deprecated: preg_replace()错误提示的修改方法

cls_template.php文件,大概在1071行


$pattern     = '/.*?/se';
$replacement = "'{include file='.strtolower('\\1'). '}'";
$source      = preg_replace($pattern, $replacement, $source,3);

改成

$source = preg_replace_callback(
    '/.*?/s',
    function ($matches) {
        return '{include file='.strtolower($matches[1]). '}';
    },
    $source
,3);

cls_template.php文件,大概在495行

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

改成

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

cls_template.php文件,大概在548行

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

改成

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


流行热度:超过1567次围观
生产日期:2016-03-10 20:01:57
上次围观:2016-09-18 11:21:01
转载时必须以链接形式注明原始出处及本声明。

与本文相关的文章