PHP 5.6.6 上运行 ecshop 2.7.3 不兼容问题整合
在安装完php在自己的服务器上以后, 发现在静态网页上出现了很多 error。
在网上查找过后发现,大部分问题是因为 PHP发展到PHP5.5版本以后,有了很多细微的变化。而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,导致用户安装使用过程中错误百出。
在这里我整理一下我遇到的问题希望对你们能有些帮组也为了自己以后查看。
问题1:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in cls_template.php XXX line
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \upload\includes\cls_template.php on line 300
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \upload\includes\cls_template.php on line 557
出错原因:
出现以上问题是 preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。在PHP 5.5以上的版本用 preg_replace_callback 函数替换了 preg_replace函数。
解决方法:
解决问题的方法就是将代码中使用 preg_replace 函数的部分全部替换成 preg_replace_callback 函数,并且将一被废弃的 /e 修饰符 删除。
例子:
return preg_replace("/{([^\}\{\n]*)}/e", "\$this->sel ect('\\1');", $source);
替换为
return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->sel ect($r[1]); }, $source);
参考文献:
http://www.68ecshop.com/article-1193.html
preg_replace 函数介绍 http://php.net/manual/zh/function.preg-replace.php
preg_replace_callback 函数介绍 http://php.net/manual/zh/function.preg-replace-callback.php
问题2:
Strict Standards: Only variables should be passed by reference in ......\includes\cls_template.php on line 418
Strict Standards: Only variables should be passed by reference in D:\xampp\htdocs\ECShop\upload\includes\cls_template.php on line 424
出错原因:
出现这个问题的原因,貌似在php5.4中array_shift只能为变量,不能是函数返回值。
中文意思为:“传入的变量只能为引用变量”。array_shift这个函数的参数是引用传递的,php5.3以上默认只能传递具体的变量,而不能通过函数返回值来传递。
解决方法:
$tag_sel = array_shift(explode(‘ ‘, $tag));
替换成
$tag_arr = explode(‘ ‘, $tag);
$tag_sel = array_shift($tag_arr);
然后删除工程目录下的temp文件夹,重新拷贝一份原始的temp文件夹进来,再访问首页,就会发现一切正常了!
问题3:
Strict Standards: Non-static method cls_image::gd_version() should
not be called statically in ......\includes\lib_base.php on line 346
或者
Strict Standards: Non-static method cls_image::gd_version() should
not be called statically in ......\includes\lib_installer.php on line
31
Strict Standards: Non-static method cls_image::gd_version() should not be called statically in \upload\includes\lib_base.php on line 346
出错原因:
如问题中提示的一样,因为 cls_image.php 中 gd_version() 不是 static 函数所以在lib_base.php 与 lib_installer.php 中调用时才会出现以上问题。
解决方法:
解决方法1: 首先在 lib_image.php 文件中,用 Shift+F 去搜索 gd_version 函数。然后在gd_version 方法前加 static 修饰符,是此函数变成静态函数。
解决方法2: 在lib_base.php 与 lib_installer.php 函数中找到
cls_image::gd_version() 部分, 然后分别创建cls_image 实例,之后用创建的实例再去调用 gd_version()
函数。
$cls_gile = new cls_image();
return $cls_gile->gd_version();
参考文献:
http://www.ecshop120.com/ecshop-ercikaifa/article-275.html
问题4:
Deprecated: Assigning the return value of new by reference is deprecated in…
Deprecated: Assigning the return value of new by reference is deprecated in \admin\sitemap.php on line 46
出错原因:
PHP5.3+废除了”=&”符号,对象复制用”=”
在5.3版本之后已经不允许在程序中使用”=&”符号。如果你的网站出现了Deprecated: Assigning the return value of new by reference is deprecated in 错误,别着急,先定位到出错的文件,查找下是不是在程序中使用了”=&”,例如阿兹猫刚才定位到网站程序中发现了下图的程序,发现使用了”=&”符号,去掉‘&’符号之后程序运行正常。
解决方法:
搜索所有PHP文件,将”=&”替换为”=”
参考文献:
http://www.111cn.net/wy/CMS/62949.htm
http://www.phpally.com/ecshop%E6%8A%A5%E9%94%99deprecated-assigning-the-return-value-of-%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/comment-page-1/
问题5:
Strict Standards: mktime(): You should be using the time() function instead in ......\admin\shop_config.php on line 32(后台商店设置)
Strict Standards: mktime(): You should be using the time() function instead in \upload\admin\shop_config.php on line 32
Strict Standards: mktime(): You should be using the time() function instead in \upload\admin\sms_url.php on line 31
参考资料:
http://www.wuwenhui.cn/3268.html
出错原因:
这个错误提示的意思:mktime()方法不带参数被调用时,会被抛出一个报错提示。PHP5.1版后调用mktime()不带参数,会弹出这个违反标准的通知。如果要不带参数调用mktime,等同于调用time(),应用其代替。
解决方法:
$auth = mktime();
将mktime()替换成time()方法,代码为:
$auth = time();
参考文献:
http://www.weste.net/2014/6-18/97356.html
问题6:
Strict Standards: Redefining already defined constructor for class cls_sql_dump ......
出错原因:
原因跟PHP类中的构造函数有关,PHP早期版本是使用跟类同名的函数作为构造函数,后来又出现了使用 __construct()作为构造函数,
这俩个函数可以同时存在。到了PHP5.4版本,对这俩个函数在代码中的先后顺序有了严格的要求。在PHP5.4版本下,必须__construct() 在前,
同名函数在后,否则就会出现上面的的错误提示。
解决方法:
把__construct()函数放在,同名函数上面就行了。
参考文献:
http://www.ecshop120.com/ecshop-ercikaifa/article-253.html
问题7:
Strict Standards: Declaration of vbb::set_cookie() should be
compatible with integrate::set_cookie($username = '', $remember = NULL)
\includes\modules\integrates\ucenter.php......
子类的方法名如果和父类方法名相同,则子类的参数列表也要和父类的参数列相同。
出错问题:
vbb继承了integrate类并且重写了 set_cookie() 函数,但vbb重写set_cookie函数的参数 与 其父类set_cookie 的参数不符所以出现以上问题。
子类的函数跟父类的同名,必须使子类的函数参数跟父类的对应函数参数个数相同
依据错误提示,修改例如:
解决方法:
function set_cookie ($username="")
改为
function set_cookie ($username="", $remember = NULL)
如出现类似错误,可以以同样的方法解决。
参考文献:
http://blog.sina.com.cn/s/blog_6f145be10102v2px.html
问题8:
Strict Standards: Redefining already defined constructor for class paypal
出错原因:
PHP 类,有两种构造函数,一种是跟类同名的函数,一种是 ____construct()。从PHP5.4开始,对这两个函数出现的顺序做了最严格的定义,必须是 ____construct() 在前,同名函数在后
解决方法:
例如:
function __construct()
{
$this->paypal();
}
function
paypal()
{
}
htmlspecialchars()从 php5.4.0 版本开始第三个参数字符串编码的默认值改成了 UTF-8,而ecshop2.7.3
gbk版的中文编码是 GB2312 编码的,跟现在的默认参数不一致,导致所有htmlspecialchars()处理的字符都无法显示。
解决办法:
$str_converted = htmlspecialchars($str, ENT_COMPAT ,'GB2312');
建议php5.4下不要安装gbk编码ecshop。
参考资料:http://www.111cn.net/wy/CMS/62949.htm
问题10:
网站后台验证码不显示PHP Strict Standards: Redefining already defined constructor for class captcha in D:\web\322\includes\cls_captcha.php on line 119
打开 includes/cls_captcha.php
转载:
http://www.cnblogs.com/AlvinLiang/p/4228223.html
http://www.cnblogs.com/Gile/p/4333887.html
PHP 5.6.6 上运行 ecshop 2.7.3 不兼容问题整合的更多相关文章
- PHP5.6.6上运行 ecshop 2.7.3常见问题处理
ecshop在在PHP5.6.6版本以后,有了很多细微的变化.而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,导致用户安装使用过程中错误百出. 整理一下我遇到的问题希望对你们能有些帮组也为了 ...
- 在传统.NET Framework 上运行ASP.NET Core项目
新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...
- Hyper-V上运行的Linux虚拟机验证是否安装了集成服务
Hyper-V上运行的Linux虚拟机验证是否安装了集成服务 ps aux|grep "hv"root 311 0.0 0.0 0 0 ? ...
- 通过Mono 在 Heroku 上运行 .NET 应用
英文原文:Running .NET on Heroku 中文原文:在 Heroku 上运行 .NET 应用 自从加入了Heroku之后,我就想在这个平台上运行.NET程序.现在我很高兴向大家宣布,我们 ...
- Linux上运行NET
今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...
- Mono 4.0 Mac上运行asp.net mvc 5.2.3
Mono 4.0 已经发布,二进制包已经准备好,具体的发布说明参见:http://www.mono-project.com/docs/about-mono/releases/4.0.0/. 今天在Ma ...
- ASP.NET Core 中文文档 第二章 指南(5) 在 Nano Server 上运行ASP.NET Core
原文 ASP.NET Core on Nano Server 作者 Sourabh Shirhatti 翻译 娄宇(Lyrics) 校对 刘怡(AlexLEWIS).许登洋(Seay).谢炀(kile ...
- 【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下 ...
- 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序
物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...
随机推荐
- JQuery合并表格单元格
转:http://www.cnblogs.com/xuguoming/p/3412124.html JQuery合并表格单元格 一.需求 如果存在一个表格,想把其中某一列内容相同的部分合并单元格, ...
- MySQL计划任务(事件调度器)(Event Scheduler)
http://www.cnblogs.com/c840136/articles/2388512.html https://dev.mysql.com/doc/refman/5.7/en/events- ...
- [017]string类使用注意事项
最近自己写着玩,写了一个这样的函数: void foo(const string& iStr) { ; i < iStr.length(); ++i) { string str = iS ...
- js中一些容易混淆的方法
JavaScript中有一些名字十分冗长的函数名称,导致使用时会混乱,特此整理一番,加深印象. ①Object.getOwnPropertyDescriptor --读取某个对象特定属性的属性 ...
- Android反射机制实现与原理
本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或 ...
- 关于Spring的IOC和DI
原始调用模型 Spring的演化过程 Spring的调用过程 ======================================= IoC[理解][应用][重点] 1.IoC(Inversi ...
- ASP缓存类收集
木鸟写的 '********************************************** ' vbs Cache类 ' ' 属性valid,是否可用,取值前判断 ' 属性name,ca ...
- C#学习笔记10:Try-catch的用法和引用类型、值类型整理
Try-Catch: 将可能发生异常的代码放到try中,在catch中进行捕获. 如果try中有一行代码发生了异常,那么这行代码后面的代码不会再被执行了. Try写完了以后,紧接着就要写Catch ...
- 让aspx页面也可以通过url路由进行访问
参考文章:http://blog.csdn.net/zhanglong_longlong/article/details/8841030 这两天,在工作中需要将aspx的页面虚拟成url路径访问.比如 ...
- 在.net中设置debug模式预设代码
#region DEBUG #if DEBUG this.WorkOrgID.Value = "4DC4507E-434D-4EEB-967E-1E5CC28AA0C1"; thi ...