文档章节

shopnc流程(一)

熊猫88
 熊猫88
发布于 2015/12/23 10:47
字数 922
阅读 118
收藏 2

shopnc是国内比较成熟的一套b2b2c系统。我们也开发过自己的一套b2b2c系统,但是相比较了下,确实有不少的差距。
  一般在初期我们只会用到目录里的shop文件夹。(访问默认的首页)
  $site_url = strtolower('http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/index.php')).'/shop/index.php');
include('shop/index.php');
会自动跳转到shop/index.php里面去。
   每个项目都会有对应index.php(比如cms,mobile等项目里面)用来定义各个项目的属性。(该文件主要加载一些内置文件和资源)
   同时运行核心函数方法:Base::Run()
    public static function run(){
        self::cp();
        self::init();          
        self::control();
    }
   该方法是一个静态方法(该Base类也是一个final类,对于确定了没有继承的类,用final继承类可以提升运行效率,输出确定的方法)
   在run的方法中,运行了Base自身类的cp,init,control方法cp主要是用来限定确定的host访问的
   private static function cp(){
        if (self::CPURL == '') return;
        if ($_SERVER['HTTP_HOST'] == 'localhost') return;
        if ($_SERVER['HTTP_HOST'] == '127.0.0.1') return;
        if (strpos(self::CPURL,'||') !== false){
            $a = explode('||',self::CPURL);
            foreach ($a as $v) {
                $d = strtolower(stristr($_SERVER['HTTP_HOST'],$v));
                if ($d == strtolower($v)){
                    return;
                }else{
                    continue;
                }
            }
            header('location: http://www.test.com');exit();
        }else{
            $d = strtolower(stristr($_SERVER['HTTP_HOST'],self::CPURL));
            if ($d != strtolower(self::CPURL)){
                header('location: http://www.test.com');exit();
            }
        }
    }
     该方法分析:从程序结构上,感觉没有什么作用,校验是不是指定的网址。但是对于授权的域名网址却非常有用,起初我一直没有明白这个方法做什么用的,以为是为了防止CSRF攻击,但是csrf攻击本身还是调用了对应的URL,无法进行避免。但是对于加密授权作用却非常大。假如该套程序授权给了www.test.com,www.test1.com俩个域名使用,同时把Base文件进行加密处理,然后为其配置对应的文件。正常情况下,系统是可以运行的,但是只有该域名可以正常运行(这就是程序绑定运行域名的逻辑)。
     初始化方法,一般系统的初始化方法都差不多,主要初始化对应参数配置(该配置可以通过当前的项目定义进行获取,同时开启session)还有一些语言配置。
     核心方法control
     private static function control(){
        //二级域名
        if ($GLOBALS['setting_config']['enabled_subdomain'] == '1' && $_GET['act'] == 'index' && $_GET['op'] == 'index'){
            $store_id = subdomain();
            if ($store_id > 0) $_GET['act'] = 'show_store';
        }
        $act_file = realpath(BASE_PATH.'/control/'.$_GET['act'].'.php');
        $class_name = $_GET['act'].'Control';     
        if (!@include($act_file)){                  
            if (C('debug')) {
                throw_exception("Base Error: access file isn't exists!");
            } else {
                showMessage('抱歉!您访问的页面不存在','','html','error');
            }
        }           
        if (class_exists($class_name)){
            $main = new $class_name();
            $function = $_GET['op'].'Op';                     
            if (method_exists($main,$function)){                    
                $main->$function();
            }elseif (method_exists($main,'indexOp')){
                $main->indexOp();
            }else {                 
                $error = "Base Error: function $function not in $class_name!";
                throw_exception($error);
            }
        }else {                         
            $error = "Base Error: class $class_name isn't exists!";
            throw_exception($error);
        }
    }
      该方法的总结:该方法根据url传递的act和op找到对应默认的class和操作方法(这种自动加载实例化的方法和最简单的mvc结构里设置的其实思路是一样的)。采用了自动加载类Base::autoload.
    小结:
    用了一个访问域名运行检测,做授权认证。全局变量参数控制载入不同的配置,生成不同的网站。(一个大系统架设多个网站系统的思路,这样可以公用相同部分的配置)。用final确定基类不允许继承(同时有助于加密)。自动加载设定好加载对应项目的控制器,通过外部访问act和op的方式访问不同的方法,通用框架类的自动加载方法。

