author:咔咔
用了很多的自动安装数据库的项目了,今天也来写一个,只是一个简单版本,可以按照这个思路来创建适合自己项目的安装数据库
首先创建俩个文件
doAction.php用来写入数据库信息和创建数据库操作
dbconfig.php用来存储数据库信息
我们可以先看看数据库配置的写法,这里没有使用return
下来我们开始在obaction.php生成数据库配置信息
这里有三个函数,简单的解释一下
is_writable()判断文件是否可以写入
fopen()打开一个文件
fwrite()将信息写进一个打开的文件中
我们在看看有没有写入
通过fwrite()就可以生成$config的配置信息
下来就是连接数据库创建表
写sql文件
下来就开始将文件写入数据库
由于myqli_query()不支持多条同时插入,所以我们就需要使用循环来插入数据库
我们可以看看数据库
创建的数据库和自定义的表就ok了
我们就以install.lock为判断点,当这个文件存在时,就需要在进行安装,直接跳转到您已经安装过的页面
那么这个文件就在数据库导 成功之后创建
我们在安装一次,ok
这个功能最复杂的就是数据库的sql文件写入,其他的按照自己的项目需求来写即可
来一份源码:
$filename="dbconfig.php";
$fileLock = 'install.lock';
//配置文件内容
$config='<?php';
$config.="\n";
$config.='$host="'.$_POST["host"].'";';
$config.="\n";
$config.='$user="'.$_POST["username"].'";';
$config.="\n";
$config.='$pass="'.$_POST["password"].'";';
$config.="\n";
$config.='$dbname="'.$_POST["dbname"].'";';
$config.="\n";
$config.='$flag="'.$_POST["flag"].'";';
$config.="\n";
$config.="?>";
if(file_exists($fileLock)){
echo "<script>window.location='ok.php';</script>";
die;
}
if(is_writable($filename)){//检测是否有权限可写
$handle=fopen($filename, "w+");
fwrite($handle, $config);
// //连接数据库
include_once($filename);
if(!@$link=mysqli_connect($host,$user,$pass)){
echo "数据库连接失败,<a href='install.php'>返回设置</a>";
}else{
mysqli_query($link,"create database if not exists `$dbname`");
mysqli_select_db($link,$dbname);
//建表语句
$sql[]="CREATE TABLE IF NOT EXISTS `".$flag."access` (
`role_id` smallint(6) unsigned NOT NULL,
`node_id` smallint(6) unsigned NOT NULL,
`level` tinyint(1) NOT NULL,
`module` varchar(50) DEFAULT NULL,
KEY `groupId` (`role_id`),
KEY `nodeId` (`node_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8";
$sql[]="CREATE TABLE IF NOT EXISTS `".$flag."node` (
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`title` varchar(50) DEFAULT NULL,
`status` tinyint(1) DEFAULT '0',
`remark` varchar(255) DEFAULT NULL,
`sort` smallint(6) unsigned DEFAULT NULL,
`pid` smallint(6) unsigned NOT NULL,
`level` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `level` (`level`),
KEY `pid` (`pid`),
KEY `status` (`status`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8";
$sql[]="CREATE TABLE IF NOT EXISTS `".$flag."role` (
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`pid` smallint(6) DEFAULT NULL,
`status` tinyint(1) unsigned DEFAULT NULL,
`remark` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `pid` (`pid`),
KEY `status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8";
$sql[]="CREATE TABLE IF NOT EXISTS `".$flag."role_user` (
`role_id` mediumint(9) unsigned DEFAULT NULL,
`user_id` char(32) DEFAULT NULL,
KEY `group_id` (`role_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8";
foreach ($sql as $value) {
mysqli_query($link,$value);
}
echo "<script>window.location='index.php';</script>";
$myfile = fopen("install.lock", "w");
}
}else{
echo "您没有权限操作。";
}