毕业设计 基于PHP的网站博客应用服务_第1页
毕业设计 基于PHP的网站博客应用服务_第2页
毕业设计 基于PHP的网站博客应用服务_第3页
毕业设计 基于PHP的网站博客应用服务_第4页
毕业设计 基于PHP的网站博客应用服务_第5页
已阅读5页,还剩48页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

日照职业技术学院毕业设计论文PAGE第53页共53页摘要博客(Blog),是一种简易的个人信息发布方式。任何人都可以注册,完成个人网页的创建、发布和更新。博客充分利用网络互动、更新即时的特点,让你最快获取最有价值的信息与资源;你可以发挥无限的表达力,及时记录和发布个人的生活故事、闪现的灵感等;更可以文会友,结识和汇聚朋友,进行深度交流沟通。中文“博客”一词,源于英文单词Blog/Blogger。Blog,是Weblog的简称。Weblog,其实是Web和Log的组合词。Web,指WorldWideWeb,当然是指互联网了;Log的原义则是“航海日志”,后指任何类型的流水记录。合在一起来理解,Weblog就是在网络上的一种流水记录形式或者简称“网络日志”。Blogger或Weblogger,是指习惯于日常记录并使用Weblog工具的人。关键字:【web2.0】,【BLOG】,【博客】,【模板技术】,【LAMP】ABSTRACTBlog(Blog),isasimplewayofpersonalinformationreleased.Anyonecanregistertocompletethecreationofpersonalwebpages,publishandupdate.MakefulluseofinteractiveWebblog,updatedreal-timefeatureallowsyoutothefastestaccesstothemostvaluableinformationandresources,youcanplayunlimitedexpression,andthetimelyreleaseofpersonalrecordsandthelifestoryoftheinspirationcame,andsocanthetextFriendswill,togettoknowfriendsandpool,thedepthexchangeofcommunication.Chinese"blog",derivedfromEnglishwordsBlog/Blogger.Blog,shortforaWeblog.Weblog,andtheWebLogisactuallyacombinationofwords.Web,referringtoWorldWideWeb,ofcourse,referstotheInternet;Logoftheoriginalmeaningis"logs",afterreferringtoanytypeofflowrecords.Togethertounderstand,Weblogonthenetworkisaformofwaterorrecordreferredtoas"Weblog."BloggerorWeblogger,isaccustomedtodailyrecordsandusethetoolsofWeblog.KEYWORDS:【WEB2.0】,【BLOG】,【WEBSITE】,【LAMP】