© 著作权归作者所有

共有 人打赏支持
熊猫88
粉丝 18
博文 76
码字总数 65366
作品 0
程序员
安装shopnc2.3之后,后台登陆页面验证码不显示

日志报错 PHP Warning: fileexists() [<a href='function.file-exists'>function.file-exists</a>]: openbasedir restriction in effect. File(E:/upupw/htdocs/shopnc/resource/seccode/gif......

zjl_longer
2013/11/15
0
0
ShopNC【B2B2C】多用户电商平台系统,带WAP,微商城,圈子,门户

《ShopNC【B2B2C】多用户电商平台系统,带WAP,微商城,圈子,门户》 早上发了套ShopNC B2B2C多用户商城2014商业版,带微商城,但不带圈子、WAP、圈子和门户,现在发的这套貌似功能更强悍些,在这...

tianlongbamu
2015/03/19
0
0
文件过滤,显示一个文件中的特定行(这里去除行开始有“#”的行)

-*- coding:utf-8 - ''' Created on 2012-8-17 @author : shaolei ''' 号开头的行 先打开一个文件以读的方式 f = open('D:pydevshopnchismember.sql','r') print f.readline countNum = 0 n......

shao
2012/08/17
0
0
第三方支付接口现号,第三方支付接口对接,第三方支付接口申请

第三方支付公司太多,到目前为止一共有5批206家拿牌支付公司:国付宝,支付宝,环迅,汇潮,易宝,快钱,智付,等等不管您从事与哪家,我们都必须面对这些事实,每家支付公司都有自己的优势跟...

alaimaro
04/26
0
0
10月学习总结:选择合适的框架进行快速开发

前言: 9月没有写学习总结,9月份事情有点多,平时学习时间也太少,工作中也只是重复造了一些轮子,没啥可记录的,就没有总结了,直接大跃进,进行10月总结,如果10月再不总结,那就是大大跃...

卖小女孩的小火柴
2015/11/14
0
2

没有更多内容

加载失败,请刷新页面

加载更多

wordpress 汉化

在 wp-config.php 添加 define('WPLANG','zh_CN'); 在后台,更新 now ,即可。

james_laughing
18分钟前
0
0
Android JNI开发系列(十一) JNI 访问父类的构造方法和父类实例方法

JNI 访问父类的构造方法和父类实例方法 构造方法和父类实例方法 先看一段Java代码, Java package org.professor.jni.animal;import android.util.Log;public class Animal {protecte...

蔡小鹏
24分钟前
0
0
腾讯投资最高1.75亿美元正式进军菲律宾移动支付市场

菲律宾长途电话公司(PLDT)公司今日宣布,中国互联网巨头腾讯和私募股权公司KKR将获得该公司旗下金融科技公司Voyager Innovations的少数股权。 PLDT在一份声明中称:“腾讯和KKR最多将分别收...

linuxCool
52分钟前
2
0
正则介绍及grep/egrep用法

10月16日任务 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 扩展 把一个目录下,过滤所有*.php文档中含有eval的行 grep -r --include="*.php" 'eval' /data 正则介绍 正则就是一串有规律的字符...

hhpuppy
今天
2
0
J2Cache 中使用 Lettuce 替代 Jedis 管理 Redis 连接

一直以来 J2Cache 都是使用 Jedis 连接 Redis 服务的。Jedis 是一个很老牌的 Redis 的 Java 开发包,使用很稳定,作者维护很勤勉,社区上能搜到的文章也非常非常多。算是使用范围最广的 Redi...

红薯
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部