这个类就将系统对数据库的操作封装起来,方便Controller的操作,同时也使系统更安全了。
另外还设计了一个邮件发送类。开发这个类的目的在于满足一些用户希望通过Email接收管理员回复的要求。这个类支持两种发送Email的方法:第一种,使用PHP自带的"MAIL()"函数来发送;第二种,使用SMTP协议的SOCKET发送。由于PHP没有提供现成的SMTP函数,只提供了一个功能不甚灵活的"MAIL()"函数,这个函数需要服务器配置上的支持,并且不支持SMTP验证,在很多场合无法正常的工作,因此才开发了第二种发送Email的方法来弥补第一种方式的不足。第二种发送方式实际上是利用PHP的SOCKET函数来和SMTP服务器建立一个连接,然后发送文本的命令给服务器,一封内容简单的邮件就发送出去了。第二种方式的好处在于PHP中已经存在很多现成的封装得很好的类或者函数替我们完成底层的SOCKET级操作,只需要直接拿来用就好,而不用在本文里去讨论底层的代码。下面就给出通过SOCKET发送Email的具体实现过程:
(1)创建SOCK,并打开连接;
(2)设置为阻塞模式;
(3)测试SMTP应答码是否为220,220代表邮件服务就绪;
(4)发送用户身份验证,然后读取服务器端发送给客户端的返回数据;
(5)发送AUTHLOGIN命令;
(6)发送用户名以及密码;
(7)身份验证成功过后,向服务器添加From以及To;
(8)发送DATA命令,开始输入Email数据,以"."号结束;
(9)书写邮件内容,将邮件内容发送到SMTP服务器;
(10)发送QUIT命令,结束会话。
在Model中还包含了一个自定义函数文件,这些函数主要是被Controller调用,起到对用户输入数据进行鉴定和过滤的作用。这些函数的具体功能包括:
(1)接收功能常量;
(2)接收用户在前台输入的数据;
(3)限制用户信息输入的范围;
(4)过滤用户输入的错误数据;
(5)显示页面跳转窗口。
4.4发布功能
发布功能主要是将留言信息显示给用户查看,其中发布的界面主要对应了三种使用功能:留言发布界面、管理员界面、用户信息的搜索界面。由于发布功能不是很复杂,因此所采用的MVC的架构也有所不同。具体的系统结构如下图4所示:
图4发布功能的MVC架构
首先介绍View部分。在这里我用Html语言编写了一个留言框模板,这个模板主要用于定义留言信息的显示格式。它由Form表单组成,其中用"[%标签名称%]"标记出要动态显示的内容所在的位置,同时给Form表单的ID赋一个值,以便Controller调用。另外还使用JavaScript制作了一些实用的前台动态效果,它们包括:
(1)建立一些主要链接上的中文提示框;
(2)支持在新的窗口打开用户插入的图片;
(3)输出滚动显示的公告;
(4)屏蔽脚本错误;
(5)显示页面处理时间以及PHP运行时间等。
下面就给出留言发布界面的效果图(图5):
图5留言发布界面
接着介绍Controller部分。在这里ID是JavaScript标签容器命名属性,innerHTML表示一个容器内所包含的所有代码,通过"ID.innerHTML"就能够在JavaScript中取得View部分所定义的留言框模板的代码。然后再通过JavaScript的replace方法与正则表达式结合应用,从而替换模板中的标签内容,将留言信息插入到留言框模板中去。这种设计方法的好处在于客户端不用刷新页面就能看到动态更新的内容,并且利用JavaScript语言将处理静态页面的代码与处理动态页面的代码分离开,方便了程序员查找和修改程序。
最后介绍Model部分。在这里主要还是用PHP语言调用MYSQL数据库操作类去实现四个功能:读取数据、搜索、分页和统计。要实现前三个功能就必须执行不同的SQL语句。读取功能使用常规的"SELECT......FROM"语句就能解决。搜索功能需要在"SELECT......FROM"语句后面再加上"WHERE......LIKE"语句,通过判断前台表单所返回的搜索条件,从而筛选出要搜索的数据。分页功能学要在"SELECT......FROM"语句后面加上"ORDERBY......LIMIT"限制每页输出固定条数的留言信息。统计功能只需要调用数据库操作类的成员函数就能实现。
4.5特色功能
首先介绍验证码功能。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。使用这项功能的好处还在于防止用户利用机器人自动灌水以及防止某些用户采用暴力破解方式对管理员密码进行不断的登陆尝试。因此这项功能被应用在管理员登入界面以及用户输入留言信息界面。
在本系统中实现了两种输出验证码的方法,在介绍这两种方法之前必需介绍一下GD库。GD库是PHP处理图形的扩展库,它提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。因此第一种方法就是对于那些支持GD库的空间,调用PHP的GD库函数来生成图像再搭配PHP的"RAND()"函数来生成随机数最终制作出验证码。第二种方法就是对于不支持GD库的空间,系统判别后将自动调用编写的256色BMP图像输出函数,自定义生成256色BMP图片。然后在配合一个图像输出文件生成验证码。下面具体介绍一下第二种方法的实现过程。
我们要让系统输出BMP图片就必需了解BMP文件的结构。BMP文件主要是由文件头、位图信息头、颜色信息和图形数据四部分组成。在合理配置了文件头、位图信息头、颜色信息后,将本系统要显示的验证码数据,即0到9和a到z共36个字符的图形数据录入到BMP图像输出函数中,最后再使用三个嵌套的for语句逐行、逐字、逐像素地输出图像数据,这样就实现了BMP图片的输出。当然这其中还要用到PHP的"RAND()"函数来保证输出的验证码是一串随机数。下面就给出100象素的字符在400象素的方框内随机定位的256色BMP图片生成函数的核心代码:
$ra_sj=rand(0,3);//随机产生背景色
$li=0;
//逐行,逐字,逐像素地输出图像数据
for($i=19;$i>=0;$i--)//历经所有行
{
$li++;
for($ii=0;$ii<$num;$ii++)//历经所有字
{
for($iii=0;$iii<20;$iii++)//历经所有像素,一个字20个像素
{
$ra_sjs=rand(0,7);//随机杂色
if(rand(0,100)<$cOdds)//杂点出现的机率
{
$imgnei=$imgnei.$vColorData[$ra_sjs];//杂色
}
else
{
if(x_y($iii,$li,$ii)==0)//坐标在10*10px的方框中
{
$di=20-$rand_sj[$ii][2]-9;
$di=$i-$di;
$di=($di*10+$iii-$rand_sj[$ii][0]);
if($vNumberData[$vCode[$ii]]{$di}==1)//不在字符上
{
$imgnei=$imgnei.$vColorData[$ra_sj];//背景颜色
}
else
{
$ra_sjs=rand(8,12);
$imgnei=$imgnei.$vColorData[$ra_sjs];//字符颜色
}
}
else//背景颜色
{
$imgnei=$imgnei.$vColorData[$ra_sj];
}
}
}
}
}
echo($imgnei);//输出图像
另外还有一个聊天室功能。聊天室主要分为WebChat、BBSChat两种。BBSChat是基于Telnet的Tcp协议,是BBS的附设功能,需要客户端有Telnet程序。WebChat则采用浏览器方式,实际上是一个多人共同使用的CGI程序。其基本原理是把每个用户的发言通过浏览器传给系统,再由系统收集处理后分发给特定用户。本系统的聊天室就是采用WebChat的ClientPull技术,该技术是利用Html语言的Meta标签"http-equiv=Refresh"的属性,每隔一段时间就检查服务器上是否有新的数据。同时,为防止数据库无限增大,还设计了删除陈旧数据的功能。这种方法简单有效,能够基本满足用户的需求。
结论
通过以上的研究和实践,可以预见基于PHP实现的网上留言管理系统因为它简单丰富的功能和方便快捷的交流方式,将会在互联网时代中,大有作为。网上留言系统也将由于越来越多的人学习和使用PHP语言,而变得更加完善。下面总结一下本次课题研究的一些收获和不足。
首先,通过毕业设计学会了使用MVC思想开发简单的网络软件。这种开发模式的最大特点是多个视图能够共享一个模型,同时它将应用程序的输入、处理和输出分开,从而解决了传统动态网页开发中将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起的问题。因此提高了编程人员的开发效率,使得系统的结构更加清晰,管理也更加方便。
其次,还研究了BMP图像文件的结构,学会了如何建立SOCKET会话,并根据SMTP协议发送邮件。另外还为系统加入了身份验证,密码管理,验证码,Session等功能,从而增强了系统的安全性。
最后,本系统存在一个不足之处就是没有设计客户的注册登入功能,这样就给管理员管理客户带来了不便。但不开发这项功能也是从网上留言系统的实际应用出发,如果开发了注册登入功能就会增加客户的操作次数,从而影响客户对系统的满意度。总之,开发网上留言管理系统最重要的工作就是要处理好整体架构与技术细节之间的关系,它是一个不断协调和平衡的过程,只有将这两方面处理和谐了,最终才能得到一个完美的作品。
参考文献
[1]LukeWelling/LauraThomson[美].PHP和MySQLWeb开发(原书第三版)[M].武欣/邵煜译.北京:机械工业出版社,2005。
[2]勒道夫[美].PHP程序设计[M].邓云佳等译.北京:中国电力出版社,2003.7。
[3]PHP5开发手则[EB].http://www.opencontent.org/openpub/,2006-01-14。
[4]MYSQL中文手册[EB].http://dev.mysql.com/,2005-11-15。
[5]MVC模式[OL].http://blog.csdn.net/chiefsailor/archive/2007/03/09/1524793.aspx,2007-03-09。
[6]BMP文件结构[OL].http://czqhh.bloghome.cn/posts/61278.html,2006-11-28。
[7]黄国辉.PHP聊天室技术[OL].http://www.dvbbs.net/tech/php/2006041846412.asp,2006-04-18。
[8]让插入到innerHTML中的Script跑起来[OL].http://www.coolcode.cn/?p=117,2006-06-04。
致谢
本文是在欧晓聪老师的热情关心和指导下完成的,他渊博的知识和严谨的治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他表示我最衷心的感谢!
在论文完成过程中,本人还得到了金虎老师和韩光同学的热心帮助,本人向他们表示深深的谢意!
最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!
作者简介:网络工程三班学生
出生年月:1984年12月13日民族:汉
E-mail:lw2003032085@tom.com
声明
本论文的工作是2007年02月至2007年06月在网络工程系完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。
关于使用权和研究成果知识产权的说明:
本人完全了解有关保管使用的规定,其中包括:
(1)学校有权保管并向有关部门递交的原件与复印件。
(2)学校可以采用影印、缩印或其他复制方式保存。
(3)学校可以学术交流为目的复制、赠送和交换。
(4)学校可允许被查阅或借阅。
(5)学校可以公布的全部或部分内容(保密在解密后遵守此规定)。
除非另有科研合同和其他法律文书的制约,本论文的科研成果属于。
特此声明!
作者签名:
2007年06月05日
??
??
??
??
第14页共20页
上一篇:
基于PHP实现的WEB图片共享系统(论文和程序)
下一篇:
关于听觉掩蔽的语音增强算法及DSP实现