destoon运行流程二次开发必看
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2016-09-05 08:25:06
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
destoon系统采用B/S架构,MVC模式开发。融入了模型化、模板、缓存、AJAX、SEO等前沿技术 下面是运行流程,虽然版本有更新但大体上是没有变化太多的
//代码首先包含common.inc.php文件 //在common.inc.php文件中,首先定义常量。 define('IN_DESTOON', true); define('IN_ADMIN', defined('DT_ADMIN') ? true : false); define('DT_ROOT', str_replace("\\", '\/', dirname(__FILE__))); if (defined('DT_REWRITE')) { include DT_ROOT . '/include/rewrite.inc.php'; } //是否定义了url伪静态? //网站整体配置信息 $CFG = array(); //-----------------网站配置文件 require DT_ROOT . '/config.inc.php'; define('DT_PATH', $CFG['url']); define('DT_DOMAIN', $CFG['cookie_domain'] ? substr($CFG['cookie_domain'], 1) : ''); define('DT_WIN', strpos(strtoupper(PHP_OS), 'WIN') !== false ? true : false); define('DT_CHMOD', ($CFG['file_mod'] && !DT_WIN) ? $CFG['file_mod'] : 0); define('DT_URL', $CFG['url']); //Fox 3.x define('DT_LANG', $CFG['language']); define('DT_KEY', $CFG['authkey']); define('DT_CHARSET', $CFG['charset']); define('DT_CACHE', $CFG['cache_dir'] ? $CFG['cache_dir'] : DT_ROOT . '/file/cache'); define('DT_SKIN', DT_PATH . 'skin/' . $CFG['skin'] . '/'); define('SKIN_PATH', DT_PATH . 'skin/' . $CFG['skin'] . '/'); //For 2.x define('VIP', $CFG['com_vip']); define('errmsg', 'Invalid Request'); //随后加载网站基本功能 $L = array(); include DT_ROOT . '/lang/' . DT_LANG . '/lang.inc.php'; //语言信息 require DT_ROOT . '/version.inc.php'; require DT_ROOT . '/include/global.func.php'; //--------全局函数 require DT_ROOT . '/include/tag.func.php'; //-----------标签函数 require DT_ROOT . '/api/im.func.php'; //----------------聊天工具 require DT_ROOT . '/api/extend.func.php'; //------------自己写的扩展函数 if (!$MQG && $_POST) { $_POST = daddslashes($_POST); } if (!$MQG && $_GET) { $_GET = daddslashes($_GET); } if (function_exists('date_default_timezone_set')) { date_default_timezone_set($CFG['timezone']); } $DT_PRE = $CFG['tb_pre']; $DT_QST = $_SERVER['QUERY_STRING']; //----------------querystring $DT_TIME = time() + $CFG['timediff']; //--------------当前时间 $DT_IP = get_env('ip'); $DT_URL = get_env('url'); $DT_REF = get_env('referer'); $DT_BOT = is_robot(); //链接数据库,建立缓存。 header("Content-Type:text/html;charset=" . DT_CHARSET); require DT_ROOT . '/include/db_' . $CFG['database'] . '.class.php'; //加载数据库类 require DT_ROOT . '/include/cache_' . $CFG['cache'] . '.class.php'; //加载缓存类 if ($_POST) { extract($_POST, EXTR_SKIP); } //解析post请求的数据 if ($_GET) { extract($_GET, EXTR_SKIP); } //解析get请求的数据 $db_class = 'db_' . $CFG['database']; $db = new $db_class; $db->halt = (DT_DEBUG || IN_ADMIN) ? 1 : 0; $db->pre = $CFG['tb_pre']; $db->connect($CFG['db_host'], $CFG['db_user'], $CFG['db_pass'], $CFG['db_name'], $CFG['db_expires'], $CFG['db_charset'], $CFG['pconnect']); $dc = new dcache(); $dc->pre = $CFG['cache_pre']; //加载模块的基本配置 $DT = $MOD = $EXT = $CSS = $DTMP = $CAT = $ARE = $AREA = array(); $CACHE = cache_read('module.php'); if (!$CACHE) { //没有缓存模块,就读取缓存模块。 require_once DT_ROOT . '/admin/global.func.php'; require_once DT_ROOT . '/include/post.func.php'; require_once DT_ROOT . '/include/cache.func.php'; cache_all(); $CACHE = cache_read('module.php'); } $DT = $CACHE['dt']; $MODULE = $CACHE['module']; $EXT = cache_read('module-3.php'); //加载模块,读取模块信息,引入模块文件 if (!isset($moduleid)) { $moduleid = 1; $module = 'destoon'; } else if ($moduleid == 1) { $module = 'destoon'; } else { $moduleid = intval($moduleid); isset($MODULE[$moduleid]) or dheader(DT_PATH); $module = $MODULE[$moduleid]['module']; $MOD = $moduleid == 3 ? $EXT : cache_read('module-' . $moduleid . '.php'); include DT_ROOT . '/lang/' . DT_LANG . '/' . $module . '.inc.php'; } $forward = isset($forward) ? urldecode($forward) : $DT_REF; //------------来源页面 $action = isset($action) ? trim($action) : ''; //-------------动作指令 //判断用户登录 $destoon_auth = get_cookie('auth'); if ($destoon_auth) { $_dauth = explode("t", decrypt($destoon_auth, md5(DT_KEY . $_SERVER['HTTP_USER_AGENT']))); //print_r($_dauth);SELECT userid,username,groupid,admin FROM destoon_member $_userid = isset($_dauth[0]) ? intval($_dauth[0]) : 0; $_username = isset($_dauth[1]) ? trim($_dauth[1]) : ''; $_groupid = isset($_dauth[2]) ? intval($_dauth[2]) : 3; $_admin = isset($_dauth[4]) ? intval($_dauth[4]) : 0; if ($_userid && !defined('DT_NONUSER')) { $_password = isset($_dauth[3]) ? trim($_dauth[3]) : ''; $user = $db->get_one("SELECT username,passport,company,truename,password,groupid,email,message,chat,sound,online,sms,credit,money,loginip,admin,aid,edittime,trade FROM {$DT_PRE}member WHERE userid=$_userid"); if ($user && $user['password'] == $_password) { if ($user['groupid'] == 2) { dalert(lang('message->common_forbidden')); } //禁止用户访问的组别 extract($user, EXTR_PREFIX_ALL, ''); if ($user['loginip'] != $DT_IP && ($DT['ip_login'] == 2 || ($DT['ip_login'] == 1 && IN_ADMIN))) { //单点登录,判断ip $_userid = 0; set_cookie('auth', ''); dalert(lang('message->common_login', array($user['loginip'])), DT_PATH); } } else { //登录失败 $_userid = 0; if ($db->linked && !isset($swfupload) && strpos($_SERVER['HTTP_USER_AGENT'], 'Flash') === false) { set_cookie('auth', ''); } } unset($destoon_auth, $user, $_dauth, $_password); } } if ($_userid == 0) { $_groupid = 3; $_username = '';} if (!IN_ADMIN) { if ($_groupid == 1) { include DT_ROOT . '/module/member/admin.inc.php'; } if ($_userid && !defined('DT_NONUSER')) { $db->query("REPLACE INTO {$DT_PRE}online (userid,username,ip,moduleid,online,lasttime) VALUES ('$_userid','$_username','$DT_IP','$moduleid','$_online','$DT_TIME')"); } else { if (timetodate($DT_TIME, 'i') == 10) { $lastime = $DT_TIME - $DT['online']; $db->query("DELETE FROM {$DT_PRE}online WHERE lasttime<$lastime"); } } } $MG = cache_read('group-' . $_groupid . '.php'); //读取用户组别配置 $_areaids = ''; $_areaid = array(); if ($DT['city']) { $AREA or $AREA = cache_read('area.php'); if ($_aid) { $_areaids = $AREA[$_aid]['child'] ? $AREA[$_aid]['arrchildid'] : $_aid; $_areaid = explode(',', $_areaids); } } else { $_aid < 1 or dalert('系统未开启分站功能,您的分站管理帐号暂不可用', $MODULE[2]['linkurl'] . 'logout.php'); } $session = new dsession(); require DT_ROOT . '/admin/global.func.php'; require DT_ROOT . '/include/post.func.php'; require_once DT_ROOT . '/include/cache.func.php'; isset($file) or $file = 'index'; $secretkey = 'admin_' . strtolower(substr($CFG['authkey'], -6)); //echo $secretkey;exit; if ($DT['authadmin'] == 'session') { $_destoon_admin = isset($_SESSION[$secretkey]) ? intval($_SESSION[$secretkey]) : 0; } else { $_destoon_admin = get_cookie($secretkey); $_destoon_admin = $_destoon_admin ? intval($_destoon_admin) : 0; } $_founder = $CFG['founderid'] == $_userid ? $_userid : 0; $_catids = $_childs = ''; $_catid = $_child = array(); if ($file != 'login') { if ($_groupid != 1 || $_admin < 1 || !$_destoon_admin) { msg('', '?file=login&forward=' . urlencode($DT_URL)); } //判断用户是否已经登录?如果未登录,直接跳转到登录页面。防止用户构造url。 if (!admin_check()) { admin_log(1); $db->query("DELETE FROM { $db->pre}admin WHERE userid=$_userid AND url='?" . $DT_QST . "'"); msg('警告!您无权进行此操作 Error(00)'); } } //是否记录日志 if ($DT['admin_log'] && $action != 'import') { admin_log(); } if ($DT['admin_online']) { admin_online(); } $psize = isset($psize) ? intval($psize) : 0; if ($psize > 0 && $psize != $pagesize) { $pagesize = $psize; $offset = ($page - 1) * $pagesize; } if ($module == 'destoon') { (include DT_ROOT . '/admin/' . $file . '.inc.php') or msg(); } else { echo $file . '|' . $module; include DT_ROOT . '/module/' . $module . '/common.inc.php'; //加载模块下的common文件 (include MD_ROOT . '/admin/' . $file . '.inc.php') or msg(); //加载模块文件 }