在安装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写错了,因为我打印数组$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‘);
4.Deprecated: preg_replace()错误。
安装完成后访问首页出现错误:Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in.......
(1)错误原因:
preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。
如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似下面这样的错误:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in......
(2)解决办法:
其实从刚才的错误提示信息中我们也能看出一二,它提示我们使用 preg_replace_callback 来代替 preg_replace。
所以解决方法如下:
打开文件 includes/cls_template.php ,找到
return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select(‘\\1‘);", $source);
替换为
return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);
问题解决。
(3)、如果你的ECSHOP中其他文件也报类似的 preg_replace错误,请参照上面方法解决之,解决思路和解决方法是一样的。
5.Strict Standards: Only variables should be passed by reference
错误来源:
找到代码includes/cls_template.php,424行
$tag_sel
=
array_shift
(
explode
(
‘ ‘
,
$tag
));
错误原因:PHP5.3以上默认只能传递具体的变量,而不能通过函数返回值传递,所以这段代码中的explode就得移出来重新赋值
解决办法:替换为
$tagArr
=
explode
(
‘ ‘
,
$tag
);
$tag_sel
=
array_shift
(
$tagArr
);
顶部的报错没掉了,左侧和底部的报错还需要去ecshop的后台点击清除缓存才能去除。