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']这一项呢???

     


  • 相关阅读:
    csu 1547(01背包)
    csu 1592(区间DP)
    Funny Car Racing(最短路变形)
    csu 1329 一行盒子(链表操作)
    poj 2828(线段树单点更新)
    软件开发文档模板 (学习)
    C 语言高效编程与代码优化
    【整理】uclibc,eglibc,glibc之间的区别和联系
    查找openssl内存泄漏(代码)
    openssl内存分配,查看内存泄露
  • 原文地址:https://www.cnblogs.com/xiaoyueer/p/3525377.html
Copyright © 2011-2022 走看看