x2的入口文件index.php文件分析
index.php入口文件是一个跳板文件,最终会跳转到相应的文件或URL。
if(!empty($_SERVER['QUERY_STRING']) && is_numeric($_SERVER['QUERY_STRING'])) {
//$_SERVER['QUERY_STRING']不为空,且为数字
//处理如http://www.a.com/?1的个人空间域名
$_ENV['curapp'] = 'home';
$_GET = array('mod'=>'space', 'uid'=>$_SERVER['QUERY_STRING']);
} else {
$url = '';
$domain = $_ENV = array();
$jump = false;
@include_once './data/cache/cache_domain.php';
$_ENV['domain'] = $domain;
//$domain为cache_domain.php缓存文件里的域名数组
if(empty($_ENV['domain'])) {
//如果$_ENV['domain']为空
$_ENV['curapp'] = 'forum';
} else {
$_ENV['defaultapp'] = array('portal.php' => 'portal', 'forum.php' => 'forum', 'group.php' => 'group', 'home.php' => 'home');
$_ENV['hostarr'] = explode('.', $_SERVER['HTTP_HOST']);
//$_ENV['hostarr']为域名根据.分割后的数组
$_ENV['domainroot'] = substr($_SERVER['HTTP_HOST'], strpos($_SERVER['HTTP_HOST'], '.')+1);
//$_ENV['domainroot']为当前地址的根域名
if(!empty($_ENV['domain']['app']) && is_array($_ENV['domain']['app']) && in_array($_SERVER['HTTP_HOST'], $_ENV['domain']['app'])) {
//如果$_ENV['domain']['app']不为空,且为数组,同时当前地址的域名在$_ENV['domain']['app']数组中
//$_ENV['domain']['app']为后台设置的应用域名
$_ENV['curapp'] = array_search($_SERVER['HTTP_HOST'], $_ENV['domain']['app']);
//array_search返回在$_ENV['domain']['app']数组中根据键值等于$_SERVER['HTTP_HOST']对应的键值,如不存在则返回false
if($_ENV['curapp'] == 'mobile') {
//手机版处理
$_ENV['curapp'] = 'forum';
if(@$_GET['mobile'] != 'no') {
@$_GET['mobile'] = 'yes';
}
}
if($_ENV['curapp'] == 'default' || !isset($_ENV['defaultapp'][$_ENV['curapp'].'.php'])) {
$_ENV['curapp'] = '';
}
} elseif(!empty($_ENV['domain']['root']) && is_array($_ENV['domain']['root']) && in_array($_ENV['domainroot'], $_ENV['domain']['root'])) {
//如果$_ENV['domain']['root']不为空,且为数组,同时当前地址的根域名$_ENV['domainroot']在$_ENV['domain']['root']数组中
//$_ENV['domain']['root']为后台设置的根域名
$_G['setting']['holddomain'] = $_ENV['domain']['holddomain'] ? $_ENV['domain']['holddomain'] : array('www');
//holddomain为后台设置的保留二级域名
$list = $_ENV['domain']['list'];
//$list为论坛分区、板块、专题、频道绑定的域名的集合数组
if(isset($list[$_SERVER['HTTP_HOST']])) {
//如果当前域名在数组$list中有设置
$domain = $list[$_SERVER['HTTP_HOST']];
//$list[$_SERVER['HTTP_HOST']]为当前域名对应的设置
$id = intval($domain['id']);
switch($domain['idtype']) {
case 'subarea':
//论坛分区
$_ENV['curapp'] = 'forum';
$_GET['gid'] = $id;
break;
case 'forum':
//论坛板块
$_ENV['curapp'] = 'forum';
$_GET['mod'] = 'forumdisplay';
$_GET['fid'] = $id;
break;
case 'topic':
//专题
$_ENV['curapp'] = 'portal';
$_GET['mod'] = 'topic';
$_GET['topicid'] = $id;
break;
case 'channel':
//频道
$_ENV['curapp'] = 'portal';
$_GET['mod'] = 'list';
$_GET['catid'] = $id;
break;
}
} elseif(count($_ENV['hostarr']) > 2 && $_ENV['hostarr'][0] != 'www' && !checkholddomain($_ENV['hostarr'][0])) {
//如果$_ENV['hostarr']数组的元素个数大于2,且$_ENV['hostarr']的第一个元素不是www(即当前地址的域名前缀不是www),同时$_ENV['hostarr']的第一个元素不是保留二级域名中
//checkholddomain函数为判断是否为保留二级域名
$_ENV['prefixdomain'] = addslashes($_ENV['hostarr'][0]);//域名前缀
$_ENV['domainroot'] = addslashes($_ENV['domainroot']);//当前地址的根域名
require_once './source/class/class_core.php';
$discuz = & discuz_core::instance();
$discuz->init_setting = true;
$discuz->init_user = false;
$discuz->init_session = false;
$discuz->init_cron = false;
$discuz->init_misc = false;
$discuz->init_memory = false;
$discuz->init();
$jump = true;
$domain = DB::fetch_first("SELECT * FROM ".DB::table('common_domain')." WHERE domain='$_ENV[prefixdomain]' AND domainroot='$_ENV[domainroot]' LIMIT 1");
//根据域名前缀和根域名在common_domain表中查询记录
$apphost = $_ENV['domain']['app'][$domain['idtype']] ? $_ENV['domain']['app'][$domain['idtype']] : $_ENV['domain']['app']['default'];
//如果存在当前类型的应用域名,则$apphost为当前类型的应用域名,否则为默认域名
$apphost = $apphost ? 'http://'.$apphost.'/' : '';
switch($domain['idtype']) {
case 'home':
//个人空间的二级域名
if($_G['setting']['rewritestatus'] && in_array('home_space', $_G['setting']['rewritestatus'])) {
$url = rewriteoutput('home_space', 1, $apphost, $domain['id']);
} else {
$url = $apphost.'home.php?mod=space&uid='.$domain['id'];
}
//$url为这个用户的空间地址
break;
case 'group':
//群组的二级域名
if($_G['setting']['rewritestatus'] && in_array('group_group', $_G['setting']['rewritestatus'])) {
$url = rewriteoutput('group_group', 1, $apphost, $domain['id']);
} else {
$url = $apphost.'forum.php?mod=group&fid='.$domain['id'].'&page=1';
}
//$url为这个群组的地址
break;
}
}
} else {
$jump = true;
}
if(empty($url) && empty($_ENV['curapp'])) {
if(!empty($_ENV['domain']['defaultindex']) && !$jump) {
//如果$_ENV['domain']['defaultindex']不为空,且不存在$jump
//$_ENV['domain']['defaultindex']为后台导航里设置的默认首页
if($_ENV['defaultapp'][$_ENV['domain']['defaultindex']]) {
$_ENV['curapp'] = $_ENV['defaultapp'][$_ENV['domain']['defaultindex']];
} else {
$url = $_ENV['domain']['defaultindex'];
}
} else {
if($jump) {
$url = empty($_ENV['domain']['app']['default']) ? (!empty($_ENV['domain']['defaultindex']) ? $_ENV['domain']['defaultindex'] : 'forum.php') : 'http://'.$_ENV['domain']['app']['default'];
//如果$_ENV['domain']['app']['default']为空,如果$_ENV['domain']['defaultindex']不为空,则$url=$_ENV['domain']['defaultindex'],否则等于forum.php
//如果$_ENV['domain']['app']['default']不为空,$url='http://'.$_ENV['domain']['app']['default']
//$_ENV['domain']['app']['default']为后台应用域名下的默认域名
//$_ENV['domain']['defaultindex']为后台导航下设置的默认首页
} else {
$_ENV['curapp'] = 'forum';
}
}
}
}
}
if(!empty($url)) {
$delimiter = strrpos($url, '?') ? '&' : '?';
//如果$url里已经存在?,则连接符$delimiter='&',否则$delimiter='?'
if($_GET['fromuid']) {
$url .= $delimiter.'fromuid='.$_GET['fromuid'];
} elseif($_GET['fromuser']) {
$url .= $delimiter.'fromuser='.$_GET['fromuser'];
}
header("HTTP/1.1 301 Moved Permanently");
header("location: $url");
//301跳转到$url地址
} else {
require './'.$_ENV['curapp'].'.php';
//加载$_ENV['curapp'].php文件
}