您现在的位置是:首页 > cms教程 > Ecshop商城教程Ecshop商城教程
ecshop后台登录死循环等常见问题修复
冰兰2024-12-22Ecshop商城教程已有人查阅
导读一个多星期前开始接触ecshop,突然决定要用它来做网站,于是从网上找各种手册与视频,联系官网客服,然后知道官网一共提供三种类型的服务,一种是ecshop授权,不包含任何技术支持,第二种是易开店的标准话服务
一个多星期前开始接触ecshop,突然决定要用它来做网站,于是从网上找各种手册与视频,联系官网客服,然后知道官网一共提供三种类型的服务,一种是ecshop授权,不包含任何技术支持,第二种是易开店的标准话服务,提供最通用的网店服务,以及技术支持,但是不提供,个性化的定制,第三种就是最贵的ecstore,提供个性定制。之后,我们最能接受的就是第一种。
再说ecshop的使用,看看大概的教程,知道如何安装,于是在linux和我indows下都安装了一下,我indow下的安装还算顺利,解决完一些常见问题后,就基本上能够正常使用,但在linux下,却发现后台进不去,一直跳转到登录页,但是通过拼url可以访问除了admin/index.php以外的其他页面。现在来稍稍总结下遇到的问题,如下:
1.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in D:\X\ \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();改成:
解决:查看发现有libjpeg.lib库,GD2库也有,都加载了,也都正常。查看ecshop源代码发现install/includes/lib_installer.php中第100行,JPEG写成了JPG,正确的应该是:
on line 418
第418行:
5.3以上版本的问题,应该也和配置有关 只要418行把这一句拆成两句就没有问题了 $tag_sel = array_shift(explode(' ', $tag)); 改成: $tag_arr = explode(' ', $tag); $tag_sel = array_shift($tag_arr);
(实验过,绝对可行) 因为array_shift的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值 4.请问出现Strict Standards: Redefining already defined constructor错误或者在后台有关于支付设置的页面都会 报一些错误,错误原因:
PHP 类,有两种构造函数,一种是跟类同名的函数,一种是 __c**truct()。从PHP5.4开始,对这两个函数出现的顺序做了严格的定义,必须是 __c**truct() 在前,同名函数在后
解决方法:
调换一下两个函数的前后位置即可。
以 includes/modules/payment/alipay.php 为例:
将下面这两个函数的位置互换一下就OK了,__c**truct()在前,alipay()在后
解决方法:mktime()改成time();也可以将此行代码前加@符,抑制warning 错误
原因:自从PHP5.1起,调用这个函数不传递参数,会出现一个 notice
6.是我遇到的最头疼的问题,,后台登录后,死循环于登录界面,但是通过url可以访问除了admin/index.php以外的后台管理页面,原因在于admin/init.php页面的判断,如下:
因为在include/cls_ecshop.php中,有这样的代码:
所以这就这问题的根源在,可是为什么在linux下会出现$_SERVER['HTTPS']这一项呢?
再说ecshop的使用,看看大概的教程,知道如何安装,于是在linux和我indows下都安装了一下,我indow下的安装还算顺利,解决完一些常见问题后,就基本上能够正常使用,但在linux下,却发现后台进不去,一直跳转到登录页,但是通过拼url可以访问除了admin/index.php以外的其他页面。现在来稍稍总结下遇到的问题,如下:
1.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in D:\X\ \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.Strict Standards: Only variables should be passed by reference in E:\Tools\ECShop_V2.7.3_UTF8_release1106\upload\includes\cls_template.phpon line 418
第418行:
$tag_sel = array_shift(explode(' ', $tag));
解决办法5.3以上版本的问题,应该也和配置有关 只要418行把这一句拆成两句就没有问题了 $tag_sel = array_shift(explode(' ', $tag)); 改成: $tag_arr = explode(' ', $tag); $tag_sel = array_shift($tag_arr);
(实验过,绝对可行) 因为array_shift的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值 4.请问出现Strict Standards: Redefining already defined constructor错误或者在后台有关于支付设置的页面都会 报一些错误,错误原因:
PHP 类,有两种构造函数,一种是跟类同名的函数,一种是 __c**truct()。从PHP5.4开始,对这两个函数出现的顺序做了严格的定义,必须是 __c**truct() 在前,同名函数在后
解决方法:
调换一下两个函数的前后位置即可。
以 includes/modules/payment/alipay.php 为例:
将下面这两个函数的位置互换一下就OK了,__c**truct()在前,alipay()在后
function alipay() {
}
function __c**truct()
{
$this->alipay();
}
5.Strict Standards: mktime(): You should be using the time() function instead in D:\wamp\ \ecshop\admin\sms_url.php on line 31解决方法:mktime()改成time();也可以将此行代码前加@符,抑制warning 错误
原因:自从PHP5.1起,调用这个函数不传递参数,会出现一个 notice
6.是我遇到的最头疼的问题,,后台登录后,死循环于登录界面,但是通过url可以访问除了admin/index.php以外的后台管理页面,原因在于admin/init.php页面的判断,如下:
$smarty->assign('token', $_CFG['token']);
if ($_REQUEST['act'] != 'login' && $_REQUEST['act'] != 'signin' &&
$_REQUEST['act'] != 'forget_pwd' && $_REQUEST['act'] != 'reset_pwd' && $_REQUEST['act'] != 'check_order')
{
$admin_path = preg_replace('/:\d+/', '', $ecs->url()) . ADMIN_PATH;//这里的$admin_path开头是https
if (!empty($_SERVER['HTTP_REFERER']) &&
strpos(preg_replace('/:\d+/', '', $_SERVER['HTTP_REFERER']), $admin_path) === false)//而$_SERVER['HTTP_REFERER']的开头是http,所以回找不到,所以执行else ,又跳转到login { if (!empty($_REQUEST['is_ajax'])) { make_json_error($_LANG['priv_error']); } else { ecs_header("Location: privilege.php?act=login\n"); } exit; } }
解决办法:将以上代码
$admin_path = preg_replace('/:\d+/', '', $ecs->url()) . ADMIN_PATH;
改为:
$admin_path1 = preg_replace('/:\d+/', '', $ecs->url()) . ADMIN_PATH;
$amin_path=str_replace("https","http",$admin_path1);
而为什么回出现这样的结果呢???因为在include/cls_ecshop.php中,有这样的代码:
function http()
{
return (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ? 'https://' : 'http://';
}
function get_domain()
{
/* 协议 */
$protocol = $this->http();
/* 域名或IP地址 */
if (isset($_SERVER['HTTP_X_FORWARDED_HOST']))
{
$host = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
elseif (isset($_SERVER['HTTP_HOST']))
{
$host = $_SERVER['HTTP_HOST'];
}
else
{
/* 端口 */
if (isset($_SERVER['SERVER_PORT']))
{
$port = ':' . $_SERVER['SERVER_PORT'];
if ((':80' == $port && 'http://' == $protocol) || (':443' == $port && 'https://' == $protocol))
{
$port = '';
}
}
else
{
$port = '';
}
if (isset($_SERVER['SERVER_NAME']))
{
$host = $_SERVER['SERVER_NAME'] . $port;
}
elseif (isset($_SERVER['SERVER_ADDR']))
{
$host = $_SERVER['SERVER_ADDR'] . $port;
}
}
return $protocol . $host;
}
function url()
{
$curr = strpos(PHP_SELF, ADMIN_PATH . '/') !== false ?
preg_replace('/(.*)(' . ADMIN_PATH . ')(\/?)(.)*/i', '\1', dirname(PHP_SELF)) :
dirname(PHP_SELF);
$root = str_replace('\\', '/', $curr);
if (substr($root, -1) != '/')
{
$root .= '/';
}
return $this->get_domain() . $root;
}
而在admin/include/init.d.php中有这样的代码:
$admin_path = preg_replace('/:\d+/', '', $ecs->url()) . ADMIN_PATH;
而问题在于window下没有问题,而linux下有问题,,在windows下打印$_SERVRE不存在$_SERVER['HTTPS']这一项,而在linux下打印,$_SERVER['HTTPS']=“”,,所以这就这问题的根源在,可是为什么在linux下会出现$_SERVER['HTTPS']这一项呢?
本文标签:
很赞哦! ()
相关教程
图文教程
ecshop错误提示Warning: Invalid argument supplied for foreach
1.php下foreach()错误提示Warning: Invalid argument supplied for foreach() 错误提示:Warning: Invalid argument supplied for foreach() in E:wamp myshopcart.php on l
ecshop安装提示cls_image::gd_version()和不支持JPEG的解决方法
在安装Ecshop的时候,遇到两个问题: 1.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in D:\X\ \ecshop\install\inclu
ecshop商品页购买记录显示商品属性
如果某个商品有好几个颜 ,正好赶上有个买家各种颜 都买了1个,而ECSHOP默认的销售记录没有属 这一项,这样就会出现连续好几条购买记录都是同一个买家的,让人看着不舒服。
ecshop只开启个别页面的URL重写rewrite的方法
最近看到有人在ECSHOP论坛发帖询问类似问题,觉得比较新颖,就写了下共享了出来。问题:如何只开启商品页面的rewite,也就是说只是将商品页链接形式修改
相关源码
-
(自适应响应式)供应链进出口服务pbootcms企业网站源码为供应链管理、进出口服务类企业设计,特别适合展示物流网络、贸易服务和供应链解决方案。采用响应式技术,确保在各类设备上都能呈现企业服务内容。查看源码 -
帝国cms7.5模板生活常识美食女性时尚综合资讯门户源码本模板为帝国cms7.5生活资讯类网站设计,以天奇生活网为参考原型,涵盖生活常识、美食烹饪、女性时尚等多元化内容板块。采用响应式布局设计,适配各种终端设备,为访客提供优质的阅读体验。模板结构清晰合理,内容展示层次分明,符合生活类网站的用户需求。查看源码 -
(自适应)宽屏大气红色机械设备pbootcms模板源码下载为机械设备制造企业设计的响应式网站模板,采用PbootCMS内核开发。宽屏布局突出设备展示效果,红色工业风格贴合机械行业属性,支持PC端与手机端自动适配查看源码 -
深蓝色风景摄影机构网站(自适应多端)pbootcms模板该模板基于PbootCMS内核开发,专为风景摄影机构、户外摄影企业设计,采用深蓝色主题传递专业与艺术感,全栈响应式架构确保PC、平板、手机端无缝适配PHP程序结合轻量级SQLite数据库也可以更换MySQL数据库查看源码 -
(PC+WAP)绿色环保设备环保企业网站模板源码下载基于PbootCMS内核开发的响应式企业模板,为环保设备制造、环境技术服务等企业打造,通过模块化设计实现多行业快速适配。查看源码 -
(PC+WAP)家居装饰家装建材营销型网站pbootcms模板下载本模板基于PbootCMS开发,主要服务于家居装饰、建材及相关行业。采用现代化设计风格,同时适配PC和移动设备访问。模板结构清晰,突出展示家装案例和建材产品,帮助企业在线上建立专业形象,有效展示产品与服务优势。查看源码
| 分享笔记 (共有 篇笔记) |
