Discuz!7.2 common.inc.php 學習

 
error_reporting(0); //禁用錯誤報告
//set_magic_quotes_runtime:所有的溢出字符,當遇到反斜杆、單引號,將會自動加上一個反斜杆,保護系統和數據庫的安全。
//set_magic_quotes_runtime(0) 爲關閉。
set_magic_quotes_runtime(0);
//獲取時間戳數組
$mtime = explode(' ', microtime());
$discuz_starttime = $mtime[1] + $mtime[0];
 
define('SYS_DEBUG', FALSE);//調試?
define('IN_DISCUZ', TRUE);//未知
define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7));//當前目錄 -7是爲了扣除當前文件夾/include
define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());//檢測是否開啓set_magic_quotes_runtime
//!defined('CURSCRIPT') && define('CURSCRIPT', '');
//$_GET 等是在4.0後纔有
if(PHP_VERSION  $_value) {
        $_key{0} != '_' && $$_key = daddslashes($_value);
    }
}
 
if (!MAGIC_QUOTES_GPC && $_FILES) {
    $_FILES = daddslashes($_FILES);
}
 
$charset = $dbs = $dbcharset = $forumfounders = $metakeywords = $extrahead = $seodescription = $mnid = '';
$plugins = $admincp = $scriptlang = $forum = $thread = $language = $jsmenu = $actioncode = $modactioncode = $pluginclasses = $hooks = $lang = array();
$_DCOOKIE = $_DSESSION = $_DCACHE = $_DPLUGIN = $advlist = array();
 
//配置信息
require_once DISCUZ_ROOT.'./config.inc.php';
 
