《C语言实现PHP框架.doc》由会员分享,可在线阅读,更多相关《C语言实现PHP框架.doc(34页珍藏版)》请在三一文库上搜索。
1、C语言实现PHP框架 摘 要 本课题通过研究国内外流行的 PHP 框架及对其工作原理的分析,找出了 PHP 站点性能的瓶颈所在。针对找到的问题,本课题以 C 为开发语言,使用 PHP 底层的 Zend API,设计并实现了 MVC 程序框架,有效提高了 PHP 站点的 性能。并通过开发一套基于此框架的个人 Blog 系统,验证其可行性和有效性。 设计中第一部分是绪论,讨论了本课题的意义,以及 PHP 技术的发展前景; 第二部分是系统分析,探讨了 PHP 的工作原理与及存在的性能问题,同时介绍 了 MVC 结构的概念与优缺点;第三部分是总体设计,明确了框架的功能结构 和实现必要性,设计了 Blo
2、g 的功能与数据库结构;第四部分是详细设计,主 要讲述了框架的运行流程与几个主要模块的实现方式,以及 Blog 各层的实现 方式;最后是测试,验证了 Blog 的功能和框架的性能。 关键词:框架 MVC Zend 接口 PHP 性能 The PHP Framework implemented by C Language ABSTRACT This project is aimed to find out the bottleneck of the performance of the PHP site by analysing the popular PHP framework and its
3、 working principle. This project is based on C language and the Zend API of PHP, which effectively improved the performance of PHP site. And then verify the feasibility and effectiveness of this project by developing a Personal Blog System which based on this framework. The first chapter of this art
4、icle is an introduction which introduces the meaning of this issue and the development prospects of PHP technology. The second chapter is about system analysing, which explains the working principle and life cycle of PHP. In the mean time, the second chapter also introduces the conception, strengths
5、 and weakness of MVC structure. The third chapter is mainly about the overall design of this project, which clears the functional structure of this framework. Besides, the third chapter designs the function and database structure of the Blog. The fourth chapter is mainly about the detailed design, w
6、hich explains the running processes of this framework and the function of several main modules. The fourth chapter explains the realization of this Blog as well. The final part of the article is mainly about system test, which verify the function of this Blog and the performance of the framework. Ke
7、y words: Framework MVC ZendAPI PHP Performance 目 录 第一章 绪论 1 1.1 系统开发背景 .1 1.2 国内外研究现状 .1 1.3 本课题研究的内容和方法 .2 1.4 本课题实现的意义 .2 第二章 系统分析 3 2.1 PHP 程序概述3 2.1.1 PHP 简介3 2.1.2 PHP 的生命周期3 2.1.3 PHP 与服务器的关系3 2.2 PHP 性能4 2.2.1 PHP 对性能的优化4 2.2.2 PHP 性能的瓶颈4 2.2.3 解决方案 .5 2.3 MVC 概述6 2.3.1 MVC 简介6 2.3.2 MVC 的优点6
8、 2.3.3 MVC 开发的复杂度6 2.4 BLOG概述 .7 2.5 系统开发环境和运行平台 .7 第三章总体设计 .8 3.1 框架设计 .8 3.1.1 框架实现目标 .8 3.1.2 MVC 的设计9 3.1.3 MVC 结构的实现9 3.2 BLOG总体设计 11 3.2.1 Blog 功能设计11 3.2.2 Blog 前台设计11 3.2.3 Blog 后台设计12 3.2.4 数据表设计 13 第四章详细设计 16 4.1 框架流程设计 16 4.1.1 框架运行步骤 16 4.2 框架组件设计 17 4.2.1 自动加载组件 17 4.2.2 路由组件 18 4.2.3 调
9、度组件 19 4.3 使用 C 语言开发框架过程 19 4.3.1 前期准备工作 19 4.3.2 建立扩展与扩展文件夹结构 20 4.3.3 内存管理 21 4.4 BLOG详细设计 21 4.4.1 Controller 层设计21 4.4.2 Model 层设计.22 4.4.3 View 层设计22 第五章测试 23 5.1 测试准备 23 5.2 启动 23 5.3 BLOG性能测试 23 5.4 BLOG功能测试 24 5.5 总结 26 结 束 语 27 参考文献 28 致 谢 29 天津理工大学 2012 届本科毕业设计说明 1 第一章 绪论 1.1 系统开发背景 21 世纪的
10、今天,网络在人们生活中已经日益盛行,越来越多人已经离不开网络。人们 已经不再满足于了解最新信息、查找资料等一些传统的网络使用方式,而是过渡到娱乐、购 物等新兴的网民生活。网上娱乐,成了当今广大群众的时尚。客户也通过博客把自己喜欢的 东西写出来或是和别人一起分享那份快乐。因此,博客已成为个人、公司、部门和团队之间 越来越盛行的交流沟通工具。在此,为了方便网络用户的需求,我们专门构建个人博客系统。 而因为传统 PHP 框架开发的系统在性能上有所限制,在日益增长的用户量上捉襟见肘,所 以,此次设计采用 C 语言是实现 PHP 框架。 1.2 国内外研究现状 随着 Ruby on Rails 的火爆,
11、PHP 这个流行的 Web 应用脚本语言也出现了大量的新一代 开发框架。与此同时,国内 PHP 开发者也开始紧跟国外发展,推出了不同的开发框架。 在 RoR 流行之前,PHP 领域也有不少开发框架,例如 Mojavi、WACT、PHPMvc 和 Seagull 等。这些框架虽然也采用了 MVC 模式、数据库抽象层等技术。但由于当时 PHP 本 身不像现在这样流行,所以这些框架都没有得到大量应用,最终归于沉寂。 而在感受到 RoR 提供的快速开发能力后,PHP 社区像被注入了兴奋剂。各种应用技术 和开发框架层出不穷。 PHP 社区在被 RoR 震晕后,没有陷入过多的争论。而是立即行动起来,开始了
12、新一代 框架的设计。首先出现的第一批框架几乎都是 RoR 的克隆。例如 PHP on Trax(连名字都借 鉴 Ruby on Rails)和 TaniPHP、Akelos 等。这些框架最大的特点就是力求 100克隆 RoR, 不管是采用的架构、设计模式,还是使用方法。 这几个框架一开始确实吸引了开发者的注意,但随着开发者的深入了解,这些框架头上 的光环逐步褪色。晦涩难懂的架构、糟糕的性能,以及太多的限制,让这些框架难以在实际 项目中运用。 此时,许多 PHP 开发者认为可以借鉴 RoR 的设计思想,但不应照搬 RoR 的结构和实现。 为此,一些同样推崇快速开发的框架开始在 PHP 社区出现。
13、这些框架中,CakePHP 和 Symfony 可谓佼佼者。 CakePHP 充满了 RoR 的影子,从 ActiveRecord 模式到视图的布局管理都和 RoR 非常相 似。而且 CakePHP 一开始也尝试实现与 RoR 一样的许多东西。但 CakePHP 的开发团队后 来发现 PHP 语言和 Ruby 语言存在巨大区别,因此 RoR 中的许多设计即便能够在 PHP 中实 天津理工大学 2012 届本科毕业设计说明 2 现,也是缺乏实用价值的。 CakePHP 在发展中逐步走出了 RoR 的阴影,开始探索更能发挥 PHP 语言本身优势的架 构和实现。因此有一段时间 CakePHP 的 A
14、PI 发生了剧烈的变化,以致其他开发者纷纷停下 脚步处于观望状态。 但由于前期一些架构的不合理和对 RoR 太多的模仿,导致 CakePHP 的核心部分越来越 难以理解,运行性能也不尽人意。而且 CakePHP 将一个庞大的数据库操作对象作为所有业 务对象的基础。这虽然利于快速开发,但却导致对业务逻辑对象的测试非常困难。 Symfony 是一个非常成熟的框架,大量利用了已有的开源项目。Symfony 使用 Mojavi 的核心代码实现了框架的 MVC 模式,利用 Propel 作为数据库抽象层。Symfony 不仅功能强 大,而且对 Ajax 有全面的支持。加上官方网站提供的大量文档和教程,并
15、拥有一个活跃的 社区,因此受到许多开发者的欢迎。 但是,Symfony 最大的问题也在于使用了太多风格迥异的开源项目来组合成框架。由于 Mojavi 和 Propel 本身都相当复杂,因此 Symfony 的结构非常复杂,难以理解和学习。 不过对于希望选择一个框架作为企业内部系统基础架构的企业来说,Symfony 的成熟度、 丰富的文档和活跃的社区都是值得考虑的。毕竟企业内部系统更为看重的是稳定性和长期的 支持。着技术对游戏经验的促进,游戏市场持续增长,商业 IT 革命为我们节省了时间和金 钱,从而提。 2011 年,中国唯一一位 PHP 开发组成员,惠新宸,在自己的 blog 公布了自己基于
16、 C 语 言开发的 php 框架yaf。很快,yaf 以其独特的开发方式,极高的性能引起了全世界 PHP 开发社区的关注,甚至 PHP 的创始人亦在论坛中留贴表示关注。目前为止,yaf 还在不断开 发中,但已成为 PHP 社区中最受瞩目的项目。本次课题亦是根据此思路开发。 1.3 本课题研究的内容和方法 本课题要求设计并实现基于 C 语言的 PHP 框架。现今国际上已经有很多 PHP 框架,但 大都基于 php 开发,在效率方面必然有所限制。PHP 本身即为 C 语言开发,而且已有许多 成熟的扩展可以借鉴,所以用 C 语言开发 PHP 框架有着独特的优势。 对系统的开发流程模式基本上采用瀑布模
17、型,首先,做了系统分析;然后,对系统进行 了总体设计以及详细设计,最后对系统做了验证性的测试。 现在对于 Linux 下的 C 语言开发,普遍采用 vim 作为编译器,make,gcc 作为编译工具。 用 siege 作为 web 站点性能调试工具。 1.4 本课题实现的意义 使用 C 语言开发 PHP 框架,极大的提升了 PHP 的性能,扩展了 PHP 的使用范围,使 其能力大大提升。也为 web 站点高性能扩展提供了全新的思路,解决了在 CPU 密集型的 web 应用中 php zend 引擎性能不足的弱点,对整个 web 开发界带来了极大地改变。 天津理工大学 2012 届本科毕业设计说
18、明 3 第二章 系统分析 2.1 PHP 程序概述 2.1.1 PHP 简介 PHP(PHP:Hypertext Preprocessor)是一种在电脑上执行的脚本语言,主要用途是在于 处理动态网页,也包含了命令行执行接口,或者产生图形用户界面程式。 PHP 的应用范围相当广泛,尤其是在网页程式的开发上。一般来说 PHP 大多执行在网 页服务器上,透过执行 PHP 代码来产生使用者浏览的网页。PHP 可以在多数的服务器和操 作系统上执行,而且使用 PHP 完全是免费的。根据 2007 年 4 月的统计资料,PHP 已经被安 装在超过 2000 万个网站和 100 万台服务器上1。 2.1.2
19、PHP 的生命周期 PHP 脚本通过 SAPI 与宿主通信,常见的方式有单进程,多进程,多线程模式,还有一种 Embed SAPI2。无论通过哪种 SAPI 运行 PHP 都经过下面几个阶段: 1. 模块初始化阶段(Module init)即调用每个拓展源码中的的 PHP_MINIT_FUNCTION 中 的方法初始化模块,进行一些模块所需变量的申请,内存分配等。 2. 请求初始化阶段(Request init),即接受到客户端的请求后调用每个扩展的 PHP_RINIT_FUNCTION 中的方法,初始化 PHP 脚本的执行环境。 3. 执行 PHP 脚本。 4. 请求结束(Request S
20、hutdown),这时候 ZE 开始回收变量和内存,并且调用每个扩展的 PHP_RSHUTDOWN_FUNCTION 方法清理请求现场。 5. 关闭模块(Module shutdown)Web 服务器退出或者命令行脚本执行完毕退出会调用拓 展源码中的 PHP_MSHUTDOWN_FUNCTION 方法3 。 2.1.3 PHP 与服务器的关系 PHP 的所有应用程序都是通过 WEB 服务器和 PHP 引擎程序解释执行完成的4工作过程 如下:当用户在浏览器地址中输入要访问的 PHP 页面文件名,然后回车就会触发这个 PHP 请求,并将请求传送化支持 PHP 的 WEB 服务器。WEB 服务器接受
21、这个请求,并根据其后 缀进行判断如果是一个 PHP 请求,WEB 服务器从硬盘或内存中取出用户要访问的 PHP 应用 程序,并将其发送给 PHP 引擎程序5PHP 引擎程序将会对 WEB 服务器传送过来的文件从头 天津理工大学 2012 届本科毕业设计说明 4 到尾进行扫描并根据命令从后台读取,处理数据,并动态地生成相应的 HTML 页面。PHP 引擎将生成 HTML 页面返回给 WEB 服务器。WEB 服务器再将 HTML 页面返回给客户端浏 览器。 PHP 性能 2.2.1 PHP 对性能的优化 作为世界上使用率最高的 Web 开发语言,PHP 内部有很多对性能的优化处理。以下为 对性能有
22、较大提升的处理: 1.内存管理 类似 Nginx 的内存管理方式,PHP 在内部也是基于内存池,并且引入内存池的生命周期 概念。在内存池方面,PHP 对 PHP 脚本和扩展的所有内存相关操作都进行了托管,对大内 存和小内存的管理采用了不同的实现方式和优化。 2.变量 PHP 对与变量的处理做了大量的优化,比如说 Reference counting 和 copy on writer 机制。 这样能够保证内存使用上的优化,并且减少内存拷贝次数。 3.HashTable PHP 的 Hash 采用的是目前最为普遍的 DJBX33A (Daniel J. Bernstein, Times 33 wi
23、th Addition), 这个算法被广泛运用与多个软件项目,Apache, Perl 和 Berkeley DB 等. 对于字符串 而言这是目前所知道的最好的哈希算法,原因在于该算法的速度非常快,而且分类非常好 (冲突小,分布均匀)。 从上面的几个分析来看,PHP 在内存管理、变量、哈希等几个方面都做了大量的工作, 所以从原理来看,PHP 不应该存在性能问题,性能至少也应该和 Java 比较接近。 2.2.2 PHP 性能的瓶颈 虽然 PHP 对性能做出了以上优化,但 PHP 作为脚本语言的本质没有改变,所以有两个 问题成为了 PHP 性能的瓶颈所在:每次请求时的编译以及动态运行机制。 众所
24、周知,按编程语言的类型分类,C/C+是编译型,JAVA 是半编译型,PHP 是解释 型。也就是说 PHP 是先动态解析再代码运行的,PHP 的运行机制如图 2.1: PHP 的运行阶段也分成三个阶段: 1. Parse:语法分析阶段。 2. Compile:编译产出 opcode 中间码。 3. Execute:运行,动态运行进行输出。 所以说,在 PHP 内部,每次运行脚本,都会重新进行编译的过程,极大地降低性能。 影响 PHP 效率的还有动态运行机制。由于 PHP 是动态运行时,所以所有的变量、函数、 天津理工大学 2012 届本科毕业设计说明 5 对象调用、作用域实现等等都是在执行阶段中
25、才确定的。这个从根本上决定了 PHP 性能中 很难改变的一些东西:在 C/C+等能够在静态编译阶段确定的变量、函数,在 PHP 中需要 在动态运行中确定,也就决定了 PHP 中间码不能直接运行而需要运行在 Zend Engine 上。 开始 读取PHP脚本 解析PHP脚本 生成opcodes 执行opcodes 是否有引用文 件或函数调用 有 输出结果 没有 结束 图 2.1 PHP 运行流程图 2.2.3 解决方案 面对以上几个问题,本课题决定使用 C 语言开发一套程序框架加以解决。原因有以下 几点: 1. 程序使用 C 语言开发,使得框架不必在每次运行时进行词法分析、语法分析。加开 脚本执
26、行速度。 2. 使用 C 语言开发,所有的变量、函数、类都是在编译阶段确定,PHP 启动时被加载 到内存中,可以直接运行在 Zend Engine 中。 3. 以框架的形式供开发者使用,封装底层逻辑。可以让开发者更加关注业务逻辑,提 高开发效率。 天津理工大学 2012 届本科毕业设计说明 6 2.3 MVC 概述 2.3.1 MVC 简介 MVC 模式(三层架构模式) (Model-View-Controller)是软件工程中的一种软件架构模 式,把软件系统分为三个基本部分:模型(Model) 、视图(View)和控制器(Controller)6 MVC 模式的目的是实现一种动态的程式设计,
27、使后续对程序的修改和扩展简化,并且 使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构 更加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。专 业人员可以通过自身的专长分组。 2.3.2 MVC 的优点 首先,多个视图能共享一个模型。如今,同一个 Web 应用程序会提供多种用户界面, 例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要 求 Web 网站同时能提供 Internet 界面和 WAP 界面。在 MVC 设计模式中,模型响应用户请 求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表
28、示层分离,同 一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。7 其次,控制器是自包含高独立内聚的物件,与模型和视图保持相对独立,所以可以方便 的改变应用程序的数据层和业务规则。例如,把数据库从 MySQL 移植到 Oracle,或者把 RDBMS 数据源改变成 LDAP 数据源,只需改变控制器即可。一旦正确地实现了控制器,不 管数据来自数据库还是 LDAP 服务器,视图都会正确地显示它们。由于 MVC 模式的三个模 块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的少互扰 性的构件8。 此外,控制器提高了应用程序的灵活性和可配置性9。不同的模型和视图去完成
29、用户的 需求,也可以构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以 根据用户的需求选择适当的模型机型处理,然后选择适当的的视图将处理结果显示给用户10。 2.3.3 MVC 开发的复杂度 MVC 模式的缺点是由于它没有明确的定义,所以完全理解 MVC 模式并不是很容易。 使用 MVC 模式需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思 考。降低开发效率。 开发一个 MVC 模式架构的工程,将不得不花费相当可观的时间去考虑如何将 MVC 模 式运用到应用程序中,同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一 天津理工大学 2012 届本科毕
30、业设计说明 7 定的困难11。每个构件在使用之前都需要经过彻底的测试。另外由于 MVC 模式将一个应用 程序分成了三个部件,所以这意味着同一个工程将包含比以前更多的文件。 2.4 Blog 概述 博客即 blog 一词源于英文中的 web log(网络日志)一词,而“博客”则是参照了“骇 客” “黑客”等、进行了中国化翻译的结果。对于博客的定义有多种,这里列出两条:一、 Blog 可以是个人日记、每日道坛、合作空间、政治讲坛、特发新闻集散地、各种链接的汇 集地、您的个人想法、世界大事备忘录等。您可以完全按照自己的意思来制作 Blog,Blog 有无数的形式和大小,而且没有任何实际的规则12;二
31、、博客是一种十分简易的傻瓜化个人 信息发布方式。让任何人都可以像免费电子邮件的注册、写作和发送一样,完成个人网页的 创建、发布和更新。如果把论坛(BBS)比喻为开放的广场,那么博客就是你的开放的私人 房间13。博客具有多重属性和多样化的受众,可以从经济学、政治学、文化研究及心理学的 角度等进行分析,本文侧重讨论博客的媒体属性及价值。 “如果只有一个人看,那就是日记; 如果有几十个人看,那是和朋友分享;如果有几百个人看,那就是一种影响力;如果有几千 个人看,那就是一个媒体14” 。博客具有的媒体属性、媒体特征及媒体价值与大众媒体有相 通之处,但它本质上又是反大众媒体的15。 许多博客作者专注评论
32、特定的课题或新闻,其他则作为个人日记。一个典型的博客结合 了文字、图像、其他博客或网站的超链接、及其它与主题相关的媒体。能够让读者以互动的 方式留下意见,是许多博客的重要要素。大部分的博客内容以文字为主,仍有一些博客专注 在艺术、摄影、视频、音乐、播客等各种主题。博客是社会媒体网络的一部分。 2.5 系统开发环境和运行平台 开发环境如表 2.1 所示: 表 2.1 开发环境 操作系统Ubuntu11.10 编辑器Vim7.3.45 调试工具Gdb 编译工具Gcc,make 服务器Apache2 运行环境如表 2.2 所示: 表 2.2 运行环境 操作系统Ubuntu11.10 服务器Apach
33、e2 PHP 版本5.3.13 天津理工大学 2012 届本科毕业设计说明 8 数据库MySQL5.5.24 天津理工大学 2012 届本科毕业设计说明 9 第三章总体设计 3.1 框架设计 3.1.1 框架实现目标 首先,框架需要实现基本的 MVC。简单来说,就是当一个请求来到时框架可以解析请 求,判断应该调用哪一个模块的哪一个控制器的哪一个函数,并实例化控制器,调用相应函 数。在控制器中调用视图时,框架可以判断应该实例化哪一个视图并嵌入哪一个层中。也就 是 MVC 中的 V 与 C。 其次,框架应该提供一种机制,使开发者可以方便的干预“路由调度返回请求 对象”这一流程,提供灵活的开发方式。
34、 此外,还应该提供足够的工具类,用以方便安全的调度如 session,cookeis 等资源以及 读取配置文件,使开发工作简单高效。图 3.1 为框架的功能结构图: C语言PHP框架 调度 视图 工具 插件 框架运行 路由器 请求响应对象 调度器 控制器 视图模板 层 Session Cookies Config Application Bootstrap 图 3.1 框架功能结构图 天津理工大学 2012 届本科毕业设计说明 10 3.1.2 MVC 的设计 框架主要由调度部分、视图部分、插件部分组成,下面分别对这几个部分进行说明。 1.调度部分 为了能够控制和协调每个用户跨越多个请求的处理
35、,控制器应该被集中的方式进行管理。 为了能够达到管理控制器的目的,引入了调度器。框架从客户端收到请求后,由路由组件决 定执行什么样的业务逻辑,实例哪个控制器。控制器执行业务逻辑,然后将下一步责任委派 给一个适当的视图组件。 2.视图层 视图是模型的表示,它提供用户交互界面。页面都由层定义,层定义了页面的布局,以 及模板被调用的位置及数量。针对层上的静态内容,如页面上的站点导航,菜单,友好链接, 这些使用缺省的模板内容配置;针对动态内容(主要是业务内容),由于用户的请求不同,只 能使用后期绑定。 3.插件 某些情况下需要根据特定的请求进行特殊的处理,或者是统一对默写控制器进行操作。 处理这类问题
36、,原有的 MVC 框架处理起来有很多不方便之处,所以需要一个插件机制独立 于整个流程之外进行操作。插件的切入点应该有一下几处: (1) 路由开始和结束时 (2) 调度开始和结束时 (3) 控制器执行业务逻辑开始和结束时 4.其他 除了以上几个部分外,还应有一个在系统启动时加载所有必要组件的 Bootstrap 类,处 理所有资源的初始化工作。一个 Application 组件包裹所有以上组件,并开始运行流程。对 Session、Cookies 的操作也应该进行封装。 3.1.3 MVC 结构的实现 因为 PHP 本身是面向对象的语言,所以 PHP 的框架也应该用面向对象的方法开发。既 是,框架
37、本身提供一系列类,应该开发时用类实例化出来的一系列对象组成应用项目。 首先说控制层(Controller 层) ,最基本的提供一个 Controller 类,为了调度 Controller 类, 需要一个调度器 Dispatcher 类,为了确定需要调度的对象,需要一个路由器 Router 类,以及 不同种类的路由 Route 类。为了传递 http 请求与响应对象,还需要一个请求 Request 类与响 应 Response 类。 然后是视图层(View 层) ,需要提供基本的视图 View 类,以及 Controller 与 View 的连 接,并提供视图层功能的层 Layout 类。 天
38、津理工大学 2012 届本科毕业设计说明 11 除此之外,为了框架的正常运作,需要一个应用程序 Application 类,加载各种功能的 Bootstrap 类,以及自动载入各种类的 Autoloader 类,提供插件机制的 Hook 类。 为了方便开发,还应提供自动加载配置文件的 Config 类。封装了 session 操作的 Session 类。 所有类前缀为“Wf_” 。最终的组件以及功如表 3.1 所示。 表 3.1 框架组件及功能 编号编号类名类名功能功能使用方式使用方式 1Wf_Application 应用程序基础类,代表整个应用。负责 启动整个程序,加载 autoloader
39、 类,初始 化整个站点,加载必要模块。 单例模式存在 2Wf_Autoloader根据类名自动加载所需文件 单例模式,向 php 注册自己的 一个静态函数来进行加载。 3Wf_Bootstrap 初始化类,负责在程序启动时进行必要 的操作,如装载路由,连接数据库,启 动视图,注册插件等。 作为 application 对象的一个属 性存在。 4Wf_Config负责自动装载配置文件。 单例模式,在 bootstrap 内加载 文件,之后可在程序任意地方 用静态方法调用。 5Wf_Controller控制器类,负责处理业务逻辑 由 dispatcher 对象实例化,调度。 6Wf_Dispatc
40、her 调度器,进行据路由,并根据结果实例 化控制器,调用相应方法,触发插件, 发送响应对象。 作为 application 的一个属性存 在。 7Wf_Hook 插件类,负责维护插件列表,根据不同 事件调用不同函数句柄。 全部静态方法与属性,方便调 用。 8Wf_Layout 层类。可以根据不同的 controller 调用、 渲染不同 view,并为 view 提供一个通用 的视图层机制。 作为一个插件存在。 9Wf_Request请求对象,封装各种请求数据。 单例模式,在 dispatcher 中生成, 贯穿整个业务流程。 10Wf_Response 响应对象,封装各种响应对象,并在最
41、后将数据发出。 单例模式,在 dispatcher 中生成, 贯穿整个业务流程。 11Wf_Router 路由对象,通过对请求对象进行处理得 到请求的模块,控制器,响应函数。 在 dispatcher 内部函数中实例化, 调用。 12Wf_Session 封装 session 操作,在程序开始时调用 session_start()函数。 单例模式。 13Wf_View视图类,对数据进行渲染。在 controller 内实例化。 天津理工大学 2012 届本科毕业设计说明 12 3.2 Blog 总体设计 3.2.1 Blog 功能设计 Blog 功能主要有以下几点: 发表文章,并能对文章进行查
42、询,修改,删除,推荐,隐藏等功能,能对文章设置类别, 添加标签,并能根据类别与标签对文章进行检索。 上传照片,能按相册为单位对照片进行管理。可以删除照片,修改照片描述。 发表评论,可以对文章进行评论,可以在站点关于页面留言,后台可对留言进行审批, 未通过的不能在前台显示。可以删除,修改评论。发表评论使用 ajax 异步刷新。 Ajax 加载,前台页面全部用 ajax 加载。亦可进行正常的页面跳转,首页内容更新列表 为使用 ajax 方式逐步加载。 3.2.2 Blog 前台设计 博客的前台主要由 4 个部分组成,首页、文章、相册、关于。每个部分页面主题区域各 不相同,侧边栏部分内容完全相同。每
43、个部分个有一个主题皮肤。整个前台点击任何站内链 接,均使用 AJAX 加载。单点击链接时如果选择“在新标签页打开”选项,也能在新标签中 打开。 1.首页 首页部分,用 AJAX 现实所有内容的更新。内容包括文章更新以及相册更新。文章可进 行评论。打开页面时。页面中心区域并无任何内容,而是显示一个 loading 的动画,之后通 过 ajax 向服务器请求数据。请求返回 4 条更新内容,请求到的内容用动画的方式加载到页 面中。在页面的最下面,有一个 more 按钮,点击后,页面将会再向服务器请求数据,一次 返回 3 条更新内容,更新的内容以同样的方式出新在页面中。more 按钮一直在页面的最下
44、方,直到服务器方没有可以显示的内容为止。点击更新文章的标题,将条转到对应的文章内 容页,点击更新图片区域的相册名,将跳转到相册页面。点击相片,将跳转到相应相册页面, 并大图显示所点击的图片。 2.文章页 文章部分,主要用来显示博主所写的文章。文章页面主要实现两个功能:显示单篇文章 和现实文章列表。显示单篇文章时。首先会突出显示标题,下面展示文章的分类以及文章的 编写时间。下面就是现实文章的正文部分。正文部分之后,显示文章的所有标签。页面最下 部分则是留言区域,读者可在这里留下对文章的评论及感悟。留言时必须同时留下姓名,也 可按意愿留下 eMail 和站点地址。留言也是以 ajax 的方式加载。
45、显示文章列表时,站点有三 种筛选文章的模式:第一种为显示所有文章,不予筛选,此种方式为默认模式。第二种为通 过文章类别进行筛选,即选择一个文章类别,站点只将此类文章筛选出来,其他文章不予显 天津理工大学 2012 届本科毕业设计说明 13 示。第三种为按文章标签进行筛选。与第二种模式类似,选择一个标签,站点将只选出拥有 所选标签的文章,其他文章不予显示。 3.相册页 相册部分,主要用于显示相册以及相片。此部分分为两个子页面:相册列表页和相册页。 相册列表页,显示所有的相册。每个相册显示一张相册内的图片,边上注有相册的名称,相 片数量以及一句简单的描述。点击图片或标题,就进入了相册页。相册页平铺
46、展示了此相册 内的所有照片的缩略图。点击其中的一张,就会以动画的形式显示图片的完整大图。点击图 片的左边或右边,就会自动显示上一张或下一张图片,点击图片右上放的播放按钮,就能以 幻灯片连续播放的形式图片。 4.关于页 关于页面相对简单,显示了站点的相关信息以及博主的留言。读者也可以在此页面留下 话语,留言的同时也必须留下自己的姓名,愿意的话,还可以留下 email 和自己 blog 的地址。 留言依然以 ajax 的方式进行,无需刷新页面。 侧边栏部分为所有页面所公用。首先,侧边栏列出了文章的所有分类。跟在后面的是所 有的相册。相册下面,列出了博主所推荐的文章。处于最下面的,文章的所有标签展示
47、在下 面,同时列出的还有每个标签被文章使用的次数,标签列表也是按此次数排列的。 点击站点的所有链接,除了站外地址之外,全部采用 AJAX 加载,而不是刷新页面。点 击的链接如果和当前页面处于相同的模块,则页面头部分和侧边栏部分不动,页面主体部分 向左移动,最后移出页面。移动的同时,页面向服务器发送请求。请求的数据返回后,经渲 染成为新的主体部分,从左侧进入页面,移动到原来的部分。点击的链接如果和当前页面不 处于同一模块,那么,除了主体部分,头部分和侧边栏部分也会也会快速移出页面。然后整 个页面的背景会进行移动。当前的背景会飞出页面,而被点击的模块的背景则会进入页面, 待请求的数据返回、渲染完成
48、后,页面的所有部分会以新的样式重新移动回页面。 3.2.3 Blog 后台设计 后台主要进行文章,相册的更新、修改,标签、类别的增加、编辑之类的操作,主要分 成文章管理,图片管理,评论管理三个部分。 文章管理,主要对文章进行增删改查的操作以及编辑类别和标签。发表、编辑文章时, 可以设置文章的标题,类别,标签,正文,描述以及状态。类别和标签从已有的标签库和类 别库中选取,类别只能选择一个,标签可以选择多个。状态从有三种:正常,推荐,草稿。 正常就是正常发表。推荐就是除了正常发表之外,文章还会出现在侧边栏的推荐文章部分。 而草稿则是存储在数据库中,但是在站点前台不可访问。除了管理文章,还可以进行的
49、是标 签和类别的管理。管理页面除了正常的增删改查之外,还有各项统计数据,比如类别的文章 数之类。对于这两相,在编辑的时候可以进行简单的描述。 相册管理,就是对相册和相片的操作,首先是相册管理,可以对相册进行增删改查, 天津理工大学 2012 届本科毕业设计说明 14 同标签、类别一样,在编辑的时候可以对相册进行小段的描述,在前台的相册模块展示。点 击相册名称,进入相片编辑列表。相片编辑列表,主要进行的是相册的上传与删除。在页面 左边,显示的是相册的所有图片,每张图片显示图片类型,图片大小以及上传时间。列表的 最右边有一个红色的叉,点击就可以删除图片。右边是上传部分。点击上传按钮,在弹出的 文件浏览窗口选择图片就完成了上传。 3.2.4 数据表设计 数据库中,对应文章与照片,需要两张表 article 和 pics,文章与照片分别从属于类别与 相册,所以还需要两站表,tag 和 album,此 blog 系统中,标签和类别用一张表表示,所以 没有单独的 category 表,用来存储 article 和 tag 的多对多关系需要用到表 tag_item。本系统 中,article 与 pics 公用一个自增序列,所以需要表 item 来存储这个队列。另外,系统中所有 表统一用前缀“bs_” 。 表 b
链接地址:https://www.31doc.com/p-2369080.html