【转】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!');
        }       
?>

原文地址:https://www.cnblogs.com/liuweitoo/p/2606184.html