C语言实现PHP框架毕业设计论文.docx
《C语言实现PHP框架毕业设计论文.docx》由会员分享,可在线阅读,更多相关《C语言实现PHP框架毕业设计论文.docx(51页珍藏版)》请在冰豆网上搜索。
C语言实现PHP框架毕业设计论文
C语言实现PHP框架
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
注意事项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
□优□良□中□及格□不及格
3、学生综合运用所学知识和专业技能分析和解决问题的能力
□优□良□中□及格□不及格
4、研究方法的科学性;技术线路的可行性;设计方案的合理性
□优□良□中□及格□不及格
5、完成毕业论文(设计)期间的出勤情况
□优□良□中□及格□不及格
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
建议成绩:
□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
指导教师:
(签名)单位:
(盖章)
年月日
评阅教师评阅书
评阅教师评价:
一、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
二、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
建议成绩:
□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
评阅教师:
(签名)单位:
(盖章)
年月日
教研室(或答辩小组)及教学系意见
教研室(或答辩小组)评价:
一、答辩过程
1、毕业论文(设计)的基本要点和见解的叙述情况
□优□良□中□及格□不及格
2、对答辩问题的反应、理解、表达情况
□优□良□中□及格□不及格
3、学生答辩过程中的精神状态
□优□良□中□及格□不及格
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
评定成绩:
□优□良□中□及格□不及格
教研室主任(或答辩小组组长):
(签名)
年月日
教学系意见:
系主任:
(签名)
年月日
摘要
本课题通过研究国内外流行的PHP框架及对其工作原理的分析,找出了PHP站点性能的瓶颈所在。
针对找到的问题,本课题以C为开发语言,使用PHP底层的ZendAPI,设计并实现了MVC程序框架,有效提高了PHP站点的性能。
并通过开发一套基于此框架的个人Blog系统,验证其可行性和有效性。
设计中第一部分是绪论,讨论了本课题的意义,以及PHP技术的发展前景;第二部分是系统分析,探讨了PHP的工作原理与及存在的性能问题,同时介绍了MVC结构的概念与优缺点;第三部分是总体设计,明确了框架的功能结构和实现必要性,设计了Blog的功能与数据库结构;第四部分是详细设计,主要讲述了框架的运行流程与几个主要模块的实现方式,以及Blog各层的实现方式;最后是测试,验证了Blog的功能和框架的性能。
关键词:
框架MVCZend接口PHP性能
ThePHPFrameworkimplementedbyCLanguage
ABSTRACT
ThisprojectisaimedtofindoutthebottleneckoftheperformanceofthePHPsitebyanalysingthepopularPHPframeworkanditsworkingprinciple.ThisprojectisbasedonClanguageandtheZendAPIofPHP,whicheffectivelyimprovedtheperformanceofPHPsite.AndthenverifythefeasibilityandeffectivenessofthisprojectbydevelopingaPersonalBlogSystemwhichbasedonthisframework.
ThefirstchapterofthisarticleisanintroductionwhichintroducesthemeaningofthisissueandthedevelopmentprospectsofPHPtechnology.Thesecondchapterisaboutsystemanalysing,whichexplainstheworkingprincipleandlifecycleofPHP.Inthemeantime,thesecondchapteralsointroducestheconception,strengthsandweaknessofMVCstructure.Thethirdchapterismainlyabouttheoveralldesignofthisproject,whichclearsthefunctionalstructureofthisframework.Besides,thethirdchapterdesignsthefunctionanddatabasestructureoftheBlog.Thefourthchapterismainlyaboutthedetaileddesign,whichexplainstherunningprocessesofthisframeworkandthefunctionofseveralmainmodules.ThefourthchapterexplainstherealizationofthisBlogaswell.Thefinalpartofthearticleismainlyaboutsystemtest,whichverifythefunctionofthisBlogandtheperformanceoftheframework.
Keywords:
FrameworkMVCZendAPIPHPPerformance
第一章绪论
1.1系统开发背景
21世纪的今天,网络在人们生活中已经日益盛行,越来越多人已经离不开网络。
人们已经不再满足于了解最新信息、查找资料等一些传统的网络使用方式,而是过渡到娱乐、购物等新兴的网民生活。
网上娱乐,成了当今广大群众的时尚。
客户也通过博客把自己喜欢的东西写出来或是和别人一起分享那份快乐。
因此,博客已成为个人、公司、部门和团队之间越来越盛行的交流沟通工具。
在此,为了方便网络用户的需求,我们专门构建个人博客系统。
而因为传统PHP框架开发的系统在性能上有所限制,在日益增长的用户量上捉襟见肘,所以,此次设计采用C语言是实现PHP框架。
1.2国内外研究现状
随着RubyonRails的火爆,PHP这个流行的Web应用脚本语言也出现了大量的新一代开发框架。
与此同时,国内PHP开发者也开始紧跟国外发展,推出了不同的开发框架。
在RoR流行之前,PHP领域也有不少开发框架,例如Mojavi、WACT、PHPMvc和Seagull等。
这些框架虽然也采用了MVC模式、数据库抽象层等技术。
但由于当时PHP本身不像现在这样流行,所以这些框架都没有得到大量应用,最终归于沉寂。
而在感受到RoR提供的快速开发能力后,PHP社区像被注入了兴奋剂。
各种应用技术和开发框架层出不穷。
PHP社区在被RoR震晕后,没有陷入过多的争论。
而是立即行动起来,开始了新一代框架的设计。
首先出现的第一批框架几乎都是RoR的克隆。
例如PHPonTrax(连名字都借鉴RubyonRails)和TaniPHP、Akelos等。
这些框架最大的特点就是力求100%克隆RoR,不管是采用的架构、设计模式,还是使用方法。
这几个框架一开始确实吸引了开发者的注意,但随着开发者的深入了解,这些框架头上的光环逐步褪色。
晦涩难懂的架构、糟糕的性能,以及太多的限制,让这些框架难以在实际项目中运用。
此时,许多PHP开发者认为可以借鉴RoR的设计思想,但不应照搬RoR的结构和实现。
为此,一些同样推崇快速开发的框架开始在PHP社区出现。
这些框架中,CakePHP和Symfony可谓佼佼者。
CakePHP充满了RoR的影子,从ActiveRecord模式到视图的布局管理都和RoR非常相似。
而且CakePHP一开始也尝试实现与RoR一样的许多东西。
但CakePHP的开发团队后来发现PHP语言和Ruby语言存在巨大区别,因此RoR中的许多设计即便能够在PHP中实现,也是缺乏实用价值的。
CakePHP在发展中逐步走出了RoR的阴影,开始探索更能发挥PHP语言本身优势的架构和实现。
因此有一段时间CakePHP的API发生了剧烈的变化,以致其他开发者纷纷停下脚步处于观望状态。
但由于前期一些架构的不合理和对RoR太多的模仿,导致CakePHP的核心部分越来越难以理解,运行性能也不尽人意。
而且CakePHP将一个庞大的数据库操作对象作为所有业务对象的基础。
这虽然利于快速开发,但却导致对业务逻辑对象的测试非常困难。
Symfony是一个非常成熟的框架,大量利用了已有的开源项目。
Symfony使用Mojavi的核心代码实现了框架的MVC模式,利用Propel作为数据库抽象层。
Symfony不仅功能强大,而且对Ajax有全面的支持。
加上官方网站提供的大量文档和教程,并拥有一个活跃的社区,因此受到许多开发者的欢迎。
但是,Symfony最大的问题也在于使用了太多风格迥异的开源项目来组合成框架。
由于Mojavi和Propel本身都相当复杂,因此Symfony的结构非常复杂,难以理解和学习。
不过对于希望选择一个框架作为企业内部系统基础架构的企业来说,Symfony的成熟度、丰富的文档和活跃的社区都是值得考虑的。
毕竟企业内部系统更为看重的是稳定性和长期的支持。
着技术对游戏经验的促进,游戏市场持续增长,商业IT革命为我们节省了时间和金钱,从而提。
2011年,中国唯一一位PHP开发组成员,惠新宸,在自己的blog公布了自己基于C语言开发的php框架——yaf。
很快,yaf以其独特的开发方式,极高的性能引起了全世界PHP开发社区的关注,甚至PHP的创始人亦在论坛中留贴表示关注。
目前为止,yaf还在不断开发中,但已成为PHP社区中最受瞩目的项目。
本次课题亦是根据此思路开发。
1.3本课题研究的内容和方法
本课题要求设计并实现基于C语言的PHP框架。
现今国际上已经有很多PHP框架,但大都基于php开发,在效率方面必然有所限制。
PHP本身即为C语言开发,而且已有许多成熟的扩展可以借鉴,所以用C语言开发PHP框架有着独特的优势。
对系统的开发流程模式基本上采用瀑布模型,首先,做了系统分析;然后,对系统进行了总体设计以及详细设计,最后对系统做了验证性的测试。
现在对于Linux下的C语言开发,普遍采用vim作为编译器,make,gcc作为编译工具。
用siege作为web站点性能调试工具。
1.4本课题实现的意义
使用C语言开发PHP框架,极大的提升了PHP的性能,扩展了PHP的使用范围,使其能力大大提升。
也为web站点高性能扩展提供了全新的思路,解决了在CPU密集型的web应用中phpzend引擎性能不足的弱点,对整个web开发界带来了极大地改变。
第二章系统分析
2.1PHP程序概述
2.1.1PHP简介
PHP(PHP:
HypertextPreprocessor)是一种在电脑上执行的脚本语言,主要用途是在于处理动态网页,也包含了命令行执行接口,或者产生图形用户界面程式。
PHP的应用范围相当广泛,尤其是在网页程式的开发上。
一般来说PHP大多执行在网页服务器上,透过执行PHP代码来产生使用者浏览的网页。
PHP可以在多数的服务器和操作系统上执行,而且使用PHP完全是免费的。
根据2007年4月的统计资料,PHP已经被安装在超过2000万个网站和100万台服务器上[1]。
2.1.2PHP的生命周期
PHP脚本通过SAPI与宿主通信,常见的方式有单进程,多进程,多线程模式,还有一种EmbedSAPI[2]。
无论通过哪种SAPI运行PHP都经过下面几个阶段:
1.模块初始化阶段(Moduleinit)即调用每个拓展源码中的的PHP_MINIT_FUNCTION中的方法初始化模块,进行一些模块所需变量的申请,内存分配等。
2.请求初始化阶段(Requestinit),即接受到客户端的请求后调用每个扩展的PHP_RINIT_FUNCTION中的方法,初始化PHP脚本的执行环境。
3.执行PHP脚本。
4.请求结束(RequestShutdown),这时候ZE开始回收变量和内存,并且调用每个扩展的PHP_RSHUTDOWN_FUNCTION方法清理请求现场。
5.关闭模块(Moduleshutdown)Web服务器退出或者命令行脚本执行完毕退出会调用拓展源码中的PHP_MSHUTDOWN_FUNCTION方法[3]。
2.1.3PHP与服务器的关系
PHP的所有应用程序都是通过WEB服务器和PHP引擎程序解释执行完成的[4]工作过程如下:
当用户在浏览器地址中输入要访问的PHP页面文件名,然后回车就会触发这个PHP请求,并将请求传送化支持PHP的WEB服务器。
WEB服务器接受这个请求,并根据其后缀进行判断如果是一个PHP请求,WEB服务器从硬盘或内存中取出用户要访问的PHP应用程序,并将其发送给PHP引擎程序[5]PHP引擎程序将会对WEB服务器传送过来的文件从头到尾进行扫描并根据命令从后台读取,处理数据,并动态地生成相应的HTML页面。
PHP引擎将生成HTML页面返回给WEB服务器。
WEB服务器再将HTML页面返回给客户端浏览器。
1.1
2.2PHP性能
2.2.1PHP对性能的优化
作为世界上使用率最高的Web开发语言,PHP内部有很多对性能的优化处理。
以下为对性能有较大提升的处理:
1.内存管理
类似Nginx的内存管理方式,PHP在内部也是基于内存池,并且引入内存池的生命周期概念。
在内存池方面,PHP对PHP脚本和扩展的所有内存相关操作都进行了托管,对大内存和小内存的管理采用了不同的实现方式和优化。
2.变量
PHP对与变量的处理做了大量的优化,比如说Referencecounting和copyonwriter机制。
这样能够保证内存使用上的优化,并且减少内存拷贝次数。
3.HashTable
PHP的Hash采用的是目前最为普遍的DJBX33A(DanielJ.Bernstein,Times33withAddition),这个算法被广泛运用与多个软件项目,Apache,Perl和BerkeleyDB等.对于字符串而言这是目前所知道的最好的哈希算法,原因在于该算法的速度非常快,而且分类非常好(冲突小,分布均匀)。
从上面的几个分析来看,PHP在内存管理、变量、哈希等几个方面都做了大量的工作,所以从原理来看,PHP不应该存在性能问题,性能至少也应该和Java比较接近。
2.2.2PHP性能的瓶颈
虽然PHP对性能做出了以上优化,但PHP作为脚本语言的本质没有改变,所以有两个问题成为了PHP性能的瓶颈所在:
每次请求时的编译以及动态运行机制。
众所周知,按编程语言的类型分类,C/C++是编译型,JAVA是半编译型,PHP是解释型。
也就是说PHP是先动态解析再代码运行的,PHP的运行机制如图2.1:
PHP的运行阶段也分成三个阶段:
1.Parse:
语法分析阶段。
2.Compile:
编译产出opcode中间码。
3.Execute:
运行,动态运行进行输出。
所以说,在PHP内部,每次运行脚本,都会重新进行编译的过程,极大地降低性能。
影响PHP效率的还有动态运行机制。
由于PHP是动态运行时,所以所有的变量、函数、对象调用、作用域实现等等都是在执行阶段中才确定的。
这个从根本上决定了PHP性能中很难改变的一些东西:
在C/C++等能够在静态编译阶段确定的变量、函数,在PHP中需要在动态运行中确定,也就决定了PHP中间码不能直接运行而需要运行在ZendEngine上。
图2.1PHP运行流程图
2.2.3解决方案
面对以上几个问题,本课题决定使用C语言开发一套程序框架加以解决。
原因有以下几点:
1.程序使用C语言开发,使得框架不必在每次运行时进行词法分析、语法分析。
加开脚本执行速度。
2.使用C语言开发,所有的变量、函数、类都是在编译阶段确定,PHP启动时被加载到内存中,可以直接运行在ZendEngine中。
3.以框架的形式供开发者使用,封装底层逻辑。
可以让开发者更加关注业务逻辑,提高开发效率。
2.3
MVC概述
2.3.1MVC简介
MVC模式(三层架构模式)(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:
模型(Model)、视图(View)和控制器(Controller)[6]
MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
除此之外,此模式通过对复杂度的简化,使程序结构更加直观。
软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。
专业人员可以通过自身的专长分组。
2.3.2MVC的优点
首先,多个视图能共享一个模型。
如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同时能提供Internet界面和WAP界面。
在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。
[7]
其次,控制器是自包含高独立内聚的物件,与模型和视图保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。
例如,把数据库从MySQL移植到Oracle,或者把RDBMS数据源改变成LDAP数据源,只需改变控制器即可。
一旦正确地实现了控制器,不管数据来自数据库还是LDAP服务器,视图都会正确地显示它们。
由于MVC模式的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的少互扰性的构件[8]。
此外,控制器提高了应用程序的灵活性和可配置性[9]。
不同的模型和视图去完成用户的需求,也可以构造应用程序提供强有力的手段。
给定一些可重用的模型和视图,控制器可以根据用户