##一、实验目的
1、掌握ThinkPHP5.0引导自动创建MySQL数据库。
##二、实验内容
1、建立不同的ThinkPHP5.0不同页面,包括使用协议、环境监测、创建数据库等,设定创建MYSQL数据库的基本信息。
2、引导自动创建MYSQL数据库。
##三、实验步骤及过程
微信后台需要与数据库交互,那么首先需要建立数据库,本次实验我们通过ThinkPHP5来创建数据库,省去了直接对MYSQL管理的步骤。我们借鉴并移植白俊遥的开源项目thinkphp-bjyadmin(基于ThinkPHP3的博客系统),书写了基于ThinkPHP5.0的版本。
1、创建博客数据库的界面
我们下载开源项目文件,并修改了入口文件为admin.PHP,系统访问(http://127.0.0.1/ThinkPHP/admin.php),系统将显示博客安装向导,包括1)使用协议;2)环境监测;3)创建数据;4)安装完成。图示如下所示。
![](https://box.kancloud.cn/017329931c71b499995844630778f6c7_543x221.jpg)
![](https://box.kancloud.cn/eb7c2763653a9ed55b52b19878d524b4_545x311.jpg)
![](https://box.kancloud.cn/238d167107465eeb50bef64fdb4684df_545x236.jpg)
![](https://box.kancloud.cn/b76d50e550f2752ac57553982a4590f5_553x101.jpg)
2、关键代码解析
admin.php为入口文件,即通过(http://127.0.0.1/ThinkPHP/admin.php)访问网站。
1)admin.php文件
在admin.php文件中,主要完成数据库是否安装,这是通过检测/public/install/install.lock文件是否存在,如果存在,则说明已经安装成功,否则将进入引导安装页面,进入public/install/index.php文件,admin.php具体核心代码如下所示。
~~~
// 检测是否是新安装
if(file_exists("./Public/install") && !file_exists("./Public/install/install.lock")){
// 组装安装url
$url=$_SERVER['HTTP_HOST'].trim($_SERVER['SCRIPT_NAME'],'admin.php').'public/install/index.php';
header("Location:http://$url");
die;
}
~~~
2)public/install/index.php文件
该文件检测当前目录下是否有install.lock文件,如果没有这个文件,则进入安装引导页面;否则,提示已经安装过数据库,如果要重新安装,则需要删除/public/install/install.lock文件。
在后续的同意协议页面、监测环境页面、创建数据库页面,是通过$_GET()方法得到信息,然后进入相关的页面,即agreement.html、test.html、create.html和success.html文件。在create.html页面中,设置DB_HOST、DB_PORT、DB_USER和DB_PWD,通过post方法向public/install/index.php发送信息。public/install/index.php文件如下所示。
~~~
<?php
/**
* 安装向导
*/
header('Content-type:text/html;charset=utf-8');
// 检测是否安装过
if (file_exists('./install.lock')) {
echo '你已经安装过该系统,重新安装需要先删除./Public/install/install.lock 文件';
die;
}
// 同意协议页面
if(@!isset($_GET['c']) || @$_GET['c']=='agreement'){
require './agreement.html';
}
// 检测环境页面
if(@$_GET['c']=='test'){
require './test.html';
}
// 创建数据库页面
if(@$_GET['c']=='create'){
require './create.html';
}
// 安装成功页面
if(@$_GET['c']=='success'){
// 判断是否为post
if($_SERVER['REQUEST_METHOD']=='POST'){
$data=$_POST;
// 连接数据库
$link=@new mysqli("{$data['DB_HOST']}:{$data['DB_PORT']}",$data['DB_USER'],$data['DB_PWD']);
// 获取错误信息
$error=$link->connect_error;
if (!is_null($error)) {
// 转义防止和alert中的引号冲突
$error=addslashes($error);
die("<script>alert('数据库链接失败:$error');history.go(-1)</script>");
}
// 设置字符集
$link->query("SET NAMES 'utf8'");
$link->server_info>5.0 or die("<script>alert('请将您的mysql升级到5.0以上');history.go(-1)</script>");
// 创建数据库并选中
if(!$link->select_db($data['DB_NAME'])){
$create_sql='CREATE DATABASE IF NOT EXISTS '.$data['DB_NAME'].' DEFAULT CHARACTER SET utf8;';
$link->query($create_sql) or die('创建数据库失败');
$link->select_db($data['DB_NAME']);
}
// 导入sql数据并创建表
$bjyblog_str=file_get_contents('./bjyblog.sql');
$sql_array=preg_split("/;[\r\n]+/", str_replace('bjy_',$data['DB_PREFIX'],$bjyblog_str));
foreach ($sql_array as $k => $v) {
if (!empty($v)) {
$link->query($v);
}
}
$link->close();
$db_str=<<<php
<?php
return array(
//*************************************数据库设置*************************************
'DB_TYPE' => 'mysqli', // 数据库类型
'DB_HOST' => '{$data['DB_HOST']}', // 服务器地址
'DB_NAME' => '{$data['DB_NAME']}', // 数据库名
'DB_USER' => '{$data['DB_USER']}', // 用户名
'DB_PWD' => '{$data['DB_PWD']}', // 密码
'DB_PORT' => '{$data['DB_PORT']}', // 端口
'DB_PREFIX' => '{$data['DB_PREFIX']}', // 数据库表前缀
);
php;
// 创建数据库链接配置文件
file_put_contents('../../Application/Common/Conf/db.php', $db_str);
@touch('./install.lock');
require './success.html';
}
}
~~~
##四、技术服务
1、如果有疑问或者需要帮助,请加入QQ群(群名称:豆豆咨询,群号:625686304);或者公众号douAsk,公众号名称为“豆豆咨询”。扫描以下二维码,关注“豆豆咨询”。
![](https://box.kancloud.cn/541e0b698446c38ba398b183c361fe0d_430x430.jpg)
技术QQ群名称:豆豆咨询,群号:625686304
微信公众号名称:豆豆咨询,微信公众号:douAsk
###彩蛋号:1207(在公众号里输入彩蛋号即可得到源码)。