UCHOME 代码浅析(2) 系统架构解析

    技术2025-11-07  5

    UCHOME 代码浅析(2) 系统架构解析(6-5 13:00已更新)

    首先废话两句: UCHOME 是一个不是很复杂的SNS程序,但具有SNS的基本功能,加上MANYOU平台上的许多应用,可以说是国内最NB的开源SNS程序。并且,在整个PHP开源领域,UCHO​ME是被二次开发最多的程序。为什么呢? 1.符合市场需求。随着前两年FACEBOOK的风靡全球,SNS越来越深入人们的生活,人们乐于在SNS与朋友联系,还能通过SNS找到更多的人。正所 谓有需求就有市场,校​内(人人)赶上了第一波热潮,获得巨大成功;开心网(kaixin001.com)则是后生可畏,也占领了不少份额。更多的站长也 想从中分得一点利益。 2.结构简单,功能强大,二次开发容易,而且基于discuz的站长用户群,有庞大的支持队伍,uchome很容易就推广开来了。 下面就讲解UCHOME的系统架构。 <!--more--> 1.文件、目录方面 /admin 后台管理(包含了程序、模板) /api 接口目录 /attachment 附件目录,用于存放用户上传的图片等。 /data 系统缓存目录(包含系统设置缓存、模块缓存、模板缓存、日志、系统安装锁、用户组缓存等等) /image 系统图片(表情、等级标识等等公用图片) /install 系统安装目录 /language 系统语言包目录 * /source 程序目录(重要,所有UCHOME的操作都是由这里面的PHP文件做的。这个会在下面程序架构讲到) /template 很常见的命名,模板目录,该目录下的每一个文件夹是一个模板 /theme 用户个人主页模板目录 /uc_client UC客户端。和UC通信它是核心。 admincp.php 管理页面入口 app.php 漫游应用 common.php 核心,上一篇文章有讲解 config.php 配置文件 cp.php 用户操作入口(添加日志、上传图片等等,所有用户的执行的某个动作都在这个文件) crossdomain.xml 用户FLASH的配置文件。貌似是为跨域。 do.php 登录、退出、注册页面 editor.php 编辑器(有多种类型) help.php 帮助信息文件 index.php 首页 invite.php 邀请页面(用于用于邀请好友注册等) js.php JS模块调用文件(没用过 ) link.php 用于外部连接。当从UCHOME点击外部链接时,顶部会出现我们空间的工具条,可以方便的返回我们的页面。 magic.php 道具文件 network.php 随便看看 rss.php RSS订阅输出页面 space.php 用户查看入口(查看日志、图片、文章等入口)。 userapp.php 暂时不清楚,但是漫游的东西。 ver.php 就是一个版本号。用于检查更新。当管理员到后台时,系统会把VER.PHP里的版本跟官方最新的比较,有最新版本就提示。 xmlrpc.php 具体不知道做什么的。 以上就是UCHOME的文件/目录架构。 ----------------先睡觉了,明天继续。 2.程序架构。 让我们一步一步来解析UCHOME的程序架构。 首先,UCHOME具有基本的MVC模式(什么是MVC?google!),但不是很规范的。1.一般MVC是单入口,而UCHOME把用户操作 (cp.php)和用户浏览(space.php)和登录等(do.php)分开了,所以成为了多入口。2.UCHOME的contrllor和 model区分得不是很明显,是在同一个文件里,直接写的代码,而不像其他的MVC系统是单独分开的。 下面以space.php为例子,来讲讲UCHOME的具体流程。 在uchome中,所有浏览的页面都是由space.php产生的。它相当于一个指路者,根据浏览者请求的地址,把浏览者带到对应的房间去。比 如,uchome里日志的页面是space.php?do=blog。那么space.php在做完验证后(比如登录啊什么的),会包含一个 source/space_blog.php,这个文件就是日志的模块文件了,日志功能的所有浏览都在这个文件里。 而用户操作页面cp.php跟space.php,差不多,它的请求方法是cp.php?ac=模块名。 现在做个试验,在/source/目录下,新建一个php文件,命名为space_solo.php。内容为echo ' '; 然后在space.php里第31行左右,给$dos数组增加一个值,值为solo。 然后访问space.php?do=solo。看到 了吧?这就是简单的增加了一个模块。由于没有包含模板文件,所以只看到一个简单的语句。在下面我会讲解怎么添加一个完整的模块。 以上就是UCHOME程序的简单流程,下面就以代码来具体讲解。 ------------------------华丽的分隔线--------------------------------- include_once('./common.php'); include_once(S_ROOT.'./data/data_magic.php'); 这两句不用解释了,就是包含需要的文件。common.php是核心,uchome所以文件都需要包含它(这个文件在前几篇文章有详细分析)。data_magic.php是道具需要的。 接下来是一个函数: checkclose(); 该函数没什么讲的。就是检查站点是否关闭和IP是否被禁止访问。 接下来是一段处理url带rewrite参赛的代码(什么是rewrite?google),不解释。 然后到了30行。$dos = array('feed', 'doing', 'mood',---); 这是定义了允许访问的模块。在下面38行有这样的判断语句: $do = (!empty($_GET['do']) && in_array($_GET['do'], $dos))?$_GET['do']:'index'; 意思就是请求的模块不在$dos里,就默认给它index模块。比如,blog是日志,如果这个数组里没有blog,那么将访问不到blog模块,而是跑到index去了。。
    最新回复(0)