小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
产品介绍
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');
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);
复制代码
7、后面会继续遇到cls_template.php页面的 preg_replace()方法;
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);
复制代码