zoukankan      html  css  js  c++  java
  • 开始了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:Xwwwecshopinstallincludeslib_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:ToolsECShop_V2.7.3_UTF8_release1106uploadincludescls_template.php
    on 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:wampwwwecshopadminsms_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
    "); } 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']这一项呢???

     


  • 相关阅读:
    设计模式系列
    Python3 系列之 可变参数和关键字参数
    设计模式系列
    【HANA系列】SAP HANA ODBC error due to mismatch of version
    【FICO系列】SAP FICO FS00修改科目为未清项目管理
    【FIORI系列】SAP OpenUI5 (SAPUI5) js框架简单介绍
    【HANA系列】SAP HANA SQL获取当前日期加若干天后的日期
    【HANA系列】SAP HANA SQL获取本周的周一
    【HANA系列】SAP HANA SQL获取当前日期
    【HANA系列】SAP HANA SQL获取当前日期最后一天
  • 原文地址:https://www.cnblogs.com/xiaoyueer/p/3525377.html
Copyright © 2011-2022 走看看