ECSHOP重点解决DEPRECATED PREG_REPLACE()报错问题

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

产品介绍

ECShop上海商派网络科技有限公司(ShopEx)旗下——B2C独立网店系统,适合企业及个人快速构建个性化网上商店,系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序

ECShop悉心听取每一位商家的需求与建议,不仅设计了人性化的网店管理系统帮助商家快速上手,还根据中国人的购物习惯改进了购物流程,实现更好的用户购物体验。

ECShop网店系统无论在产品功能稳定性、执行效率、负载能力、安全性和SEO支持(搜索引擎优化)等方面都居国内同类产品领先地位,成为国内最流行的购物系统之一。

部署ECSHOP

1、将ecshop项目部署在apache项目默认路径/htdocs/目录下,解压并赋权chmod -R 777 ecshop;

2、http://ipadr:port/ecshop 检测安装ecshop环境,会有mysql或gd或jpeg不支持;

3、修改第二点的jpeg需要修改项目php页面install/includes/lib_installer.php;

4、修改第二点的mysql不支持的在php.ini中 加一个extension=mysql.so;

5、在安装部署mysql、apache、php等环境以后,重启后,在打开项目,已经没发现有不支持的系统环境了;

date_default_timezone_set ('Asia/Shanghai');

image.png

6、安装出现gd_version()静态使用方法;以及preg_replace():方法已经不用了;

$p = new cls_image();

return $p->gd_version();

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

image.png

7、后面会继续遇到cls_template.php页面的 preg_replace()方法;

image.png

8、第七点有这个preg_replace()方法需要被替换成preg_replace_callback()

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

替换

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

类似这样的报错:

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in D:\wyh\ecshop\includes\cls_template.php on line 300
复制代码

解决问题

1、错误原因:

preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。

如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似这样的错误。

2、解决办法:

一、将 cls_template.php的288行

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

换成:

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

二、将cls_template.php的493行

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

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

换成:

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

三、将cls_template.php的552行

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

换成

$val = preg_replace_callback("/\[([^\[\]]*)\]/", function($r) {return '.'.str_replace('$','$',$r[1]);}, $val);
复制代码

四、将cls_template.php的1069行

$pattern = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';

$replacement = "'{include file='.strtolower('\\1'). '}'";

$source = preg_replace($pattern, $replacement, $source);

$source = preg_replace($pattern, $replacement, $source);
复制代码

换成

$pattern = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s';

$source = preg_replace_callback($pattern, function($r){return '{include file='.strtolower($r[1]). '}';}, $source);
复制代码

猜你喜欢

转载自juejin.im/post/7019235729616142349