preg_replace()和preg_replace_callback

转载别人的,只为了以后记录

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 );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值