zoukankan      html  css  js  c++  java
  • 【转】UCenter代码研究第一篇(ROOT/admin.php)

    <?
    /**
    * @注释作者 ToniLiu
    * ROOT/admin.php 是UCenter整个管理程序的唯一入口程序,用于分发系统的模板,功能等。
    * 写了很详细的注释,甚至有点啰嗦,仅限于大家一起学习,呵呵!
    * 我会慢慢的把其他比较重要文件都加入详细注释,供大家学习!
    */

            define('GMS_VERSION', '1.0.0');
            define('GMS_RELEASE', '20080429');
           
            //开发期间,报告任何错误
            error_reporting(E_ALL);
           
            //关闭魔术字符串转换功能
            set_magic_quotes_runtime(0);
           
            //note 开始时间
            $mtime = explode(' ', microtime());
            $starttime = $mtime[1] + $mtime[0];
           
            //设置常用的常量
            define('IN_GMS', TRUE);
            define('GMS_ROOT', substr(__FILE__, 0, -9));
            define('GMS_API', strtolower(substr($_SERVER['SERVER_PROTOCOL'], 0, strpos($_SERVER['SERVER_PROTOCOL'], '/'))).'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')));
            define('GMS_DATADIR', GMS_ROOT.'/data/');
            define('GMS_DATAURL', GMS_API.'/data');
            define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
           
           
            //清除变量
            unset($GLOBALS, $_ENV, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS, $HTTP_ENV_VARS);
           
           //对各种外来变量做魔术字符串转化工作,避免SQL注入
            $_GET     = daddslashes($_GET, 1, TRUE);
            $_POST    = daddslashes($_POST, 1, TRUE);
            $_COOKIE  = daddslashes($_COOKIE, 1, TRUE);
            $_SERVER  = daddslashes($_SERVER);
            $_FILES   = daddslashes($_FILES);
            $_REQUEST = daddslashes($_REQUEST, 1, TRUE);
           
            //载入相关的基础操作类
            require GMS_DATADIR.'config.inc.php';
            require GMS_ROOT.'model/base.php';
            require GMS_ROOT.'model/admin.php';

           //这个文件中存放着daddslashes()以及getgpc()两个函数,原来在这个文件夹中,我给分出去了,看着累,呵呵。
            require GMS_ROOT.'function/common.fun.php';
           
            //检查输入的参数,$_REQUEST这个数组是$_GET,$_POST数组的合集,但速度较慢
            $m = empty($_REQUEST['m']) ? 'frame' : $_REQUEST['m'];
            $a = empty($_REQUEST['a']) ? 'index' : $_REQUEST['a'];
           
            //初始化模块数组,元素的内容和control文件的文件名对应
            $model_Array = array('admin', 'app', 'badword', 'pm', 'cache', 'db', 'domain', 'frame', 'log', 'note', 'setting', 'user', 'credit', 'seccode');
           
            //判断输入的$m是否在系统模块之内,如果在执行IF语句里的语句,加载相应控制文件.
            if(in_array($m,$model_Array)) {
                   
                    //根据$m引入相应的CONTROL类文件,各个control文件都继承自base类
                    //这里的思路应用了简单的工厂模式
                    include UC_ROOT."control/admin/$m.php";
                   
                    //初始化相应CONTROL文件的CONTROL类
                    $control = new control();
                   
                    //note 不允许访问私有方法
                    //注解:method_exists()为系统函数

                      //用于检查第一个参数的类中是否有$method命名的function
                    //在control类中提供了一个接口函数,用于当调用函数为private时,使用_call()嵌套调用

                    //在OOP编程中提倡这种调用方法,即所有的函数都应该不能直接被调用,用统一的接口函数去约束
                   
                    $method = 'on'.$a;
                    if(method_exists($control, $method) && $method{0} != '_') {
                            $control->$method();
                    } elseif(method_exists($control, '_call')) {
                            $control->_call('on'.$a, '');
                    } else {
                            exit('Action not found!');
                    }
            } else {
                    exit('Module not found!');
            }       
    ?>

  • 相关阅读:
    java基础之条件运算符
    java基础之x++与++x
    java基础之三种注释及API帮助文档的生成
    java基础之类型转换及常量的应用
    java基础之数据类型
    java基础之标识符
    生活小插曲(长篇连载,持续更新ing)^_^
    记录那个刚毕业,还不太富裕的那个人的生活
    记录两次小组会议总结
    这是大娃笔记里的一首散文诗
  • 原文地址:https://www.cnblogs.com/liuweitoo/p/2606184.html
Copyright © 2011-2022 走看看