ecshop安装出现问题集合(php版本偏高)

本文详细介绍了在使用PHP5.4安装并配置Ecshop时遇到的问题及其解决方法,包括类方法声明、缓存问题、构造函数冲突、函数引用传递错误、时区设置不安全等,并提供了相应的修复策略,如调整类方法声明为静态、修复配置文件、优化代码结构等,旨在帮助开发者顺利部署和维护Ecshop。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 php5.4下安装的时候处理问题,Strict Standards: Non-static method cls_image::gd_version() should not be called statically in \install\includes\lib_installer.php on line 31

  解决:找到install/includes/lib_installer.php中的第31行   return cls_image::gd_version();然后在找到include/cls_image.php中的678行,发现gd_version()方法未声明静态static,所以会出错。这时候只要:

  将function gd_version()改成static function gd_version()即可。

 

2 安装好后出现Warning: require(languages//common.php): failed to open stream: No such file or directory in \includes\init.php on line 120

缓存问题 缺少配置信息 缺少文件temp\static_caches/shop_config.php

经测试在ecshop论坛http://help.ecshop.com/data/backup/ECShop_V2.7.3_UTF8_release1106.rar下载的文件有问题,重新到http://download.ecshop.com/2.7.3/ECShop_V2.7.3_UTF8_release1106.rar 下载后测试没问题。

 

3 安装好后出现 Strict standards: Only variables should be passed by reference in \includes\lib_main.php on line 1329

ext=end(explode(., tmp));

修改为: 

ext=explode(., tmp);
  ext=end( ext);

 Strict standards: Only variables should be passed by reference in \includes\cls_template.php on line 418

 tag_sel = array_shift(explode(' ', $tag)); 

修改为:

  tagarr=explode(′′, tag);  tagsel=arrayshift( tag_arr);

 

array_shift() 的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值 end(&array) 也一样(后面也会有end的函数,也需要拆分为两行)。

 

修改后到后台更新缓存

 

4 后台 Strict standards: Redefining already defined constructor for class alipay in \includes\modules\payment\alipay.php on line 85

 后台更新缓存

 

5 Strict standards: mktime(): You should be using the time() function instead in \admin\sms_url.php on line 31
php版本问题  mktime()修改为  time()
 
6 Strict standards: Redefining already defined constructor for class alipay in \includes\modules\payment\alipay.php on line 85Call Stack

这里是php4与php5的区别
PHP4中构造方法是一个与类同名的方法,而从PHP5开始,用__construct()做为构造方法,但仍然支持PHP4的构造方法。如果同时使用的话,如果 同名方法在前的话,则会报错

只需要把 function __construct()移到同名函数之前

 7 Deprecated: Assigning the return value of new by reference is deprecated in  \admin\sitemap.php on line 46

 $sm     =& new google_sitemap();

     在5.3版本之后已经不允许在程序中使用”=&”符号。如果你的网站出现了Deprecated: Assigning the return value of new by reference is deprecated in 错误,别着急,先定位到出错的文件,查找下是不是在程序中使用了”=&”,例如阿兹猫刚才定位到网站程序中发现了下图的程序,发现使用了”=&”符号,去掉‘&’符号之后程序运行正常。
 
8  PHPStrict Standards: Declaration of ucenter::login() should be compatible with integrate::login( username, password,  remember=NULL)in\includes\modules\integrates\ucenter.phponline52PHPStrictStandards:Declarationofucenter::adduser()shouldbecompatiblewithintegrate::adduser( username,  password, email,  gender=1, bday = 0,  regdate=0, md5password = '') in \includes\modules\integrates\ucenter.php on line 52 PHP Strict Standards: Declaration of ucenter::set_cookie() should be compatible with integrate::set_cookie( username=′′, remember = NULL) in \includes\modules\integrates\ucenter.php on line 52 
 
PHP5.4,子类的方法名如果和父类方法名相同,则子类的参数列表也要和父类的参数列相同。
修改接口文件里面的方法
 
9  ecshop2.7.3 gbk版在php5.4下安装后,分类名称文字不显示问题
htmlspecialchars()从 php5.4.0 版本开始第三个参数字符串编码的默认值改成了 UTF-8,而ecshop2.7.3 gbk版的中文编码是 GB2312 编码的,跟现在的默认参数不一致,导致所有htmlspecialchars()处理的字符都无法显示。
解决办法:
$str_converted = htmlspecialchars($str, ENT_COMPAT ,'GB2312');
建议php5.4下不要安装gbk编码ecshop。


Strict Standards: Only variables should be passed by reference in E:\Tools\ECShop_V2.7.3_UTF8_release1106\upload\includes\cls_template.php
on line 418
第418行:$tag_sel = array_shift(explode(' ', $tag));
解决办法 1 
5.3以上版本的问题,应该也和配置有关 只要418行把这一句拆成两句就没有问题了  $tag_sel = array_shift(explode(' ', $tag)); 改成: $tag_arr = explode(' ', $tag);  $tag_sel = array_shift($tag_arr);
因为array_shift的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值 


 在安装Ecshop的时候,遇到两个问题:

  1.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in D:\X\www\ecshop\install\includes\lib_installer.php on line 31

  解决:找到install/includes/lib_installer.php中的第31行   return cls_image::gd_version();然后在找到include/cls_image.php中的678行,发现gd_version()方法未声明静态static,所以会出错。这时候只要:

  1)将function gd_version()改成static function gd_version()即可。

  2)或者将install/includes/lib_installer.php中的第31行return cls_image::gd_version();改成:

$p = new cls_image();
return $p->gd_version();

  2.检测环境的时候提示:是否支持 JPEG是不支持的。

  解决:查看发现有libjpeg.lib库,GD2库也有,都加载了,也都正常。查看ecshop源代码发现install/includes/lib_installer.php中第100行,JPEG写成了JPG,正确的应该是:

 

$jpeg_enabled = ($gd_info['JPEG Support']        === true) ? $_LANG['support'] : $_LANG['not_support'];

 

  为何说Ecshop写错了,因为我打印数组 gdinfoJPEGSupport gd_info数组里的值都是直接调用系统环境变量的。

 

  3.默认时区问题:Warning: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in D:\X\www\ecshop\install\includes\lib_installer.php on line 225

  解决:方法1,将php.ini里是date.timezone前的";"去掉,改成:date.timezone = PRC;

  方法2,在页头使用 ini_set('date.timezone','Asia/Shanghai');

  方法3,在页头使用date_default_timezone_set()设置 date_default_timezone_set('PRC'); //东八时区 echo date('Y-m-d H:i:s');

当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。

http://www.cnblogs.com/kristain/articles/3423149.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值