preg_replace - ecshop在php5.6下的错误。
错误提示:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/wwwroot/www.ufeelwine.com/includes/cls_template.php on line 1061
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/wwwroot/www.ufeelwine.com/includes/cls_template.php on line 483
具体网页地址:
http://www.ufeelwine.com/supplier.php?suppId=7
第483行:
$out = "_echash . $k[\'name\'] . \'|\' . serialize($k) . $this->_echash;' . "\n?>";
第1061行:
$pattern = '/.*?/se';
$replacement = "'{include file='.strtolower('\\1'). '}'";
$source = preg_replace($pattern, $replacement, $source);
应该怎么改写呢?
回复内容:
ecshop在php5.6下的错误。在5.3下是正常的。应该是PHP高版本函数变化了。
错误提示:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/wwwroot/www.ufeelwine.com/includes/cls_template.php on line 1061
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/wwwroot/www.ufeelwine.com/includes/cls_template.php on line 483
具体网页地址:
http://www.ufeelwine.com/supplier.php?suppId=7
第483行:
$out = "_echash . $k[\'name\'] . \'|\' . serialize($k) . $this->_echash;' . "\n?>";
第1061行:
$pattern = '/.*?/se';
$replacement = "'{include file='.strtolower('\\1'). '}'";
$source = preg_replace($pattern, $replacement, $source);
应该怎么改写呢?
//-- 原本
return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
//-- 修改成
return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);
//-- 原本
$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);
//-- 修改成
$val = preg_replace_callback("/\[([^\[\]]*)\]/is", function($r) { return '.'.$r[1]; }, $val);
//-- 原本
$out = "
//-- 修改成
$out = "
//--- 原本
$pattern = '/.*?/se';
$replacement = "'{include file='.strtolower('\\1'). '}'";
$source = preg_replace($pattern, $replacement, $source);
//--- 修改成
$pattern = '/.*?/s';
$replacement = function ($r) { return '{include file='.strtolower($r[1]). '}'; };
$source = preg_replace_callback($pattern, $replacement, $source);
试试,没有环境没办法测试,根据提示信息改的
第483行:改成
$out = "
第1061行:改成
//$pattern = '/.*?/se';
//$replacement = "'{include file='.strtolower('\\1'). '}'";
$source = preg_replace('/.*?/se', function($r) { return '{include file='.strtolower('\\1'). '}';}, $source);
提示很清楚了啊
把preg_replace换成preg_replace_callback
看看preg_replace_callback的用法就明白了
/*
1、e参数去掉
2、后面的\1换成回调的数组对应的元素
*/
//483行
$out = "
推荐阅读
-
preg_replace - ecshop在php5.6下的错误。
-
在登录触发器错误情况下连接SQL Server的方法
-
连接到SQL Server 2008时,在默认的设置下SQL Server不允许进行远程连接可能会导致此失败(Microsoft SQL Server,错误:1006
-
解决mongodb在ubuntu下启动失败,提示couldn‘t remove fs lock errno:9 Bad file descriptor的错误
-
apache2.2和php5.2.17在windows下整合过程的错误解决方法
-
[PHP] PHP在CLI环境下的错误日志
-
preg_replace - ecshop在php5.6下的错误。
-
在x64架构下混合C++和ASM编程,堆栈调试器信息错误的问题
-
连接到SQL Server 2008时,在默认的设置下SQL Server不允许进行远程连接可能会导致此失败(Microsoft SQL Server,错误:1006
-
在登录触发器错误情况下连接SQL Server的方法