基于LinuxApacheMysqlPHP的交友网站的实现.doc
目录1 引 言21.1 LAMP21.2 Linux操作系统与RedHat21.3 Apache服务器31.4 MySQL数据库41.5 PHP编程语言51.6VirtualBox62 Linux+Apache+MySQL+PHP的搭建过程72.1安装与配置72.2测试83 交友的设计与实现103.1功能介绍与设计思路103.1.1功能介绍103.1.2设计思路103.2数据库的设计103.3界面与功能实现11结束语15参考文献16附录171 引 言在linux系统下架设,最经典的组合就是apache+mysql+php,我做的这个图书管理就是采用的LAMP(Linux+Apache+Mysql+ PHP)这种架构技术,采用的Linux是RedHat 这种Linux发行版本,该RedHat运行于VirtualBox虚拟机。1.1 LAMPLAMP,即Linux+Apache+Mysql+PHP是一组常用来搭建动态或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的解决方案。1.2 Linux操作系统与RedHatLinux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux核,但实际上人们已经习惯了用Linux来形容整个基于Linux核,并且使用GNU 工程各种工具和数据库的操作系统。Linux得名于计算机业余爱好者Linus Torvalds。目前,Linux的发行版有很多,如Ubuntu,RedHat,Debian,Fedora等等。其中,RedHat是美国RedHat公司的产品,是相当成功的一个Linux发行版本,也是目前使用最多的Linux发行版本。Red Hat最早由Bob Young和Marc Ewing在1995年创建。原来的Red Hat版本早已停止技术支持,目前Red Hat的Linux分为两个系列,其中一个是由Red Hat公司提供收费技术支持和更新的Red Hat Enterprise Linux系列;另一个是由社区开发的免费的Fedora Core系列。Red Hat因其易于安装而闻名,在很大程度上减轻了用户安装程序的负担,其中RedHat提供的图形界面安装方式非常类似Windows系统的软件安装,这对于那些Windows用户而言,几乎可以像安装Windows系统一样轻松安装Red Hat发行套件。RedHat作为Linux的发行版本,开放源代码是与其他操作系统,如Windows等相比具有的先天优势,有利于全世界围技术工程师和技术人员共同开发。1.3 Apache服务器Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSA d服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的如Amazon、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以与它的可移植性等方面。Apache web服务器软件拥有以下特性:支持最新的 /1.1通信协议拥有简单而强有力的基于文件的配置过程支持通用网关接口支持基于IP和基于域名的虚拟主机支持多种方式的认证集成Perl处理模块集成代理服务器模块支持实时监视服务器状态和定制服务器日志支持服务器端包含指令(SSI)支持安全Socket层(SSL)提供用户会话过程的跟踪支持FastCGI通过第三方模块可以支持Java Servlets1.4 MySQL数据库MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型为了降低总体拥有成本而选择了MySQL作为数据库。与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。 1.5 PHP编程语言PHP,是英文超级文级预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用。 PHP 独特的语法混合了 C、Java、Perl 以与 PHP 自创的语法。它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以与操作系统。最重要的是PHP可以用C、C+进行程序的扩展!1.6 VirtualBoxOracle VirtualBox是由德国InnoTek软件公司出品的虚拟机器软件,现在则由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部份。它提供使用者在32位元或64位元的Windows、Solaris与Linux 操作系统上虚拟其它x86的操作系统。使用者可以在VirtualBox上安装并且执行Solaris、Windows、DOS、Linux、OS/2 Warp、OpenBSD与FreeBSD等系统作为客户端操作系统。 与同性质的VMware与Virtual PC比较下,VirtualBox独到之处包括远端桌面协定(RDP)、iSCSI与USB的支援,VirtualBox在客户机操作系统上已可以支援USB 2.0的硬件装置,不过要安装 virtualbox extension pack。2 Linux+Apache+MySQL+PHP的搭建过程我所做的交友是基于Linux+Apache+MySQL+PHP下的一个小型项目,它是在linux操作系统下开发完成的,所以在开始设计和实现该前,先要做好环境配置。需要安装好具linux核的其中一种操作系统,如redhat,在配置好的环境进行开发2.1安装与配置此次开发时间中,我是在虚拟机Oracle Virtual Box下安装redhat,对其进行配置开发。需按照以下步骤用yum命令安装Apache+php+Mysql:一更新系统核到最新:用yum -y update命令更新系统核到最新,二安装Apahce, PHP, Mysql, 以与php连接mysql库组件 用yum -y install d php mysql mysql-server php-mysql d-manual mod_ssl mod_perl mod_auth_mysql php-mcrypt php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc mysql-connector-odbc mysql-devel libdbi-dbd-mysql命令,一次性安装apache,php,mysql与其扩展。截图如下:图2-1 yum安装Apahce,PHP,Mysql与其扩展三启动服务配置用如下命令启动各项服务:/sbin/chkconfig d on 设置apache为自启动/sbin/chkconfig -add mysqld mysql服务/sbin/chkconfig mysqld on mysqld服务/sbin/service d start 自启动 d 服务/sbin/service mysqld start 自启动mysqld服务实验截图如下:图2-2 启动各项服务四设置mysql数据库root密码(截图如下)图2-3 设置mysql密码2.2测试在/var/zzj/html/目录下把编好的phpinfo.php文件放入,在浏览器下输入访问,截图如下:图2-4 测试图至此,环境搭建成功!3交友的设计与实现3.1功能介绍与设计思路3.1.1功能介绍设计一个,允许添加,查询,修改个人记录,根据用户的条件查询适合的交友对象,个人记录信息自拟其中,查询可按选择按名称和地域两种方式查找,若没选择查找方式或没输入搜索关键字,则提示“请选择搜索方式或正确输入”。修改个人信息在显示个人信息详情页面实现,所有的会员信息显示在文本框中,除userid外,都可按修改键修改,按恢复键可重置恢复到改动前的值(前提是没按修改键)。3.1.2设计思路本设计采用了面向对象的设计方法,定义了一个User的实体类,存放在entity.php的文件中,用来存取书籍的相关信息。同时定义了一个UserDao类,把所有关于数据库的操作方法放在其中,单独放在function.php文件中。当要用时,可通过include("文件名")来调用其中的方法。3.2数据库的设计因为该交友管理要求设计的功能简单,故只设计了一个users表:users表字段名字字段类型字段描述userIdInt(11) ID自动增长userNameVarchar(50)用户名userPasswdVarchar(50)用户密码sexVarchar(5)性别ageVarchar(50)addressVarchar(50)用户地址 professionVarchar(50)职业statusVarchar(50)状态(是否已婚)introductionVarchar(50)简介hobbyVarchar(50)兴趣爱好HeighVarchar(50)体型建表数据库代码如下:CREATE TABLE users ( Id int(11) NOT NULL AUTO_INCREMENT, introduction varchar(50) NOT NULL DEFAULT '', userName varchar(50) DEFAULT NULL, userPasswd varchar(50) NOT NULL DEFAULT '', sex varchar(50) DEFAULT NULL, age varchar(50) DEFAULT NULL, address varchar(50) DEFAULT NULL, profession varchar(50) DEFAULT NULL, status varchar(50) DEFAULT NULL, hobby varchar(50) DEFAULT NULL, heigh varchar(50) DEFAULT NULL, PRIMARY KEY (Id) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=gbk;3.3界面与功能实现设计一个,允许添加,查询,修改个人记录,根据用户的条件查询适合的交友对象,个人记录信息自拟代码见附录.首页:图3-2 首页若没选择搜索方式或没输入关键字,则提示“请选择搜索方式或正确输入”:图3-3 注册个人信心填写或修改:图3-3 个人信息页面用户列表:图4-4 用户列表信息结束语为期11周的Linux课程结束了,在课上以与此次设计中,我收获了许多,不仅在知识学习方面,而且在动手能力方面也有很大的收获。在整个设计过程中,曾出现了很多的难题,但在老师和同学的帮助下顺利解决了。总之,通过这个论文设计,我深刻体会到要做好一个完整的事情,需要有系统的思维方式和方法,对待要解决的问题,要耐心、要善于运用已有的资源来充实自己。同时我也深刻的认识到,在对待一个新事物时,一定要从整体考虑,完成一步之后再作下一步,这样才能更加有效。感罗奕老师和同学的大力支持,帮助与鼓励!参考文献1文东戈,昌立,王旭.Linux操作系统实用教程M.:清华大学,20112蔚泽.Linux系统安装和管理.:机械工业,20063黄丽娜,许杜春,彩可.Red Hat Linux 9 基础教程(第二版).:清华大学,2007 4 兵,吴煜黄.Linux使用教程.:中国水利水电,20045孟庆昌.UNIX教程电子工业,20056王俊伟.Linux标准教程.清华大学,2006附录-index.php (首页)<head><meta -equiv="Content-Type" content="text/html; charset=gb2312" /><title>同城交友 - 因为直接所以精彩</title><style type="text/css">import url(reg.css);</style><script type="text/javascript">function clickmenu(obj)alert("注册用户后,这里就属于你");obj.href=document.getElementById("reg").href;document.getElementById("reg").focus();window.moveTo(0,0);window.resizeTo(screen.availWidth,screen.availHeight); /窗口最大化</script></head><body><div id="header"><div id="menus"><a href="javascript:void(0)" onclick="clickmenu(this)">首页</a><a href="javascript:void(0)" onclick="clickmenu(this)">个人主页</a><a href="javascript:void(0)" onclick="clickmenu(this)">同城异性在线</a><a href="javascript:void(0)" onclick="clickmenu(this)">个人资料</a><a href="javascript:void(0)" onclick="clickmenu(this)">消息</a></div><div id="fa"><a href="javascript:void(0)" onclick="javascript:window.external.AddFavorite('', '同城交友 - 最安全、最便捷、最好的交友平台')" >加入收藏夹以备随时访问</a></div></div><div id="box"><div id="line1"></div><div id="line2"> <div class="left" style="font-size:14px">1、省钱省事 2、不用去夜场、酒吧、夜总会 3、安全合法</div> <div class="right"><span class="g">众多年轻男女在本站注册:</span>有幸认识你真好真好,与你相遇虽然迟了,还好,总算没错过。交汇点。多上帝,多你,给了我这个与你相遇的交汇点。<br> <div><a href="do.php?ac=480c4501caf1d48702a178830e76a7c7" id="reg"><img src="/reg/4.gif" border="0" /></a></div></div></div><div class="cleardiv"></div><div id="line3"></div></div><div id="box2" style="font-size:14px">如果你不孤独,请不要注册了!<br />如果你不寂寞,也不要注册了!<br />如果你不够开放,这里就不属于你!<br />如果你不够大方,这里也不属于你!<br /></div><div id="footer">同城交友<br /></div></body></html>-register.php (注册)$tagtemplates = 'apptagtemplatestemplate='.urlencode('<a href="url" target="_blank">subject</a>').'&'.'apptagtemplatesfieldssubject='.urlencode('日志标题').'&'.'apptagtemplatesfieldsuid='.urlencode('用户 ID').'&'.'apptagtemplatesfieldsusername='.urlencode('用户名').'&'.'apptagtemplatesfieldsdateline='.urlencode('日期').'&'.'apptagtemplatesfieldsspaceurl='.urlencode('空间地址').'&'.'apptagtemplatesfieldsurl='.urlencode('日志地址');$uri = $_SERVER'REQUEST_URI'?$_SERVER'REQUEST_URI':($_SERVER'PHP_SELF'?$_SERVER'PHP_SELF':$_SERVER'SCRIPT_NAME');$app_url = strtolower(substr($_SERVER'SERVER_PROTOCOL', 0, strpos($_SERVER'SERVER_PROTOCOL', '/').':/'.$_SERVER' _HOST'.preg_replace("/*install$/i", '', substr($uri, 0, strrpos($uri, '/install');$postdata = "m=app&a=add&ucfounder=&ucfounderpw=".urlencode($_POST'ucfounderpw')."&apptype=".urlencode('UCHOME')."&appname=".urlencode('个人家园')."&appurl=".urlencode($app_url)."&appip=&appcharset=".$_SC'charset'.'&appdbcharset='.$_SC'dbcharset'.'&release='.UC_CLIENT_RELEASE.'&'.$tagtemplates;$s = uc_fopen2($ucapi.'/index.php', 500, $postdata, '', 1, $ucip);if(empty($s) show_msg('UCenter用户中心无法连接'); elseif($s = '-1') show_msg('UCenter管理员密码不正确'); else $ucs = explode('|', $s);if(empty($ucs0) | empty($ucs1) show_msg('UCenter返回的数据出现问题,请参考:<br />'.shtmlspecialchars($s); else /处理成功$apphidden = ''/验证是否可以直接联接MySQL$link = mysql_connect($ucs2, $ucs4, $ucs5, 1);$connect = $link && mysql_select_db($ucs3, $link) ? 'mysql' : ''/返回foreach (array('key', 'appid', 'dbhost', 'dbname', 'dbuser', 'dbpw', 'dbcharset', 'dbtablepre', 'charset') as $key => $value) if($value = 'dbtablepre') $ucs$key = ''.$ucs3.'.'.$ucs$key;$apphidden .= "<input type="hidden" name="uc$value" value="".$ucs$key."" />"/置$apphidden .= "<input type="hidden" name="ucconnect" value="$connect" />"$apphidden .= "<input type="hidden" name="ucapi" value="$_POSTucapi" />"$apphidden .= "<input type="hidden" name="ucip" value="$ucip" />"show_header();print<<<END<form id="theform" method="post" action="$theurl"><table><tr><td>UCenter注册成功!当前程序ID标识为: $ucs1</td></tr></table><table class=button><tr><td>$apphidden<input type="submit" id="uc2submit" name="uc2submit" value="进入下一步"></td></tr></table><input type="hidden" name="formhash" value="$formhash"></form>-imformation.php (用户信息修改)<?php/*UCenter Home (C) 2007-2008 Comsenz Inc.$Id: profile.php 10925 2009-01-06 03:01:49Z zhengqingpeng $*/if(!defined('IN_UCHOME') exit('Access Denied');/判断用户是否全部设置了个人资料$nones = array();$profile_lang = array('name' => '','sex' => '性别','birthyear' => '生日(年)','birthmonth' => '生日(月)','birthday' => '生日(日)','blood' => '血型','marry' => '婚恋状态','birthprovince' => '家乡(省)','birthcity' => '家乡(市)','resideprovince' => '居住地(省)','residecity' => '居住地(市)');foreach (array('name','sex','birthyear','birthmonth','birthday','marry','birthprovince','birthcity','resideprovince','residecity') as $key) $value = trim($space$key);if(empty($value) $nones = $profile_lang$key;/站长扩展include_once(S_ROOT.'./data/data_profilefield.php');foreach ($_SGLOBAL'profilefield' as $field => $value) if($value'required' && empty($space'field_'.$field) $nones = $value'title'if(empty($nones) $task'done' = 1;/活动完成/自动找好友$findmaxnum = 10;$nouids = $space'friend'?($space'friend'.','.$space'uid'):$space'uid'/居住地好友$residelist = array();$warr = array();$warr = "sf.resideprovince='".addslashes($space'resideprovince')."'"$warr = "sf.residecity='".addslashes($space'residecity')."'"$query = $_SGLOBAL'db'->query("SELECT s.uid,s.username,s.name,s.namestatus FROM ".tname('spacefield')." sfLEFT JOIN ".tname('space')." s ON s.uid=sf.uidWHERE ".implode(' AND ', $warr)." AND sf.uid NOT IN ($nouids)LIMIT 0,$findmaxnum");while ($value = $_SGLOBAL'db'->fetch_array($query) realname_set($value'uid', $value'username', $value'name', $value'namestatus');$residelist = $value;/性别好友$sexlist = array();$warr = array();if(empty($space'marry') | $space'marry' < 2) /单身$warr = "sf.marry='1'"/单身if(empty($space'sex') | $space'sex' < 2) /男生$warr = "sf.sex='2'"/女生 else $warr = "sf.sex='1'"/男生$query = $_SGLOBAL'db'->query("SELECT s.uid,s.username,s.name,s.namestatus FROM ".tname('spacefield')." sfLEFT JOIN ".tname('space')." s ON s.uid=sf.uidWHERE ".implode(' AND ', $warr)." AND sf.uid NOT IN ($nouids)LIMIT 0,$findmaxnum");while ($value = $_SGLOBAL'db'->fetch_array($query) realname_set($value'uid', $value'username', $value'name', $value'namestatus');$sexlist = $value;realname_get();if($residelist) $task'result' .= '<p>为您找到同城的会员,赶快加为好友吧:</p>'$task'result' .= '<ul class="avatar_list">'foreach ($residelist as $key => $value) $task'result' .= '<li><div class="avatar48"><a href="space.php?uid='.$value'uid'.'" target="_blank"><img src="'.avatar($value'uid', 'small').'" class="avatar"></a></div><p><a href="space.php?uid='.$value'uid'.'" target="_blank">'.$_SN$value'uid'.'</a></p><p><a href="cp.php?ac=friend&op=add&uid='.$value'uid'.'" id="a_reside_friend_'.$key.'" onclick="ajaxmenu(event, this.id, 99999, '', -1)">加为好友</a></p></li>'$task'result' .= '</ul>'if($sexlist) $task'result' .= '<p>为您找到异性热门会员,赶快加为好友吧:</p>'$task'result' .= '<ul class="avatar_list">'foreach ($sexlist as $key => $value) $task'result' .= '<li><div class="avatar48"><a href="space.php?uid='.$value'uid'.'" target="_blank"><img src="'.avatar($value'uid', 'small').'" class="avatar"></a></div><p><a href="space.php?uid='.$value'uid'.'" target="_blank">'.$_SN$value'uid'.'</a></p><p><a href="cp.php?ac=friend&op=add&uid='.$value'uid'.'" id="a_sex_friend_'.$key.'" onclick="ajaxmenu(event, this.id, 99999, '', -1)">加为好友</a></p></li>'$task'result' .= '</ul>' else /活动完成向导$task'guide' = '<strong>您还有以下个人资料项需要补充完整:</strong><