目录摘要 1ABSTRACT 1目录 3序言 4Lamp 4web2.0 5一、系统运行方案 71.1开发与运行环境 71.2开发工具 7二、可行性分析 82.1技术分析 82.2性能分析 82.3市场分析、经济分析 8三、需求分析 93.1需求分析的任务 93.2项目分析 9四、概要设计 104.1系统功能模块图 104.2数据库设计图 10五、详细设计 125.1用户界面设计 125.2功能设计 135.2.1公共部分 135.2.2日志发布系统 195.2.2图片上传功能 215.2.3登录功能 28六、系统维护 416.1系统测试的原则 41七、讨论 42Ⅰphp上传功能 42Ⅱ面向对象的开发 42Smarty模板技术 44八、致谢 46九、附录 47参考文献 52序言Lamp Lamp,当今热门组合。Linux+apache+mysql+php.LAMP即操作系统:LINUX,web服务器:APACHE,数据库:MYSQL,服务器端脚本:PHP的第一个字母组合。LAMP通过几年的迅速发展,目前已经在世界范围内走出草根阶层,成为Web服务器的事实标准。这些开源组件的兼容性不断完善,“黄金组合”应用情形变得更加普便。PHP是HypertextPreprocessor的简称,是一种HTML内嵌式编程语言。它的语法混合了C、Java和Perl优点及它的新语法,比CGI、ASP或者Perl更快速地执行动态网页。总的来说,它有以下几个方面的优点:(1)支持的数据库非常广泛,大到SYBASE、MySQL、ORACLE,小到Access都支持。(2)跨平台性非常好,支持Windows系列操作系统,LINUX操作系统和UNIX操作系统。同时支持多种Web服务器。(3)开源软件,升级更新速度非常快。(4)免费软件。同时与Linux、Apache、MySQL构成性价比最高的Web系统。(5)PHP5.0有成熟的面向对象体系,能够适应基本的面向对象要求,适合开发大型项目。MysqlMYSQL是基于SQL的,完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强,使用简便,管理方便,运行速度快,安全可靠性高等优点。支持多种语言编写访问数据库的程序。apache,应用很广泛的web服务器。Linux,web服务器操作系统。应用很广泛。web2.0“Web2.0”的概念开始于一个会议中,展开于O'Reilly公司和MediaLive国际公司之间的头脑风暴部分。所谓互联网先驱和O'Reilly公司副总裁的戴尔·多尔蒂(DaleDougherty)注意到,同所谓的“崩溃”迥然不同,互联网比其他任何时候都更重要,令人激动的新应用程序和网站正在以令人惊讶的规律性涌现出来。更重要的是,那些幸免于当初网络泡沫的公司,看起来有一些共同之处。那么会不会是互联网公司那场泡沫的破灭标志了互联网的一种转折,以至于呼吁“Web2.0”的行动有了意义?我们都认同这种观点,Web2.0会议由此诞生。2001年秋天互联网公司(dot-com)泡沫的破灭标志着互联网的一个转折点。许多人断定互联网被过分炒作,事实上网络泡沫和相继而来的股市大衰退看起来像是所有技术革命的共同特征。股市大衰退通常标志着蒸蒸日上的技术已经开始占领中央舞台。假冒者被驱逐,而真正成功的故事展示了它们的力量,同时人们开始理解了是什么将一个故事同另外一个区分开来。在那个会议之后的一年半的时间里,“Web2.0”一词已经深入人心,从Google上可以搜索到950万以上的链接。但是,对于Web2.0的含义仍存在极大的分歧,一些人将Web2.0贬低为毫无意义的一个行销炒作口号,而其他一些人则将之理解为一种新的理念。Web2.0是2003年之后互联网的热门概念之一,不过目前对什么是Web2.0并没有很严格的定义。一般来说Web2.0(也有人称之为互联网2.0)是相对Web1.0的新的一类互联网应用的统称。Web1.0的主要特点在于用户通过浏览器获取信息,Web2.0则更注重用户的交互作用,用户既是网站内容的消费者(浏览者),也是网站内容的制造者.

一、系统运行方案1.1开发与运行环境网站的开发和运行是环境都是:windows、Apache2.2.3、PHP5.2.0、MySQL.1.2开发工具数据库采用phpmyadmin或MySQL-Front执行数据库操作,网站界面框架采用Dreameaver8。此外还用到photoshop等图像处理软件制作图片界面。MySQL-Front操作界面:

二、可行性分析2.1技术分析在选择程序语言上,我们选择目前最为流行的开源脚本语开语言PHP,由于PHP效率高,且支持面向对象编程,适合大型项目的开发,相对于asp,效率远远高于前者,相对于jsp的复杂配置,php显得十分简单,比较.net,PHP可以支持多种操作系统平台,安全性不言而喻。数据库方面采用小巧且功能强大的mysql数据库,系统平台采用linux,更安全,更高效,配合apache服务器,能最大效率的发挥系 统的功能。2.2性能分析 网站的访问不限制时间,必须提供24小时正常访问。网站的页面要清新活泼。2.3市场分析、经济分析 每个人都可以在网上发表个人日志,可以在一些门户网站提供的博客,也可自己买空间和域名。

三、需求分析3.1需求分析的任务3.2项目分析个人日志及评论:可以随时的写一些个人的日志,有分类和评论管理。个人相册可以上传自己照片。

