./include/common.inc.php 是 Discuz! 的通用初始化模块程序,其几乎被所有的外部代码所引用,在您开始插件设计之前,可以先对该模块的大致功能做一定的了解。common.inc.php 主要完成了以下任务:
- 对不同 PHP 及操作系统环境做了判断和兼容性处理,使得 Discuz! 可以运行于各种不同配置的服务器环境下。
- 初始化常量 IN_DISCUZ 为 TRUE,用于 include 或 require 后续程序的判断,避免其他程序被非法引用。
- 读取论坛所在绝对路径,存放于常量 DISCUZ_ROOT 中。
- 加载所需的基本函数库 include/global.func.php。
- 通过 config.inc.php 中提供的数据库账号信息,建立数据库连接。Discuz!支持数据表的前缀,如需获得表的全名,可使用”{$tablepre}tablename” 或 $tablepre.’tablename’的方式。
- 判断用户是否登录,如登录标记 $discuz_uid 为非 0,同时将 $discuz_user(加了 slash 的用户名,可用于不加修改的插入数据库)、 $discuz_userss(原始的用户名,可用于页面显示)、$discuz_pw(用户密码的MD5串)、$discuz_secques(登录提示问题的加密串)等相应用户信息赋值。
- 判断用户管理权限,将管理权限标记 $adminid 为 -1~3 中间的值。-1 代表为特殊用户组用户。0 代表普通用户;1 代表论坛管理员;2 代表超级版主;3 代表论坛版主。将用户权限按照其所在的主用户组 ID 标记为 $groupid,相关权限从该 $groupid 所对应的系统缓存中读出(./forumdata/cache/usergroup_$groupid.php)。将用户扩展权限按照其扩展用户组 ID 标记为 $extgroupids,中间以 \t(tab)分隔,格式为“$groupid1\t$groupid2...”,扩展用户组用于确定用户的扩展浏览权限,例如能否访问某些有特殊权限设定的论坛等。
- 读入系统设置中的各种变量,并根据 Cache 模块的设定,根据当前被调用的程序文件名(如 index.php,forumdisplay.php 等等)读入相应的缓存代码。缓存代码被存放于 ./forumdata/cache/ 中。除了对应当前程序的缓存,可能还会加载一些通用的缓存数据,例如整个论坛的设置(./forumdata/cache /cache_settings.php)、界面风格(./forumdata/cache/style_x.php)、当前用户的用户组(. /forumdata/cache/usergroup_x.php)、管理组权限(./forumdata/cache /adminusergroup_x.php)等。
- 缓存数据的格式,大多是存放在 $_DCACHE['cachename'] 数组中,有些常用的参数,如系统设置中的参数、风格界面等,通常还被进行了展开操作(extract)或使用常量进行赋值。
- 用户如果处在登录状态,会自动读出 members 表相关用户的参数值,用户的个性设置参数:如时差、时间格式、界面风格等等,会根据实际情况覆盖系统默认值,因此在后续程序通常不用再做判断。
- 如果程序提交的 URL 中包含 tid=x 或 fid=x,common.inc.php 模块会自动读出其所对应的论坛记录及包括 access masks、版主设定等相应权限,记录在 $forum 变量中。后续程序只要通过URL将tid或fid传递过来,便可通过 $forum 数组的存在性或相关参数来对论坛权限进行判断,不需要再读 forums 表的资料。

看完了要说点啥么?