<!--p<br-->
<p>define('UC_SERVER_VERSION', '1.5.0'); //定义UC的版本信息<br />
define('UC_SERVER_RELEASE', '20081224');//定义UC的发行时间<以后升级要用到><br />
error_reporting(0);//屏蔽所有错误<br />
set_magic_quotes_runtime(0);//该系统函数将会为所有的溢出字符,当遇到反斜杆、单引号,将会自动加上一个反斜杆,保护系统和数据库的安全。1为打开 0为关闭<br />
//延伸阅读:magic_quotes_runtime,当它打开时,php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反斜线<br />
<br />
//计算程序执行时间用 获取程序开始执行时的时间戳<br />
$mtime = explode(' ', microtime());//microtime() 取得目前时间的 UNIX 时间戳记的百万分之一秒值<br />
$starttime = $mtime[1] + $mtime[0];<br />
//使用常量来表示路径,避免出现include()函数所引起的漏洞。<br />
define('IN_UC', TRUE);//用来判断程序文件是否是由本文件调用 不是的话 则报错<br />
define('UC_ROOT', substr(__FILE__, 0, -9));//__FILE__ 取该文件的完整路径 //这里是取得UC的根目录<br />
define('UC_API', strtolower((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));//API地址,以HTTP形式表示<br />
define('UC_DATADIR', UC_ROOT.'data/');//定义UC的 DATA目录<br />
define('UC_DATAURL', UC_API.'/data');//定义API DATA目录<br />
define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());//get_magic_quotes_gpc()取得 PHP 环境变数 magic_quotes_gpc 的值<br />
//当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), (反斜线) and 空字符会自动转为含有反斜线的溢出字符。 <br />
//清除变量,清除所有PHP4 以前的长类型的 全局变量 <br />
unset($GLOBALS, $_ENV, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS, $HTTP_ENV_VARS);<br />
<br />
//对全局变量数组进行 反斜线转义<br />
$_GET = daddslashes($_GET, 1, TRUE);<br />
$_POST = daddslashes($_POST, 1, TRUE);<br />
$_COOKIE = daddslashes($_COOKIE, 1, TRUE);<br />
$_SERVER = daddslashes($_SERVER);<br />
$_FILES = daddslashes($_FILES);<br />
$_REQUEST = daddslashes($_REQUEST, 1, TRUE);<br />
<br />
//加载配置文件 模型文件<br />
require UC_DATADIR.'config.inc.php';//数据库及常用常量的定义<br />
require UC_ROOT.'model/base.php'; //基本数据模型<br />
require UC_ROOT.'model/admin.php'; //管理数据模型<br />
//注意: m为控制器 a为方法<br />
$m = empty($_REQUEST['m']) ? 'frame' : $_REQUEST['m'];//没有任何传值时 默认控制器为frame<br />
$a = empty($_REQUEST['a']) ? 'index' : $_REQUEST['a'];//没有任何传值时 默认方法为index<br />
define('RELEASE_ROOT', '');//将版本目录设为空 以后要用到<br />
//作用一:根据参数的不同值加载不同的控制器,作用二:避免出现调用其它文件的漏洞<br />
if(in_array($m, array('test','admin', 'app', 'badword', 'pm', 'cache', 'db', 'domain', 'frame', 'log', 'note', 'feed', 'mail', 'setting', 'user', 'credit', 'seccode', 'tool', 'plugin'))) {//如果变量$m中的值 能在array数组中找到 则执行<br />
include UC_ROOT."control/admin/$m.php"; //加载指定控制器文件<br />
$control = new control();<br />
$method = 'on'.$a; //设置所要执行的方法的方法名<br />
if(method_exists($control, $method) && $a{0} != '_') {//$a{0}为字符串$a的第一个字符<br />
$control->$method();//如果在control对象中存在 $method方法 并且方法名不是以_开头的 则执行该方法<br />
//这里的作用是 不能调用下划线_开头的方法,从而起到封装的作用,如果一个方法不想要被用户访问则在前面加下划线<br />
} elseif(method_exists($control, '_call')) {//如果在control对象中 存在_call方法 则调用_call方法<br />
$control->_call('on'.$a, '');<br />
//如果在类中找不到所需执行的方法 而存在_call方法,则调用该类中_call方法<br />
//作用:可以加载其他外部插件<br />
} else {<br />
exit('Action not found!');<br />
}<br />
} else {//否则 显示错误提示 找不到指定模块<br />
exit('Module not found!');<br />
}<br />
//End 根据参数不同调用不同的控制器及方法<br />
//计算程序执行时间用 获取程序执行完毕时的时间戳<br />
$mtime = explode(' ', microtime());<br />
$endtime = $mtime[1] + $mtime[0];<br />
//echo '<script>document.getElementById('debug_time').innerHTML = ''.number_format($endtime - $starttime, 5).''</script>'."n";<br />
<br />
function daddslashes($string, $force = 0, $strip = FALSE) {//该函数作用为 智能加饭斜线 <br />
if(!MAGIC_QUOTES_GPC || $force) { //如果PHP.INI配置里 没有将 转义打开 或者 $force为1 则执行下列语句<br />
if(is_array($string)) {//如果是数组的话 则递归调要daddslashes函数 为每个索引值 转义<br />
foreach($string as $key => $val) {<br />
$string[$key] = daddslashes($val, $force);<br />
}<br />
} else {//不是数组的话<br />
$string = addslashes($strip ? stripslashes($string) : $string);<br />
//StripSlashes函数可去掉字符串中的反斜线字符。若是连续二个反斜线,则去掉一个,留下一个。若只有一个反斜线,就直接去掉。<br />
//addslashes()返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线()与 NUL(NULL 字符)。 <br />
<br />
}<br />
}//转义 判断结束<br />
return $string;<br />
}<br />
function getgpc($k, $t='R') {<br />
switch($t) {<br />
case 'P': $var = &$_POST; break;<br />
case 'G': $var = &$_GET; break;<br />
case 'C': $var = &$_COOKIE; break;<br />
case 'R': $var = &$_REQUEST; break;<br />
} <br />
return isset($var[$k]) ? (is_array($var[$k]) ? $var[$k] : trim($var[$k])) : NULL; //trim()函数的作用是:去除字符串首末尾的空白<br />
}<br />
//EG: getgpc('input', 'R')<br />
?></p>