文档介绍:设作者:边城浪子 discuz! 源码分析源代码分析[1] 第一个文件当然是分析./ 这个文件,这个是 Discuz 的核心中的核心,基本上每次操作都 include 到了这个文件,下面就分七段来分析这个文件: Section One: 以下内容为程序代码: // 定义 PHP 一些环境 error_reporting(0); set_magic_quotes_runtime(0); // 设置 Discuz 开始的时间$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)); // 获得绝对目录// 通用性 if(PHP_VERSION < '') { $_GET = &$HTTP_GET_VARS; $_POST = &$HTTP_POST_VARS; $_COOKIE = &$HTTP_COOKIE_VARS; 设作者:边城浪子$_SERVER = &$HTTP_SERVER_VARS; $_ENV = &$HTTP_ENV_VARS; $_FILES = &$HTTP_POST_FILES; } 这一段基本上就是设置一下错误报告,把 magic_quotes 这个 sick 家伙给关了,然后定一个开始的时间,这样我们在论坛底部看到的 Process Time 就是通过这个开始的时间和一个结束的时间的差来计算的,然后定义一个 IN_DISCUZ 为真,这个 IN_DISCUZ 常量的作用就是在其他 inc 这样的包含文件中防止被非法引用, 一旦没有这个常量的话就出现 Access Denied 这样的字样然后退出。然后获得 Discuz 运行的绝对目录。接下来是判断 PHP 的版本是 以下还是以上, 因为 PHP 以 为一个分界线,在 以下以$HTTP_GET_VARS[ ‘ xx’] 这样的方式来得到 get 过来的值, 而以后用$_GET 来得到 get 过来的值,这样做的目的是为了无论是什么样的 PHP 版本,都能用$_GET 这样的方式得到,有通用性~! 以下内容为程序代码: require_once DISCUZ_ROOT.'./include/'; 把 include/ 引用进来,这个文件是 Discuz 的核心函数文件,包含了 Discuz 用到的很多通用的函数,可以说它就是一个大的通用函数库。以下内容为程序代码: define('ISROBOT', getrobot()); if(defined('NOROBOT') && ISROBOT) { exit(header("HTTP/ 403 Forbidden")); } 这里是定义一个 ISROBOT 常量,看看浏览者是什么东东,比方说如果浏览者是一个 robot 那么就直接来一个 403 Forbidden 了……以下内容为程序代码: define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); isset($_REQUEST['GLOBALS']) && exit('Access Error'); foreach(array('_COOKIE', '_POST', '_GET') as $_request) { foreach($$_request as $_key => $_value) { $_key{0} != '_' && $$_key = daddslashes($_value); }} 设作者:边城浪子(!MAGIC_QUOTES_GPC) && $_FILES = daddslashes($_FILES); 此处是过滤提交的变量用的,提高安全性的用法。。以下内容为程序代码: $charset = $dbcharset = $forumfounders = $metakeywords = $extrahead = ''; $plugins = $hooks = $admincp = array(); require_once DISCUZ_ROOT.'./'; $_DCOOKIE = $_DSESSION = $_DCACHE = $_DPLUGIN = $advlist = array(); $prelength