前一段时间参加了计算机作品竞赛和大夏杯,软件形式的作品和实物不同,可能需要先配置,像用MySQL控制台建数据库这种事情最好不要让用户和评委干,只有再麻烦自己为他们做一个方便的安装程序
为了让评委方便的安装配置上交的作品,特地上网学习了这种通过运行一个Web程序来达到安装效果的方式,其中包括了建立数据库,建表,添加演示数据,将配置信息写入配置文件等,对用户可实现一键搞定安装配置,很方便
现以本博客系统的安装程序为例,对其分析,首先是流程图

install.php安装文件
PHP代码
- <?php
- function ErrorInfo() {
- return "<ul style='font-family:Courier;font-size:11px;background:#FDF5E6;color:#696969;margin:3px;padding:10px;border:1px solid #696969;'>Notice!: System Error<li style='font-family:Courier;list-style-type:none'>ErrInfo: ".mysql_error()."</li><li style='font-family:Courier;list-style-type:none'>ErrCode: ".mysql_errno()."</li><li style='font-family:Courier;list-style-type:none'>ErrURIs: ".$_SERVER['REQUEST_URI']."</li></ul>";
- }
- if (isset($_POST['install'])) { //提交创建
- echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
- $dbserver = $_POST['dbhost'].(isset($_POST['dbport']) ? ":".$_POST['dbport']:
- '');
- $conn = @mysql_connect($dbserver, $_POST['dbuser'], $_POST['dbpass'])or die
- (ErrorInfo()); //连接到MySQL Server
- if (!$conn) die(ErrorInfo());
- @mysql_query('set names gbk');
- if (isset($_POST['dropold']))
- @mysql_query("DROP DATABASE IF EXISTS `".$_POST['dbname']."` ;")or die
- (ErrorInfo());
- //按条件删除原DB
- echo '<div style="margin-left:300px;">';
- echo"<br />创建数据库 ...";
- @mysql_query("CREATE DATABASE IF NOT EXISTS `".$_POST['dbname'].
- "` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;")or die(ErrorInfo());
- //创建DB
- echo"OK!";
- $linktodb = @mysql_select_db($_POST['dbname'], $conn)or die(ErrorInfo());
- //打开数据库
- echo"<br />创建数据表 ...";
- if ($ftable = file_get_contents("table.sql")) { //fopen('table.sql', 'r')) { //创建表
- //while (!feof($ftable)) {
- $ftables = explode(";",$ftable);
- for($i = 0;$i < count($ftables);$i++) {
- if($ftables[$i] == "") continue;
- @mysql_query($ftables[$i]) or die(ErrorInfo());
- //echo fgets($ftable)."<br>";
- //}
- //echo $i.$ftables[$i]."<br>";
- echo"成功!";
- //fclose($ftable);
- }
- } else { //不能创建表或者创建有误
- echo"失败!";
- echo"<br />删除原有数据库 ...";
- @mysql_query("DROP DATABASE IF EXISTS ".$_POST['dbname']." ;")or die(ErrorInfo()); //删除所创建DB
- echo"OK!";
- exit();
- }
- if ($fp = fopen("../dbconnect.inc.php", 'w+')) {
- $configstr = "<?php\n//数据库信息\ndefine('DBHOST','".$dbserver."');\t\t//数据库服务器\ndefine('DBUSER','".$_POST['dbuser']."');\t\t\t\t//数据库用户\ndefine('DBPASS','".$_POST['dbpass']."');\t //数据库用户密码\ndefine('DBNAME','".$_POST['dbname']."');\t\t\t//数据库名称\n//连接到数据库\n\$conn = mysql_connect(DBHOST,DBUSER,DBPASS) or die('数据库连接错误');\nmysql_select_db(DBNAME) or die('数据库连接错误');\t\t//选择当前数据库\nmysql_query('set names gbk');\n?>";
- echo "<br />正在向数据库配置文件写入数据 <strong>../dbconnect.inc.php</strong> ";
- if(fwrite($fp,$configstr)) {
- echo "成功!";
- fclose($fp);
- } else {
- echo "失败!";
- fclose($fp);
- exit();
- }
- } else {
- echo "<br /><strong>数据库连接配置文件写入错误</strong> 你必须手动更改这个文件:<strong>../dbconnect.inc.php</strong>!";
- exit();
- }
- if(isset($_POST['demo'])) {
- echo "<br />创建测试数据...";
- if($fdemo=fopen('data.sql','rb')) //装载演示数据
- {
- while (!feof($fdemo))
- {
- @mysql_query(fgets($fdemo)) or die(ErrorInfo());
- }
- echo "成功!";
- fclose($fdemo);
- }
- else //装载失败
- {
- echo "失败!";
- exit();
- }
- }
- echo "<br />锁定 install.php ";
- if(rename('install.php','install.php.lock')) {
- echo "成功!";
- } else {
- echo "失败!";
- }
- echo "<br />安装成功! 请将整个'install'目录删除!<br /><br /><a href='../index.php'>进入系统首页</a>";
- echo '</div>';
- } else {
- //echo "<br /><strong>安装程序终端</strong> 原因可能是: 您输入的某些数据有误或是数据库连接错误,请检查数据后重新安装";
- //exit();
- //}
- //if(!isset($_POST['install'])) {
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transititonal.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style>
- body{margin-left:20%;}
- #db{width:550px;background:#66CCFF;border:1px solid #000;padding:10px;text-indent:80px;}
- p{margin:1px;padding:4px;font-family:Arial;}
- </style>
- <title>个人多功能博客系统MySQL数据库自动安装程序</title>
- <script language="javascript">
- function chkform(oForm) {
- if(oForm.dbhost.value == "") {
- alert("请输入数据库服务器!");
- return false;
- }
- if(oForm.dbuser.value == "") {
- alert("请输入数据库用户名!");
- return false;
- }
- if(oForm.dbpass.value == "") {
- alert("请输入数据库密码!");
- return false;
- }
- if(oForm.dbname.value == "") {
- alert("请输入数据库名!");
- return false;
- }
- return confirm("确定安装名为"+oForm.dbname.value+"的数据库吗?");
- }
- </script>
- </head>
- <body>
- <h3>个人多功能博客系统MySQL数据库自动安装程序</h3>
- <div id="db">
- <form action="<?php echo $_SERVER['REQUEST_URI'];?>" method="post" onsubmit="return chkform(this)">
- <h4>数据库信息:</h4>
- <p>数据库的服务器: <input type="text" name="dbhost" id="dbhost" value="localhost" /> *</p>
- <p>数据库通信端口: <input type="text" name="dbport" id="dbport" />(一般情况不用填)</p>
- <p>数据库用户名称: <input type="text" name="dbuser" id="dbuser" value="root" /> *</p>
- <p>数据库用户密码: <input type="password" name="dbpass" id="dbpass" /> *</p>
- <p>[以上数据请从数据库管理员处获取]</p>
- <p>需创建的数据库: <input type="text" name="dbname" id="dbname" value="blog"/></p>
- <p><input type="checkbox" name="dropold" id="dropold" />删除同名旧数据库(不可恢复!)</p>
- <p><input type="checkbox" name="demo" id="demo" checked="checked"/>加载演示数据</p>
- <p align="center"><input type="submit" name="install" id="install" value="开始安装" /></p>
- </form>
- </div>
- </body>
- </html>
- <?php } ?>
table.sql 用于建表
SQL代码
- DROP TABLE IF EXISTS `admin`;
- CREATE TABLE IF NOT EXISTS `admin` (
- `id` smallint(6) NOT NULL auto_increment,
- `user` varchar(255) NOT NULL default '',
- `password` varchar(255) NOT NULL default '',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='管理员帐号密码';
- DROP TABLE IF EXISTS `article`;
- CREATE TABLE IF NOT EXISTS `article` (
- `id` int(11) NOT NULL auto_increment,
- `title` varchar(255) NOT NULL default '',
- `content` mediumtext NOT NULL,
- `pubtime` datetime NOT NULL default '0000-00-00 00:00:00',
- `category_id` int(10) NOT NULL default '0',
- `click` int(11) NOT NULL default '0',
- `num_comment` int(11) NOT NULL default '0',
- `tag` varchar(100) default NULL,
- `have_attachment` varchar(255) NOT NULL default '0',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='博客文章';
- DROP TABLE IF EXISTS `attachment`;
- CREATE TABLE IF NOT EXISTS `attachment` (
- `id` int(11) NOT NULL auto_increment,
- `click` int(11) NOT NULL default '0',
- `filename` varchar(255) NOT NULL default '',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='附件';
- DROP TABLE IF EXISTS `category`;
- CREATE TABLE IF NOT EXISTS `category` (
- `id` int(10) NOT NULL auto_increment,
- `name` varchar(50) NOT NULL default '',
- `alt` varchar(50) NOT NULL default '',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='文章分类';
- DROP TABLE IF EXISTS `comment`;
- CREATE TABLE IF NOT EXISTS `comment` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(50) NOT NULL default '',
- `time` datetime NOT NULL default '0000-00-00 00:00:00',
- `content` mediumtext NOT NULL,
- `article_id` int(11) NOT NULL default '0',
- `url` varchar(200) default NULL,
- `exp` smallint(6) NOT NULL default '1',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='文章评论';
- DROP TABLE IF EXISTS `gbook`;
- CREATE TABLE IF NOT EXISTS `gbook` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(50) NOT NULL default '',
- `time` datetime NOT NULL default '0000-00-00 00:00:00',
- `content` mediumtext NOT NULL,
- `url` varchar(200) NOT NULL default '',
- `exp` smallint(6) NOT NULL default '0',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='留言板';
- DROP TABLE IF EXISTS `link`;
- CREATE TABLE IF NOT EXISTS `link` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(100) NOT NULL default '',
- `url` varchar(255) NOT NULL default '',
- `description` varchar(255) NOT NULL default '',
- `type` varchar(20) NOT NULL default '',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='友情链接';
- DROP TABLE IF EXISTS `mood`;
- CREATE TABLE IF NOT EXISTS `mood` (
- `id` smallint(6) NOT NULL auto_increment,
- `exp` smallint(6) NOT NULL default '0',
- `tip` varchar(255) NOT NULL default '',
- `exp_name` varchar(20) NOT NULL default '',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='最近心情';
- DROP TABLE IF EXISTS `video`;
- CREATE TABLE IF NOT EXISTS `video` (
- `id` int(11) NOT NULL auto_increment,
- `title` varchar(200) NOT NULL default '',
- `content` mediumtext NOT NULL,
- `pubtime` datetime NOT NULL default '0000-00-00 00:00:00',
- `click` int(11) NOT NULL default '0',
- `category_id` smallint(6) NOT NULL default '0',
- `star` smallint(6) NOT NULL default '0',
- `code` mediumtext NOT NULL,
- `num_comment` int(11) NOT NULL default '0',
- `vote_good` int(11) NOT NULL default '0',
- `vote_bad` int(11) NOT NULL default '0',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='博客视频';
- DROP TABLE IF EXISTS `video_cat`;
- CREATE TABLE IF NOT EXISTS `video_cat` (
- `id` smallint(6) NOT NULL auto_increment,
- `name` varchar(50) NOT NULL default '',
- `alt` varchar(50) NOT NULL default '',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='视频分类';
- DROP TABLE IF EXISTS `video_cmt`;
- CREATE TABLE IF NOT EXISTS `video_cmt` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(50) NOT NULL default '',
- `time` datetime NOT NULL default '0000-00-00 00:00:00',
- `content` mediumtext NOT NULL,
- `video_id` int(11) NOT NULL default '0',
- `url` varchar(200) NOT NULL default '',
- `exp` smallint(6) NOT NULL default '0',
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM COMMENT='视频评论';
data.sql 用于存放演示数据
SQL代码
- INSERT INTO `category` VALUES (1, 'Music', '音乐');
- INSERT INTO `category` VALUES (2, 'Activity', '事件记录');
- INSERT INTO `category` VALUES (3, 'Life', '生活');
- INSERT INTO `category` VALUES (4, 'Site News', '站点新闻');
- INSERT INTO `category` VALUES (5, 'Travel', '旅游记录');
- INSERT INTO `category` VALUES (6, 'PHP', 'PHP技术');
- INSERT INTO `category` VALUES (7, 'Web', 'Web技术');
- INSERT INTO `category` VALUES (8, 'Works', '作业和作品');
- INSERT INTO `comment` VALUES (1, 'xx', '2007-08-14 22:10:30', '本博第一大留言抢先坐了.....不谢不谢~~~<br />\r\n骗我和他们去倒垃圾然后带我去逛街…… 很搞笑啊.....', 1, 'http://', 1);
- INSERT INTO `comment` VALUES (2, 'HH姐', '2007-08-14 22:20:55', '超赞~~~~! 哈哈 打出这个词 才觉得 好词 一语双关嘛 哈哈 比上次那个成熟多了~ 进步青年!', 1, 'http://', 18);
- INSERT INTO `mood` (`id`,`exp`,`tip`,`exp_name`) VALUES (NULL,'3','今天来参加比赛','呵呵,紧张');
保存好这3个文件安装程序就可以运行了,只要执行一下install.php就可以完成新建数据库,插入表,插入数据等工作,十分方便,而在运行完安装程序后应该提示用户删除install.php,以免重复安装


把《问题求解与程序设计》强退了
Large
Middle
Small
Attachment:
views(2229)
view comments(4)
add comment

Comments:
[URL]http://monw3c.blogbus.com[/URL] 前端开发,web开发,web developer,页面重构,交互设计,用户体验,网站优化运营
[URL]http://monw3c.blogbus.com/c1515984[/URL]前端开发,web开发,web developer,页面重构,交互设计,用户体验,网站优化运营
http://monw3c.blogbus.com 前端开发,web开发,web developer,页面重构,交互设计,用户体验,网站优化运营
[URL=http://monw3c.blogbus.com]前端开发,web开发,web developer,页面重构,交互设计,用户体验,网站优化运营[/URL]