• 作品:5
  • 记录:67|
  • 随笔:6|
  • 资源:69|
  • 总访问量:25303|

t 涛涛工作室

欢迎来到涛涛博客!
ecshop2.7.3系统 在php5.4版本下的问题处理和解决方法

ecshop2.7.3系统 在php5.4版本下的问题处理和解决方法

浏览次数: 610

作者: 涛涛

信息来源: 涛涛网络工作室

更新日期: 2015-12-12 10:47:44

文章简介

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

  • 正文开始

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写错了,因为我打印数组$gd_info的时候,里面的键名是:JPEG Support。而$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');

ecshop2.7.3系统 在php5.4版本下的问题处理和解决方法:

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));

修改为:

$tag_arr = explode(' ', $tag); $tag_sel = array_shift($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.php on line 52 PHP Strict Standards: Declaration of ucenter::add_user() should be compatible with integrate::add_user($username, $password, $email, $gender = -1, $bday = 0, $reg_date = 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。

我打开 includes\cls_template.php 文件:CTRL+G 300 来到300行 

把 

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

//替换成如下

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

1、admin/index.php

admin/sms_url.php

 ECSHOP模板

报错:Strict Standards: mktime(): You should be using the time() function instead in /data/web/ledetaoadmin/sms_url.php on line 31

$auth = mktime();

替换为:

$auth = time();

报错:Strict Standards: Only variables should be passed by reference in /data/web/includes/lib_main.php on line 1336

2、lib_main.php

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

替换为:

$ext = end(); 

$ar = explode('.', $tmp);

$ext = end($ar);

继续报错 ECSHOP模板

Warning: end() expects parameter 1 to be array, null given in /data/web/includes/lib_main.php on line 1336

将刚刚的代码改成:

$arr=array();

$ext = end($arr); 

$ar = explode('.', $tmp);

$ext = end($ar);

3、cls_template.php

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

替换为: ECSHOP模板

$tag_arr = explode(' ', $tag);

$tag_sel = array_shift($tag_arr);

4、cls_captcha.php

    /**

     * 构造函数

     *

     * @access  public

     * @param

     *

     * @return void

     */

    function __construct($folder = '', $width = 145, $height = 20)

    {

        $this->captcha($folder, $width, $height);

    }

移动到:

    /**

     * 构造函数

     *

     * @access  public

     * @param   string  $folder     背景图片所在目录

     * @param   integer $width      图片宽度

     * @param   integer $height     图片高度

     * @return  bool

     */

前面

  ECSHOP模板

5、admin\includes\cls_sql_dump.php

 

    /**

     *  类的构造函数

     *

     * @access  public

     * @param

     *

     * @return void

     */

    function __construct(&$db, $max_size =0)

    {

        $this->cls_sql_dump($db, $max_size);

    }

移动到:

    /**

     *  类的构造函数

     *

     * @access  public

     * @param

     *

     * @return void

     */

前面

Strict Standards: Redefining already defined constructor for class chinabank in /data/web/includes/modules/payment/chinabank.php on line 85 

Strict Standards: Redefining already defined constructor for class paypal_ec in /data/web/includes/modules/payment/paypal_ec.php on line 96 

Strict Standards: Redefining already defined constructor for class shenzhou in /data/web/includes/modules/payment/shenzhou.php on line 81 

Strict Standards: Redefining already defined constructor for class ips in /data/web/includes/modules/payment/ips.php on line 82 

Strict Standards: Redefining already defined constructor for class balance in /data/web/includes/modules/payment/balance.php on line 79 

Strict Standards: Redefining already defined constructor for class alipay in /data/web/includes/modules/payment/alipay.php on line 85 

Strict Standards: Redefining already defined constructor for class tenpay in /data/web/includes/modules/payment/tenpay.php on line 83 

Strict Standards: Redefining already defined constructor for class post in /data/web/includes/modules/payment/post.php on line 79 

Strict Standards: Redefining already defined constructor for class paypal in /data/web/includes/modules/payment/paypal.php on line 82 

Strict Standards: Redefining already defined constructor for class tenpayc2c in /data/web/includes/modules/payment/tenpayc2c.php on line 83

Strict Standards: Redefining already defined constructor for class cappay in /data/web/includes/modules/payment/cappay.php on line 81

Strict Standards: Redefining already defined constructor for class bank in /data/web/includes/modules/payment/bank.php on line 79

Strict Standards: Redefining already defined constructor for class kuaiqian in /data/web/includes/modules/payment/kuaiqian.php on line 83

Strict Standards: Redefining already defined constructor for class cod in /data/web/includes/modules/payment/cod.php on line 82 

解决办法:

将所有的构造函数放到前面:

如alipay.php

    function __construct()

    {

        $this->alipay();

    }

放到

    function alipay()

    {

    }

前面。

 

精彩评论