DISCUZ架构:common.inc.php文件分析5

$forum = array();
$auditstatuson = !empty($mod) && $mod == 'edit' && in_array($adminid, array(1, 2, 3)) && $allowmodpost ? true : false;

$tid = isset($tid) && is_numeric($tid) ? $tid : 0;
$fid = isset($fid) && is_numeric($fid) ? $fid : 0;
$typeid = isset($typeid) ? intval($typeid) : 0;

if(!empty($tid) || !empty($fid)) {
if(empty($tid)) {
$query = $db->query("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'");
$forum = $db->fetch_array($query);
} else {
$query = $db->query("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");
$forum = $db->fetch_array($query);
$tid = $forum['tid'];
}

if($forum) {
$fid = $forum['fid'];
$forum['ismoderator'] = !empty($forum['ismoderator']) || $adminid == 1 || $adminid == 2 ? 1 : 0;
foreach(array('postcredits', 'replycredits', 'threadtypes', 'digestcredits', 'postattachcredits', 'getattachcredits', 'supe_pushsetting') as $key) {
$forum[$key] = !empty($forum[$key]) ? unserialize($forum[$key]) : array();
}
} else {
$fid = 0;
}
}

得到论坛信息用的,如果你是看forumdisplay页面和看viewthread在数据库中执行的东东不是一样的。这样能得到一点性能上的提升。然后往forum这个数组里面写一些东西进去,比方说:发帖子得到的分数,回复得到的分数,帖子分类的类型等…

以下为引用的内容:

$styleid = intval(!empty($_GET['styleid']) ? $_GET['styleid'] :
(!empty($_POST['styleid']) ? $_POST['styleid'] :
(!empty($_DSESSION['styleid']) ? $_DSESSION['styleid'] :
$_DCACHE['settings']['styleid'])));

$styleid = intval(isset($stylejump[$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;
}

这里是得到论坛风格的地方,可以看到第一行的赋值Disuz用尽一切可能得到一个合理的风格styleid,呵呵,然后再来一行,看看是不是你在论坛底部切换了一下风格,有的话就override一下,把这个风格作为你的当前风格。
如果没有缓存的话,再往cachelost这个里面写点东西。

以下为引用的内容:

if($cachelost) {
require_once DISCUZ_ROOT.'./include/cache.func.php';
updatecache();
dexit('Cache List: '.$cachelost.'<br>Caches successfully created, please refresh.');
}

如果cachelost中有东西的话,那么就调用include/cache.func.php,并用这个文件里面定义的updatecache();来更新缓存,并强制访问者刷新论坛,使缓存立即生效。

以下为引用的内容:

if(!defined('CURSCRIPT') || 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");
}
if($headercharset) {
@dheader('Content-Type: text/html; charset='.$charset);
}
if(empty($_DCOOKIE['sid']) || $sid != $_DCOOKIE['sid']) {
dsetcookie('sid', $sid, 604800);
}
}

这里是设置网页的header用的,通过判断是不是wap或者是不是有CURSCRIPT这个常量(注:CURSCRIPT代表了当前执行的 script,比方说forumdisplay.php中就会有define(‘CURSCRIPT’, ‘forumdisplay’);这样的定义),下一行是说sid过期了,再生成一个,dsetcookie()这个函数是./include /global.func.php这个文件中定义的。

以下为引用的内容:

if($cronnextrun && $cronnextrun <= $timestamp) {
require_once DISCUZ_ROOT.'./include/cron.func.php';
runcron();
}

呵呵,后台的计划任务来了。。。。当然,这种情况是要至少有一个会员访问论坛,如果说没有人访问,你再设置也没有用,PHP的一大痛处,不能自己执行…

以下为引用的内容:

if(isset($plugins['include']) && is_array($plugins['include'])) {
foreach($plugins['include'] as $include) {
if(!$include['adminid'] || ($include['adminid'] && $include['adminid'] >= $adminid)) {
@include_once DISCUZ_ROOT.'./plugins/'.$include['script'].'.inc.php';
}
}
}

这里的加载一些插件的文件。

以下为引用的内容:

if((!empty($_DCACHE['advs']) || $globaladvs || $redirectadvs) && !defined('IN_ADMINCP')) {
require_once DISCUZ_ROOT.'./include/advertisements.inc.php';
}


这里是看看是不是在论坛的cache中有广告的存在(注:$_DCACHE这个数组中存放的是论坛的一些设置之类的缓存),有广告的话就引用广告的文件。

以下为引用的内容:

if(isset($allowvisit) && $allowvisit == 0 && !(defined('CURSCRIPT') && CURSCRIPT == 'member' && $action == 'groupexpiry')) {
showmessage('user_banned', NULL, 'HALTED');
} elseif(!((defined('CURSCRIPT') && in_array(CURSCRIPT, array('logging', 'wap', 'seccode'))) || $adminid == 1)) {
if($bbclosed) {
clearcookies();
$closedreason = $db->result($db->query("SELECT value FROM {$tablepre}settings WHERE variable='closedreason'"), 0);
showmessage($closedreason ? $closedreason : 'board_closed', NULL, 'NOPERM');
}
periodscheck('visitbanperiods');
}

以下为引用的内容:

if((!empty($fromuid) || !empty($fromuser)) && ($creditspolicy['promotion_visit'] || $creditspolicy['promotion_register'])) {
require_once DISCUZ_ROOT.'/include/promotion.inc.php';
}

这个当然是推荐注册用的。应该没看错,呵呵。

以下为引用的内容:

$rssauth = $rssstatus && $discuz_uid ? rawurlencode(authcode("$discuz_uid\t".($fid ? $fid : '')."\t".substr(md5($discuz_pw.$discuz_secques), 0, 8), 'ENCODE', md5($_DCACHE['settings']['authkey']))) : '0';

Rss检查

好了,到此./include/common.inc.php这个文件就分析完了。

论坛的安全访问设置。一个是不允许访问,另一个是访问到了member.php?action=groupexpiry的话,就说用户被 ban了。然后就是检查是不是论坛关闭了,可以看也论坛关闭对管理员没有影响。接下来检查是不是禁的时间到了…periodscheck()函数就是这个 用的。如果没到是会被showmessage说没有访问权限的,具体看include/global.func.php这个文件中的定义。当然,下一期我 就会分析这个文件。

posted on 2009-11-25 16:39  14的路  阅读(737)  评论(0编辑  收藏  举报

导航

友情链接:源码下载