四、概要设计4.1系统功能模块图(见详细设计)4.2数据库设计图表名:class(文章分类表)列名类型NULL其他说明idInt(11)否主键,自动增加nameVarchar(5)否表名:info(文章表)列名类型说明其他IdInt(11)主键,自动增加UpidInt(11)回复哪个的id,默认0,是日志,不为0表示回复,upid是2时,即回复id为2的日志ClassInt(11)文章分类(class表中id)UsernameVarchar(16)用户名TitleVarchar(23)标题titmedate发布时间readInt(11)阅读量contentlongtext内容表名:photo列名类型说明其他idInt(10)timedatetime发布图片的时间titleVarchar(16)图片标题contentVarchar(83)图片简介imagesVarchar(16)图片地址表名:my_info(个人信息表)列名类型说明其他IdInt(10)主键()numInt(11)空间访问量nameVarchar(5)姓名sexVarchar(2)Age_yaerdateaddressVarchar(20)地址infotext个人简介qqVarchar(3)emailVarchar(30)photoVarchar(50)UserVarchar(20)用户名pwVarchar(36)密码

五、详细设计5.1用户界面设计。。5.2功能设计5.2.1公共部分Inc/Mysql.php<?phpclassmysql{functionmysql(){$this->server_username="root";$this->server_userpassword="";}///functionlink($database){if($database==""){ $this->database="blog"; }else{ $this->database=$database;}///if(@$conn=mysql_connect('localhost',$this->server_username,$this->server_userpassword)){ if(!mysql_select_db($this->database,$conn)){ echo"数据库连接错误!!!"; exit; } }else{ echo"服务器正在维护中……"; exit; } }///functionexecute($query){//执行sql语句 if($result=mysql_query($query)){ return$result; }else{ echo"sql语句执行错误!!!请重试!!!"; exit; }}///}///endclassmysql?>Inc/function.php<?phpclassmyfunction{/////////////////字符串转换////////// functionstr_to($str) { $str=str_replace(""," ",$str); $str=str_replace("<","<",$str); $str=str_replace(">",">",$str); $str=nl2br($str); return$str; }} ////////////////分页函数//////////////////////////// functionpage($query,$page,$add,$num_per_page){ $dd=newmysql; global$query; $dd->link(""); $page=$_GET[page]; if($page==""){ $page=1; } $aaa=$dd->execute($query); $num=mysql_num_rows($aaa); if($num==0){ $ye="无内容<br>"; } $page_num=ceil($num/$num_per_page); $page_up=$1; $page_down=$page+1; $ye="<ahref=?".$add."page=1>首页</a>  "; if($page>1){ $ye.="<ahref=?".$add."page=$page_up>上一页</a>  "; } For($i=1;$i<=$page_num;$i++){ $show=($i!=$page)?"<ahref=?".$add."page=".$i.">$i</a>":"<b>$i</b>"; $ye.=$show." "; } if($page!=$page_num){ $ye.="<ahref=?".$add."page=$page_down>下一页</a>  "; } $ye.="<ahref=?".$add."page=".$page_num.">尾页</a>"; $ye.="  第".$page."页,共".$page_num."页"; echo$ye; $page_jump=$num_per_page*($1); $query=$query."limit$page_jump,$num_per_page"; }?>删除日志:<?PHPrequire("link.php");$tag=$_GET['tag'];if($tag=="del"){ $id=$_GET['id']; $sql="deletefrominfowhereid='$id'"; $result=$aa->execute($sql); if($result){ echo"<ahref='log_list.php'>成功删除</a>"; exit(); }else{ echo"<ahref='javascript:history.go(-1)'>操作失败</a>"; exit(); } }?>更新日志:<?PHPrequire("link.php");$tag=$_GET['tag'];if($tag=="edit"){$id=$_POST['id'];$class=$_POST['type'];$title=$_POST['title'];$content=$_POST['content'];$sql="updateinfoset`class`='$class',`title`='$title',`content`='$content'where`id`='$id'";$aa->execute($sql);echo"<ahref='javascript:history.go(-2)'>成功操作,返回</a>";exit();}$id=$_GET['id'];$sql="select*frominfowhereid='$id'";$result=$aa->execute($sql);$rst=mysql_fetch_array($result);?>5.2.2日志发布系统程序描述:可以发布日志的类型,并根据类型发布文章,浏览者可以发布评论。流程:管理员进入管理员进入类型管理发布文章编辑文章分类无有管理评论详细代码设计类别管理、日志发布、日志列表、删除日志的关键代码:发布日志:<?PHPrequire("link.php");echo"查看表单post方式提交信息,其形式为数组:";print_r($_POST);echo"<br/>";$class=$_POST['type'];$title=$_POST['title'];$username=$_SESSION['admin_user'];$content=$_POST['content'];if($title==""){ echo"<ahref='javascript:history.go(-1)'>标题不能为空</a>"; exit();}if($content==""){ echo"<ahref='javascript:history.go(-1)'>内容不能为空</a>"; exit();}$sql="insertintoinfo(`title`,`class`,username,content,time)values('$title','$class','$username','$content',NOW())";$result=$aa->execute($sql);echo"<br>";//echo"查看sql语句:".$sql;echo"<br>";if($result){echo"<ahref='log.php'>成功添加,返回</a>";}else{echo"<ahref='javascript:history.go(-1)'>添加失败,返回</a>";}?>5.2.2图片上传功能效果图可以上传自己的相册程序流程图登录登录Photo.php?action=2上传页面提交表单上传成功把图片的地址写入数据库Photo.php?action=1列表页面Photo.php?action=3&id=数值列表页面编辑信息删除记录文件为空格式不正确上传图片管理员进入管理员进入发布图片编辑图片详细代码设计Photo.php?action=1,是图片显示列表。Photo.php?action=2,是添加图片。Photo.php?action=3&id=‘数据库查询的id值‘,是编辑图片的。这里把所有的操作都放在一个页面内。Photo.php?del=1,是删除的sql语句执行。Photo.php?edit=1,是编辑的的sql语句执行。Photo.php?add=1是添加的sql语句执行。“.php?”后面的一串字符是url传值,action=1,是把值“1”赋值给action变量,action=2,是把值“2”赋值给action这个变量。而多个值的传递是用“&”连接的。比如例如在程序中这样写<?PHP$caozuo=$_GET[‘action’];If($caozuo==’1’ Echo“输入的是”.$caozuo;}else{ Echo$caozuo.”->”.$_GET[‘action’];}?>输入“Photo.php?action=2”,那么程序将会执行else的语句“Echo$caozuo.”->”.$_GET[‘action’];”,即显示“2->2”,因为$caozuo和$_GET[‘action’]是等价的所以显示是两个2。如果输入的是输入“Photo.php?action=2”,则输出““输入的是输入网址:photo.php?action=2后,用$_GET[‘action’]方式把用url方式传值的action=2获的,即:“$action=$_GET[‘action’];”把“2”赋值给变量$action,也可以赋值给$tag或是其他的变量,这里为了好记,就把用获得变量值复制给$action.下面程序就对判断显示<?PHPif($action==2){?><formaction="?add=1"method="post"enctype="multipart/form-data"name="form2"id="form2"><tablewidth="100%"border="0"cellpadding="0"cellspacing="0"><tr><tdwidth="4%"> </td><tdwidth="57%">个人相册添加</td><tdwidth="26%"> </td><tdwidth="8%"> </td><tdwidth="5%"> </td></tr><tr><td>标题:</td><td><inputname="title"type="text"id="title"></td><td><br></td><td> </td><td> </td></tr><tr><td>内容:</td><td><textareaname="content"cols="60"rows="8"id="content"></textarea></td><td> </td><td> </td><td> </td></tr><tr><td> </td><td><inputname="file"type="file"class="submit"id="file"></td><td> </td><td> </td><td> </td></tr><tr><td> </td><td><inputname="Submit"type="submit"class="submit"value="提交"></td><td> </td><td> </td><td> </td></tr></table></form><?php}?>程序判断后会执行上面的,并显示出来。表单是<formname=’表单名’action="提交的到的地址"method="post/get两种方式选择一个"></form>。而要上传图片。则<formaction="?add=1"method="post"enctype="multipart/form-data"name="form2"id="form2"></form>即enctype="multipart/form-data",是必须添加的。表单中加上<inputname="file"type="file">,提交框。在这里选择图片点击提交后,根据action="?add=1"method="post",以post方式上传到”?add=1”<?PHPPrint_r($_POST);///这个是查看post方式上传的数组内容Print_r($_FILES);//这个是查看上传图片数组内容的信息?>用Print_r($_FILES),可以看到数组:Array([file]=>Array([name]=>1.jpg[type]=>image/pjpeg[tmp_name]=>E:\APMServ5.2.0\PHP\uploadtemp\php2E6.tmp[error]=>0[size]=>31678))即[file]为<inputname="file"type="file">的名称(name="file");[name]为原图片的名称;[type]为原图片的类型;tmp_name]系统提交到的临时文件;[size],文件的大小;[error]=>0,表示无错。下面就是处理刚才提交上传图片的代码:if($add==1){$title=$_POST[title]; ///获得表单中title的的值$content=$_POST[content];print_r($_FILES); ////输出上传图片的数组信息echo"<br>";//echo$_FILES['file']['type'];if($_FILES['file']['name']==""){echo"<ahref='javascript:history.go(-1)'>请选则上传图片,返回</a>";//echo"请选则上传图片";exit();} ///判断是否是jpg和gif类型的图片。如果是.doc或是.doc把扩展名改成.gif都不能上传。 if($_FILES['file']['type']=='image/pjpeg'or$_FILES['file']['type']=='image/gif'){ $save_path="../photo"; //设置保存路径,这是个相对路径。 @mkdir($save_path,0777); //设置目录的写入权限,赋值到最大。 $name_img=explode(".",$_FILES['file']['name']);////获取临时文件的扩展名,用explode把它原文件的名称以“.”分割成两个数组。$name_img[1]即是文件的扩展名例如“gif”或“jpg”. $newimgname=date("YmdHis").rand(1000,9999).".".$name_img[1];///上面是重新组合成新文件名;date("YmdHis")是当前日期;rand(1000,9999),四位的随机数。 //echo$newimgname; move_uploaded_file($_FILES['file']['tmp_name'],"../photo/".$newimgname); //上面用move_uploaded_file函数把电脑上的临时文件$_FILES['file']['tmp_name'],拷贝成网站"../photo/".$newimgname文件 $images="photo/".$newimgname;//赋值到$images,已被写入数据库。}else{ echo"图片格式不是jpg或gif"; exit();}5.2.3登录功能根据用户名和密码登录流程图用户表单用户表单数据库判断查询数据库成功登录存在否详细代码:表单代码:<formid="form1"name="form1"method="post"action="login.php?tag=ok"><tablewidth="100%"border="0"cellspacing="0"cellpadding="0"><tr><tdwidth="30%"height="22"> </td><tdwidth="70%"> </td></tr><tr><tdheight="22"> </td><td> </td></tr><tr><tdheight="22">用户名:</td><td><inputname="username"type="text"id="username"/></td></tr><tr><tdheight="22">密码:</td><td><inputname="pw"type="password"id="pw"/></td></tr><tr><tdheight="22"> </td><td><inputtype="submit"name="Submit"value="提交"/></td></tr></table></form>处理表单提交内容的代码:<?PHP@session_start();include("../inc/mysql.php");include("../inc/function.php");$aa=newmysql;$bb=newmyfunction;$aa->link("");$tag=$_GET['tag'];if($tag=="ok"){ $username=$_POST['username']; $pw=$_POST['pw']; $sql="select*from`my_info`where`user`='$username'and`pw`='$pw'"; echo$sql; $result=$aa->execute($sql); $num=mysql_num_rows($result); if($num==1){ $_SESSION['user_name']=$username; echo"<script>location.href='index.php'</script>"; }else{ echo"<script>location.href='../index.php'</script>"; }}?>@,是抑制程序错误信息的。Session_start(),是打开session。关于session的值是写在服务器上,我们根据用户名和密码核实是否就有一个人。如果数量是一则,就写入$_SESSION['user_name']=$username;,不是就跳回主页。而在后台管理的的页面就业判断$_SESSION['user_name']是否为空。退出代码是:<?PHP@session_start();$_SESSION['user_name']=""; echo"<script>location.href='index.php'</script>";?>这个样复制为空,$_SESSION['user_name']存放在服务器上,我们无法修改,安全性高。而cookies存在本机上,可以进行操控,所以建议用session判断是否登陆。5.4前台显示及模板技术<?phpinclude("inc/mysql.php");include("inc/function.php");include("inc/class.inc");include("inc/hanshu.php");$tmpl=newtemplet;$aa=newmysql;$bb=newmyfunction;$aa->link(""); include"lib.php"; $my=newmyclass(); $f=array("f1"=>"index"); $my->setfile($f); $my->setblock("f1","blog","blog_a");$blog_sql="select*frominfowhereupid='0'orderbyiddesclimit6";$blog_result=$aa->execute($blog_sql);while($rst=mysql_fetch_array($blog_result)){ $time_=$rst[time]; $title_=$rst[title]; $id_=$rst[id]; $content_=wordscut($rst[content],200); $read_=$rst[read]; $upid_=$rst[upid]; $v=array("time"=>$time_,"title"=>$title_,"id"=>$id_,"read"=>$read_,"upid"=>$upid_,"content"=>$content_); $my->setvars($v); $my->block_rep("blog","blog_a"); unset($v); }unset($rst);////个人资料$my->setblock("f1","myinfo","my_info");$info_sql="select*frommy_infowhere`id`='1'";$info_res=$aa->execute($info_sql);while($rst=mysql_fetch_array($info_res)){ $name_=$rst[name]; $sex_=$rst[sex]; $age_year_=$rst[age_year]; $info_=wordscut($rst[info],30); $qq_=$rst[qq]; $email_=$rst[email]; $v=array("name"=>$name_,"sex"=>$sex_,"info"=>$info_,"qq"=>$qq_,"email"=>$email_,"age_year"=>$age_year_); $my->setvars($v); $my->block_rep("myinfo","my_info"); unset($v); } unset($rst);/////个人资料结束////相册$my->setblock("f1","photo","myphoto");$photo0_sql="select*fromphotoorderbyiddesclimit0,1";$photo0_res=$aa->execute($photo0_sql);$rst0=mysql_fetch_array($photo0_res); $images_0=$rst0['images'];$photo1_sql="select*fromphotoorderbyiddesclimit1,1";$photo1_res=$aa->execute($photo1_sql);$rst1=mysql_fetch_array($photo1_res); $images_1=$rst1['images'];$photo2_sql="select*fromphotoorderbyiddesclimit2,1";$photo2_res=$aa->execute($photo2_sql);$rst2=mysql_fetch_array($photo2_res); $images_2=$rst2['images']; $images_title2=$rst2['title']; $images_title1=$rst1['title']; $images_title3=$rst3['title']; $v=array("images0"=>$images_0,"images1"=>$images_1,"images2"=>$images_2,"images_titile1"=>$images_title1,"images_titile2"=>$images_title2,"images_titile3"=>$images_title3); $my->setvars($v); $my->block_rep("photo","myphoto"); unset($v); unset($rst0); unset($rst1); unset($rst2);/////相册结束 $my->replace($f); $my->p($f); $ip=getenv('REMOTE_ADDR'); $jsh_sql="INSERTINTO`ip`(`id`,`time`,`ip`)VALUES('',NOW(),'$ip')"; $aa->execute($jsh_sql); $jsh_us_sql="select*frommy_infowherename='yzhxiang'"; $n=mysql_fetch_array($aa->execute($jsh_us_sql)); $num=$n[num]; $num=$num+1; $jsh_u_sql="UPDATE`my_info`SET`num`='$num'where`name`='yzhxiang'"; $aa->execute($jsh_u_sql);?>这里介绍写这主页文章例子,其他的所有前台显示的原理是和这个一样的。include("inc/mysql.php");/////数据库文件连接类include("inc/function.php");////自定义函数include("inc/class.inc"); ///模板类库include("inc/hanshu.php");///函数$tmpl=newtemplet;///把类templet,实例化给变量$tmpl$aa=newmysql;///把mysql类,实例化给变量$aa$bb=newmyfunction;$aa->link("");////连接数据库 include"lib.php";////调用模版类库 $my=newmyclass(); //实例化模版类库 $f=array("f1"=>"index");//在赋值权柄。即在template文件下找index.htm模板文件。 $my->setfile($f);///设置权柄。 $my->setblock("f1","blog","blog_a");///设置替换区域即找index.htm中间中的<!--Beginblog-->和<!--Endblog-->之间的内容,进行替换。//下面是个查询。$blog_sql="select*frominfowhereupid='0'orderbyiddesclimit6";$blog_result=$aa->execute($blog_sql);///用一个类的操作执行sql语句。while($rst=mysql_fetch_array($blog_result))///{ $time_=$rst[time]; $title_=$rst[title]; $id_=$rst[id]; $content_=wordscut($rst[content],200); $read_=$rst[read]; $upid_=$rst[upid]; $v=array("time"=>$time_,"title"=>$title_,"id"=>$id_,"read"=>$read_,"upid"=>$upid_,"content"=>$content_);///把以上变量赋值给$v,形成数组 $my->setvars($v); $my->block_rep("blog","blog_a");//上面把数组中的值替换index.htm中的<!--Beginblog-->和<!--Endblog-->之间的内容的相应变量。即{*read*}被read替换。{*content*}被content替换。等。 unset($v);///清空$v数组 }unset($rst);///清空$rst数组其他的机制都和这个一样。Mobanlizi.php具体点的例子:<?PHPinclude("inc/class.inc");$tmpl=newtemplet;include"lib.php";$my=newmyclass(); $f=array("f1"=>"wangye");///即网页wangye.htm $my->setfile($f); ///以上是公共信息 ////单个替换 $my->setblock("f1","tihuanquyu","tihuanquyu_"); $date=date("YmdHis"); $v=array("h_time"=>$date,"h_title"=>"标题","h_read"=>"阅读量","h_content"=>"内容"); $my->setvars($v); $my->block_rep("tihuanquyu","tihuanquyu_");////单个替换////循环替换 $my->setblock("f1","blog","blog_a");for($i=1;$i<=8;$i++){ $time_="bb_时间".$i; $title_="bb_标题".$i; $id_="bb_id".$i; $content_="bb_内容".$i; $read_="bb_阅读量".$i; $upid_="bb_回复id".$i; $v=array("time"=>$time_,"title"=>$title_,"id"=>$id_,"read"=>$read_,"upid"=>$upid_,"content"=>$content_); $my->setvars($v); $my->block_rep("blog","blog_a");///上面把数组中的值替换index.htm中的<!--Beginblog-->和<!--Endblog-->之间的内容的相应变量。即{*read*}被read替换。{*content*}被content替换。等。 unset($v); }unset($rst);////循环替换///以下是公共信息$my->replace($f); $my->p($f); ?>Template/Wangye.htm<html><head><title>测试</title></head><body><br>===============================<br/><!--Begintihuanquyu--><div><divclass="tit">{*h_time*}</div>\\\\{*h_title*}\\{*h_read*}\\{*h_content*}</div><!--Endtihuanquyu--><br><br/><br/><br/><br/><!--Beginblog--> <divclass="tit"><!--标题> <ahref="read.php?id={*id*}&upid=0"target="_blank"><fontstyle="font-size:16px;">{*title*}</font></a> </div> <divclass="date"><!--时间--><spanid="dArea">阅读{*read*}次  </span>    时间:{*time*}</div> <tablestyle="table-layout:fixed"><tr><td><divclass="cnt">{*content*}</div></td></tr></table><divclass="more">点击此处查看原文</div><divclass="line"> </div><!--Endblog--></body></html>

六、系统维护6.1系统测试的原则(1)测试工作应避免由原开发软件的个人或小组来承担(2)设计测试方案时,不仅要包括确定的输入数据,而且包括从系统功能出发预期的测试结果。(3)测试用例不仅要包括合理,有效的输入数据,还要包括无效的或不合理的输入数据。(4)不仅要检验程序是否做了该做的事,还要检查程序是否同时做了不该做的事。(5)保留测试用例,作为软件文档的组成部分。

七、讨论Ⅰphp上传功能Php上传很简单,用一个move_uploaded_file(),函数就可实现。Ⅱ面向对象的开发平时写一个函数<?PHPFunctioncar(){ Echo“这是个车”;}Car();?>我们在调用时就可以写:car(),然后输出“这是个车”,而我们用类的方式写,其程序如下:<?PHPClasscar{ FunctionShowcar(){ Echo“这是个车”; }}//调用$car=newcar;$car->showcar();?>然后调用则:先要把类实例化一下,$car=newcar;,这样实例化后,在调用,调用时,这样写:$car->showcar();,这样写后,即可以实现输出“这是个车”。其实也就是把类car用关键字new,实例化给变量$car(这个变量和随便写,只要不是关键字就可以)。Showcar(),在这里不叫函数,而叫做car类的方法或属性。Java调用方法时,是用“.”,而php是用“->”。这样$car->showcar()写就可以实现调用类的方法了。这举个例子。Classfood{ Functionshuiguo(){ Echo“水果”;}Functionshucai(){ Echo“蔬菜”;}Functionmy($id){ Echo“我要”.$id.“斤”.$this->shucai.“和”.$this->shuiguo;}}调用时写:<?PHP$shiwu=newfood;$shiwu->shuiguo(); ///将输出“水果”$shiwu->shucai(); ///将输出“蔬菜”$shiwu->my(3); ///输出“我要3斤蔬菜和水果”?>这里在类的内部调用了类的内部方法,这就用要用“$this”,而类外部的则需要实例化给一个变量(如,$car=newcar,$shiwu=newfood;)。本程序的连接数据库的就是用了一个类。Ⅱ模板技术Smarty模板技术Smarty的出现和其独特的思想可以说是让业界为之一震,它的模板编程和“编译”的概念带来了一场革命。Smarty将逻辑判断和循环,赋值,config配置文件等引入到模板中,可以说Smarty就是一个小小的解析器。这样的好处就是我们可以用一个更为通用的模板来实现表现层,不用将显示上的逻辑判断送到PHP的逻辑层中进行,也不用为了实现代码的分离而因一个小小的显示上的改变重新建一个模板。程序员所做的仅仅是提取、组织、处理好需要的数据,然后通过SmartyAssign到模板,这些数据怎样显示,显示多少,完全交由显示逻辑处理。这样,程序代码和HTML代码就可以更彻底的分离,不仅简化了工作复杂度,也更有利于分工协作。Smarty的另一个特性就是“编译”。接到request后,先判断是否是第一次请求该URL,如果是,将该URL所需模板文件“编译”成脚本,然后redirect;如果不是,则表示该模板已经编译过,可以马上redirect。这样除了第一次编译成本比较高之外,其他的访问省去了大量的parse()时间。Smarty还具有cache技术,对页面生成静态缓存,可以适应更为严格的运行要求[1]。Smarty模板引擎工作原理图如下(图1)所示:设置静态缓存设置静态缓存Php程序Smarty引擎已编译的模板输出静态html读取并解析模板文件模板改变时执行第一次图1:Smarty工作原理图另外,国外对Smarty这样一个Engine级别的系统也存在着很多讨论,有的认为作为一个模板,它提供的功能过于繁杂,PHP本身就是一种“模板”语言,在这样的解释性语言上再用另外一套标记嵌套一层解释性语言,简直是多余;另一种看法是PHP作为一种优秀的脚本语言,Smarty是一种更好的彻底分离逻辑层和表现层的思想,虽然它的“编译”同样可以归结为PHP语言的应用,却可以提供更方便的使用方法,何乐而不为[10]。作者更倾向于后一种观点,清晰的逻辑思路比起系统的一点开销,显然思路更为重要!

八、致谢 我的毕业设计工作是在陈峰老师指导下进行的。感谢陈峰同时我也感谢在三年中教过我的所有老师!感谢帮助我的所有同学!

九、附录httpHTTP是什么?当我们想浏览一个网站的时候,只要在浏览器的地址栏里输入网站的地址就可以了,例如,但是在浏览器的地址栏里面出现的却是:,你知道为什么会多出一个“http”吗?一、HTTP协议是什么我们在浏览器的地址栏里输入的网站地址叫做URL(UniformResourceLocator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。因此,在我们认识HTTP之前,有必要先弄清楚URL的组成,例如:/china/index.htm。它的含义如下:1.http://:代表超文本传输协议,通知服务器显示Web页,通常不用输入;2.www:代表一个Web(万维网)服务器;3./:这是装有网页的服务器的域名,或站点服务器的名称;4.China/:为该服务器上的子目录,就好像我们的文件夹;5.Index.htm:index.htm是文件夹中的一个HTML文件(网页)。我们知道,Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层(Applicationlayer),它包含所有高层的协议。高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。HTTP协议(HypertextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论