// 論壇訪問頁面防禦開關,可避免用戶通過非法的url地址對本站用戶造成危害,建議打開。1=打開 0關閉
//過濾<和“?貌似能用html編碼繞過吧
if($urlxssdefend && !empty($_SERVER['REQUEST_URI'])) {
    $temp = urldecode($_SERVER['REQUEST_URI']);
    if(strpos($temp, ' $val) {
    if(substr($key, 0, $prelength) == $cookiepre) {
        $_DCOOKIE[(substr($key, $prelength))] = MAGIC_QUOTES_GPC ? $val : daddslashes($val);
    }
}
unset($prelength, $_request, $_key, $_value);
 
/*
 * 這段不明真相
 */
$inajax = !empty($inajax);
$handlekey = !empty($handlekey) ? htmlspecialchars($handlekey) : '';
$timestamp = time();
 
/*論壇防禦級別,可防止大量的非正常請求造成的拒絕服務***
防護大量非正常請求造成的拒絕服務***,
0=關閉, 1=cookie 刷新限制, 2=限制代理訪問, 4=二次請求, 8=回答問題(第一次訪問時需要回答問題)
組合爲: 1|2, 1|4, 2|8, 1|2|4...
*/
if($attackevasive && (!define('CURSCRIPT') || CURSCRIPT != 'seccode')) {
    require_once DISCUZ_ROOT.'./include/security.inc.php';
}
 
//這樣會不會被注入?
require_once DISCUZ_ROOT.'./include/db_'.$database.'.class.php';
 
//當前運行程序或者腳本
$PHP_SELF = dhtmlspecialchars($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);
 
//當前文件
$BASESCRIPT = basename($PHP_SELF);
 
list($BASEFILENAME) = explode('.', $BASESCRIPT);
 
//路徑
$boardurl = htmlspecialchars('http://'.$_SERVER['HTTP_HOST'].preg_replace("//+(api|archiver|wap)?/*$/i", '', substr($PHP_SELF, 0, strrpos($PHP_SELF, '/'))).'/');
 
//獲取真實IP
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
    $onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
    $onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
    $onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
    $onlineip = $_SERVER['REMOTE_ADDR'];
}
preg_match("/[d.]{7,15}/", $onlineip, $onlineipmatches);
$onlineip = $onlineipmatches[0] ? $onlineipmatches[0] : 'unknown';
unset($onlineipmatches);
 
//緩存
$cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? ' : 'settings';
@extract($_DCACHE['settings']);
 
/*看暈了。
 *BINDDOMAIN在Index.php中設置爲index
 *$cachelost爲是否有緩存。$binddomains和$forumdomains是神馬東西?//應該是從cache_settiongs.php獲取
 *個人猜測:可能是解決cookie中的域名和現在域名不同出現的問題吧
 */
if(defined('BINDDOMAIN') && BINDDOMAIN && !$cachelost && $binddomains && $forumdomains) {
    //繼續不明真相
    $loadforum = isset($binddomains[$_SERVER['HTTP_HOST']]) ? max(0, intval($binddomains[$_SERVER['HTTP_HOST']])) : 0;
 
    if($loadforum) {
        if(BINDDOMAIN == 'forumdisplay' && $loadforum == $fid) {
            header("HTTP/1.1 301 Moved Permanently");
            $query_string = preg_replace('/??fid='.$fid.'&?/is', '', $_SERVER['QUERY_STRING']);
            //重定向到什麼地方?
            dheader("Location: http://$_SERVER[HTTP_HOST]/{$indexname}".($query_string ? "?{$query_string}" : '));
        }
        if(BINDDOMAIN == 'index') {
            $fid = $_GET['fid'] = $_REQUEST['fid'] = $loadforum;
            define('CURSCRIPT', 'forumdisplay');
        }
    } else {
        if(BINDDOMAIN == 'forumdisplay' && isset($forumdomains[$fid])) {
            $host = $forumdomains[$fid];
            header("HTTP/1.1 301 Moved Permanently");
            dheader("Location: http://{$host}/{$indexname}");
        }
        define('CURSCRIPT', BINDDOMAIN);
    }
}
//仍然不明真相
if(!defined('CURSCRIPT')) {
    define('CURSCRIPT', defined('BINDDOMAIN') ? BINDDOMAIN : ');
}
 
if(!defined('STAT_ID') && isset($statdisable) && empty($statdisable)) {
    define('STAT_ID', $_DCACHE['settings']['statid']);
    define('STAT_KEY', $_DCACHE['settings']['statkey']);
}
 
//開啓gzip壓縮
if($gzipcompress && function_exists('ob_gzhandler') && !in_array(CURSCRIPT, array('p_w_upload', 'wap')) && !$inajax) {
    ob_start('ob_gzhandler');
} else {
    $gzipcompress = 0;
    ob_start();
}
 
if(!empty($loadctrl) && substr(PHP_OS, 0, 3) != 'WIN') {
    //非win系統下的負載
    if($fp = @fopen('/proc/loadavg', 'r')) {
        list($loadaverage) = explode(' ', fread($fp, 6));
        fclose($fp);
        //如果大於負載
        if($loadaverage > $loadctrl) {
            header("HTTP/1.0 503 Service Unavailable");
            include DISCUZ_ROOT.'./include/serverbusy.htm';
            exit();
        }
    }
}
 
//看是否能引用緩存頁面。如果不行就把CURSCRIPT加到$cachelost中
if(in_array(CURSCRIPT, array('index', 'forumdisplay', 'viewthread', 'post', 'topicadmin', 'register', 'archiver'))) {
    $cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/cache_'.CURSCRIPT.'.php') ? ' ': ' '.CURSCRIPT;
}
 
//實例化數據庫(爲什麼數據庫的類文件這麼早引入現在才實例化)
$db = new dbstuff;
$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);
$dbuser = $dbpw = $pconnect = $sdb = NULL;
//獲取sid
$sid = daddslashes(($transsidstatus || CURSCRIPT == 'wap') && (isset($_GET['sid']) || isset($_POST['sid'])) ?
    (isset($_GET['sid']) ? $_GET['sid'] : $_POST['sid']) :
    (isset($_DCOOKIE['sid']) ? $_DCOOKIE['sid'] : '));
 
//如果CURSCRIPT是p_w_upload 就用GET獲取sid(authcode解密)
CURSCRIPT == 'p_w_upload' && isset($_GET['sid']) && $sid = addslashes(authcode($_GET['sid'], 'DECODE', $_DCACHE['settings']['authkey']));
 
//訪問者信息加密
$discuz_auth_key = md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);
 
//又是這種風格。多幾行代碼會死人啊?
//cookie中的auth值按t分割,分別賦給爲$discuz_pw, $discuz_secques, $discuz_uid
list($discuz_pw, $discuz_secques, $discuz_uid) = empty($_DCOOKIE['auth']) ? array('', '', 0) : daddslashes(explode("t", authcode($_DCOOKIE['auth'], 'DECODE')), 1);
 
$prompt = $sessionexists = $seccode = 0;
//M.M  下面這段我理解成一條SQL語句的一段。ORZ
$membertablefields = 'm.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
    m.adminid, m.groupid, m.groupexpiry, m.extgroupids, m.email, m.timeoffset, m.tpp, m.ppp, m.posts, m.threads, m.digestposts,
    m.oltime, m.pageviews, m.credits, m.extcredits1, m.extcredits2, m.extcredits3, m.extcredits4, m.extcredits5,
    m.extcredits6, m.extcredits7, m.extcredits8, m.timeformat, m.dateformat, m.pmsound, m.sigstatus, m.invisible,
    m.lastvisit, m.lastactivity, m.lastpost, m.prompt, m.accessmasks, m.editormode, m.customshow, m.customaddfeed, m.newbietaskid';
 
if($sid) {//有sid
    if($discuz_uid) {//cookid中有值
        //聯合查詢 session 和 members
        //上面那串莫名字符派上用場了。果然是sql語句的一段。
        $query = $db->query("SELECT s.sid, s.styleid, s.groupid='6' AS ipbanned, s.pageviews AS spageviews, s.lastolupdate, s.seccode, $membertablefields
            FROM {$tablepre}sessions s, {$tablepre}members m
            WHERE m.uid=s.uid AND s.sid='$sid' AND CONCAT_WS('.',s.ip1,s.ip2,s.ip3,s.ip4)='$onlineip' AND m.uid='$discuz_uid'
            AND m.password='$discuz_pw' AND m.secques='$discuz_secques'");
    } else {
        //cookie中沒有的話只用sessions
        $query = $db->query("SELECT sid, uid AS sessionuid, groupid, groupid='6' AS ipbanned, pageviews AS spageviews, styleid, lastolupdate, seccode
            FROM {$tablepre}sessions WHERE sid='$sid' AND CONCAT_WS('.',ip1,ip2,ip3,ip4)='$onlineip'");
    }
    //數據放入_DSESSION
    if($_DSESSION = $db->fetch_array($query)) {
        //這個變量應該是指代是否在線吧。。
        $sessionexists = 1;
        if(!empty($_DSESSION['sessionuid'])) {
 
            //查詢members得到一堆值也放入$_DSESSION
            $_DSESSION = array_merge($_DSESSION, $db->fetch_first("SELECT $membertablefields
                FROM {$tablepre}members m WHERE uid='$_DSESSION[sessionuid]'"));
        }
    } else {
        //上面的上面的SQL語句查詢失敗。則按照無cookie重新查詢
        //清除COOKIE(應該是防止僞造cookie吧)
        if($_DSESSION = $db->fetch_first("SELECT sid, groupid, groupid='6' AS ipbanned, pageviews AS spageviews, styleid, lastolupdate, seccode
            FROM {$tablepre}sessions WHERE sid='$sid' AND CONCAT_WS('.',ip1,ip2,ip3,ip4)='$onlineip'")) {
            clearcookies();
            $sessionexists = 1;
        }
    }
}
 
//不在線
if(!$sessionexists) {
    if($discuz_uid) {//但是cookie存在
        //cookie無法登陸。系僞造。清除cookie
        if(!($_DSESSION = $db->fetch_first("SELECT $membertablefields, m.styleid
            FROM {$tablepre}members m WHERE m.uid='$discuz_uid' AND m.password='$discuz_pw' AND m.secques='$discuz_secques'"))) {
            clearcookies();
        }
    }
    //判斷是否該IP不允許登陸
    if(ipbanned($onlineip)) $_DSESSION['ipbanned'] = 1;
    //重新生成sid
    $_DSESSION['sid'] = random(6);
    $_DSESSION['seccode'] = random(6, 1);
}
 
//這三行表示看不懂
$_DSESSION['dateformat'] = empty($_DSESSION['dateformat']) || empty($_DCACHE['settings']['userdateformat'][$_DSESSION['dateformat'] -1])? $_DCACHE['settings']['dateformat'] : $_DCACHE['settings']['userdateformat'][$_DSESSION['dateformat'] -1];
$_DSESSION['timeformat'] = empty($_DSESSION['timeformat']) ? $_DCACHE['settings']['timeformat'] : ($_DSESSION['timeformat'] == 1 ? 'h:i A' : 'H:i');
$_DSESSION['timeoffset'] = isset($_DSESSION['timeoffset']) && $_DSESSION['timeoffset'] != 9999 ? $_DSESSION['timeoffset'] : $_DCACHE['settings']['timeoffset'];
 
//清空
$membertablefields = '';
@extract($_DSESSION);
 
$disableprompt = !empty($_DCOOKIE['disableprompt']) ? explode('|', $_DCOOKIE['disableprompt']) : array();
 
//這個是上面定義的變量,用途未知
//補:$prompt是members表中字段。不過這段代碼作用仍然不知
if($prompt) {
    if($taskon && ($prompt & 8)) {
        $prompts['newbietask'] = 1;
        $disallowfloat = str_replace('task','', $disallowfloat);
        $disallowfloat .= '|newthread|reply';
        $editormode = 0;
    }
    $prompt = 0;
    $query = $db->query("SELECT typeid, number FROM {$tablepre}prompt WHERE uid='$discuz_uid'");
    while($promptrow = $db->fetch_array($query)) {
        if($disableprompt && in_array($promptkeys[$promptrow['typeid']], $disableprompt)) {
            continue;
        }
        $prompt = $promptrow['number'] ? 1 : $prompt;
        $prompts[$promptkeys[$promptrow['typeid']]]['new'] = $promptrow['number'];
    }
}
 
if($announcepm && !in_array('announcepm', $disableprompt)) {
    $prompts['announcepm']['new'] = $announcepm;
}
//$lastvisit也在member表中,應該是上次訪問時間。-86400應該是24小時前吧
$lastvisit = empty($lastvisit) ? $timestamp - 86400 : $lastvisit;
//這句沒看懂
$timenow = array('time' => gmdate("$dateformat $timeformat", $timestamp + 3600 * $timeoffset),
    'offset' => ($timeoffset >= 0 ? ($timeoffset == 0 ? ' : '+'.$timeoffset) : $timeoffset));
 
if(PHP_VERSION > '5.1') {
    //date_default_timezone_set()函數的作用是:設定用於一個腳本中所有日期時間函數的默認時區。
    @date_default_timezone_set('Etc/GMT'.($timeoffset > 0 ? '-' : '+').(abs($timeoffset)));
}
 
$accessadd1 = $accessadd2 = $modadd1 = $modadd2 = $metadescription = $hookscriptmessage = ';
 
if(empty($discuz_uid) || empty($discuz_user)) {
    //未登錄用戶初始化
    $discuz_user = $extgroupids = '';
    $discuz_uid = $adminid = $posts = $digestposts = $pageviews = $oltime = $invisible
        = $credits = $extcredits1 = $extcredits2 = $extcredits3 = $extcredits4
        = $extcredits5 = $extcredits6 = $extcredits7 = $extcredits8 = 0;
    $groupid = empty($groupid) || $groupid != 6 ? 7 : 6;
 
} else {
    //以登陸用戶
    $discuz_userss = $discuz_user;
    $discuz_user = addslashes($discuz_user);
    //這個也是Member表的數據。作用不明
    //組合sql語句
    if($accessmasks) {
        $accessadd1 = ', a.allowview, a.allowpost, a.allowreply, a.allowgetattach, a.allowpostattach';
        $accessadd2 = "LEFT JOIN {$tablepre}access a ON a.uid='$discuz_uid' AND a.fid=f.fid";
    }
    //這個也是member的數據。字面理解應該是管理員ID之類的吧
    if($adminid == 3) {
        $modadd1 = ', m.uid AS ismoderator';
        $modadd2 = "LEFT JOIN {$tablepre}moderators m ON m.uid='$discuz_uid' AND m.fid=f.fid";
    }
}
 
//這句不明真相
if($errorreport == 2 || ($errorreport == 1 && $adminid > 0)) {
    error_reporting(E_ERROR | E_WARNING | E_PARSE);
}
 
//獲得一個拼裝值。
define('FORMHASH', formhash());
 
//statstatus在cache_setting.php中。
//後面引用的是網站統計。這個變量應該是標記是否統計流量等信息吧
$statstatus && !$inajax && require_once DISCUZ_ROOT.'./include/counter.inc.php';
 
//$extra該參數作用不明
$extra = isset($extra) && @preg_match("/^[&=;a-z0-9]+$/i", $extra) ? $extra : ';
 
$rsshead = $navtitle = $navigation = '';
 
//字面理解 groupid應該和權限有關係
$_DSESSION['groupid'] = $groupid = empty($ipbanned) ? (empty($groupid) ? 7 : intval($groupid)) : 6;
//如果文件中沒有就到數據庫裏查找
if(!@include DISCUZ_ROOT.'./forumdata/cache/usergroup_'.$groupid.'.php') {
    $grouptype = $db->result_first("SELECT type FROM {$tablepre}usergroups WHERE groupid='$groupid'");
    if(!empty($grouptype)) {
        $cachelost .= ' usergroup_'.$groupid;
    } else {
        $grouptype = 'member';
    }
}
 
/*
$link_login = 'logging.php?action=login';
$link_logout = 'logging.php?action=logout&formhash='.FORMHASH;
$link_register = $regname;
*/
 
//有登陸的用戶
if($discuz_uid && $_DSESSION) {
    //用處不明。$groupexpiry在members中。過期用戶?
    if(!empty($groupexpiry) && $groupexpiry  $grouptype,
        'creditshigher' => $groupcreditshigher,
        'creditslower' => $groupcreditslower
        ), $_DSESSION)) {
        //又一個extract。我的神
        @extract($_DSESSION);
        $cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/usergroup_'.intval($groupid).'.php') ? ' : ' usergroup_'.$groupid;
    }
}
 
//值不是1、2、3的管理員帳戶,將各個參數置零
if(!in_array($adminid, array(1, 2, 3))) {
    $alloweditpost = $alloweditpoll = $allowstickthread = $allowmodpost = $allowdelpost = $allowmassprune
        = $allowrefund = $allowcensorword = $allowviewip = $allowbanip = $allowedituser = $allowmoduser
        = $allowbanuser = $allowpostannounce = $allowviewlog = $disablepostctrl = 0;
} elseif(isset($radminid) && $adminid != $radminid && $adminid != $groupid) {
    //管理員引入管理員緩存頁面
    $cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/admingroup_'.intval($adminid).'.php') ? ' : ' admingroup_'.$groupid;
}
 
//應該是頁數文章ID、主題ID、類別ID。後面兩個不知道是啥
$page = isset($page) ? max(1, intval($page)) : 1;
$tid = isset($tid) && is_numeric($tid) ? $tid : 0;
$fid = isset($fid) && is_numeric($fid) ? $fid : 0;
$typeid = isset($typeid) ? intval($typeid) : 0;
$tpp = intval(empty($_DSESSION['tpp']) ? $topicperpage : $_DSESSION['tpp']);
$ppp = intval(empty($_DSESSION['ppp']) ? $postperpage : $_DSESSION['ppp']);
 
$modthreadkey = isset($modthreadkey) && $modthreadkey == modthreadkey($tid) ? $modthreadkey : '';
$auditstatuson = $modthreadkey ? true : false;
 
//主題和文章都不爲空
if(!empty($tid) || !empty($fid)) {
    //組合sql語句。字面理解可能也是權限相關
    if(empty($tid)) {
        $forum = $db->fetch_first("SELECT f.fid, f.*, ff.* $accessadd1 $modadd1, f.fid AS fid
            FROM {$tablepre}forums f
            LEFT JOIN {$tablepre}forumfields ff ON ff.fid=f.fid $accessadd2 $modadd2
            WHERE f.fid='$fid'");
    } else {
        //這個應該是具體的文章了。
        $forum = $db->fetch_first("SELECT t.tid, t.closed,".(defined('SQL_ADD_THREAD') ? SQL_ADD_THREAD : ')." f.*, ff.* $accessadd1 $modadd1, f.fid AS fid
            FROM {$tablepre}threads t
            INNER JOIN {$tablepre}forums f ON f.fid=t.fid
            LEFT JOIN {$tablepre}forumfields ff ON ff.fid=f.fid $accessadd2 $modadd2
            WHERE t.tid='$tid'".($auditstatuson ? ' : " AND t.displayorder>='0'")." LIMIT 1");
        $tid = $forum['tid'];
    }
    //這個也不明白
    if($forum) {
        $fid = $forum['fid'];
        $forum['ismoderator'] = !empty($forum['ismoderator']) || $adminid == 1 || $adminid == 2 ? 1 : 0;
        foreach(array('postcredits', 'replycredits', 'threadtypes', 'threadsorts', 'digestcredits', 'postattachcredits', 'getattachcredits', 'modrecommend') as $key) {
            $forum[$key] = !empty($forum[$key]) ? unserialize($forum[$key]) : array();
        }
    } else {
        $fid = 0;
    }
}
 
//敢不敢不要寫那麼長!
//不知道什麼意思。
$styleid = intval(!empty($_GET['styleid']) ? $_GET['styleid'] :
        (!empty($_POST['styleid']) ? $_POST['styleid'] :
        (!empty($_DSESSION['styleid']) ? $_DSESSION['styleid'] :
        $_DCACHE['settings']['styleid'])));
 
//我的神……又賦了個值
//既然上一句都那麼長了,這句幹嘛不和上句連一起?
$styleid = intval(isset($styles[$styleid]) ? $styleid : $_DCACHE['settings']['styleid']);
 
//繼續緩存頁面。界面主題?
if(@!include DISCUZ_ROOT.'./forumdata/cache/style_'.intval(!empty($forum['styleid']) ? $forum['styleid'] : $styleid).'.php') {
    $cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/style_'.($styleid = $_DCACHE['settings']['styleid']).'.php') ? ' : ' style_'.$styleid;
}
 
//沒有緩存,則更新緩存。
if($cachelost) {
    require_once DISCUZ_ROOT.'./include/cache.func.php';
    updatecache();
    exit('Cache List: '.$cachelost.'<br />Caches successfully created, please refresh.');
}
 
//非手機頁面
if(CURSCRIPT != 'wap') {
    //不曉得那裏的變量。字面理解應該是判斷是否設置緩存
    if($nocacheheaders) {
        @dheader("Expires: 0");
        @dheader("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE);
        @dheader("Pragma: no-cache");
    }
    // $headercharset在config.inc.php上。
    //強制論壇頁面使用默認字符集,可避免部分服務器空間頁面出現亂碼,一般無需開啓。 0=關閉 1= 開啓
    if($headercharset) {
        @dheader('Content-Type: text/html; charset='.$charset);
    }
    if(empty($_DCOOKIE['sid']) || $sid != $_DCOOKIE['sid']) {
        dsetcookie('sid', $sid, 604800, 1, true);
    }
}
//作者對三元運算符情有獨鍾。
$_DCOOKIE['loginuser'] = !empty($_DCOOKIE['loginuser']) ? substr(htmlspecialchars($_DCOOKIE['loginuser']), 0, 15) : '';
 
//該參數也是在cache_setting.php上。
//定時清空數據。
if($cronnextrun && $cronnextrun  $include) {
        if(!$include['adminid'] || ($include['adminid'] && $adminid > 0 && $include['adminid'] >= $adminid)) {
            if(@in_array($pluginid, $pluginlangs)) {
                @include_once DISCUZ_ROOT.'./forumdata/cache/cache_scriptlang.php';
            }
            @include_once DISCUZ_ROOT.'./plugins/'.$include['script'].'.inc.php';
        }
    }
}
 
//字面理解應該是是否有權限進入。
//不知道這個變量那裏來的。
if(isset($allowvisit) && $allowvisit == 0 && !(CURSCRIPT == 'member' && ($action == 'groupexpiry' || $action == 'activate'))) {
    showmessage('user_banned', NULL, 'HALTED');
} elseif(!(in_array(CURSCRIPT, array('logging', 'wap', 'seccode', 'ajax')) || $adminid == 1)) {
    //這個變量也是未知/
    if($bbclosed) {
        clearcookies();
        $closedreason = $db->result_first("SELECT value FROM {$tablepre}settings WHERE variable='closedreason'");
        showmessage($closedreason ? $closedreason : 'board_closed', NULL, 'NOPERM');
    }
    //函數在global.func.php中。不明真相
    periodscheck('visitbanperiods');
}
 
//這句也看不懂。
if((!empty($fromuid) || !empty($fromuser)) && ($creditspolicy['promotion_visit'] || $creditspolicy['promotion_register'])) {
    require_once DISCUZ_ROOT.'/include/promotion.inc.php';
}
//uchome數組也找不到出處。
if($uchome['addfeed']) {
    $customaddfeed = $customaddfeed == '-1' ? 0 : ($customaddfeed == 0 ? $uchome['addfeed'] : intval($customaddfeed));
} else {
    $customaddfeed = 0;
}
 
//又是三句神句。
$rssauth = $rssstatus && $discuz_uid ? rawurlencode(authcode("$discuz_uidt".($fid ? $fid : ')."t".substr(md5($discuz_pw.$discuz_secques), 0, 8), 'ENCODE', md5($_DCACHE['settings']['authkey']))) : '0';
$transferstatus = $transferstatus && $allowtransfer;
$feedpostnum = $feedpostnum && $uchomeurl ? intval($feedpostnum) : 0;
 
$pluginhooks = array();//這個是做啥的?
 
//腳本關聯?應該是和加載插件有關。
if(isset($hookscript[CURSCRIPT]['module'])) {
    hookscript(CURSCRIPT);
}
 
//這段估計也和一些二次開發相關。該頁面和函數暫時沒看懂。
if($discuz_uid && $newbietaskupdate && $lastactivity
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章