##一、實驗目的
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)安裝完成。圖示如下所示。




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,公眾號名稱為“豆豆咨詢”。掃描以下二維碼,關注“豆豆咨詢”。

技術QQ群名稱:豆豆咨詢,群號:625686304
微信公眾號名稱:豆豆咨詢,微信公眾號:douAsk
###彩蛋號:1207(在公眾號里輸入彩蛋號即可得到源碼)。