ThinkPHP

thinkphp5安装引导程序详解

2018-10-25  本文已影响4人  IT小池
一:导入安装引导程序

/Public/install/
把install放到自己项目的目录下;
里面重要的是mysql.sql 这个是数据库文件;
并且初始状态下;是没有install.lock文件的;

二:检测是否安装

thinkphp5框架下的入口文件 index.php ,加入如下判断

// 1.判断当前 php 版本
if (version_compare(PHP_VERSION,'5.6','<')) die('require PHP > 5.6');

// 2.判断是否安装
if (file_exists('./install') && !file_exists('./install/install.lock')){
    // 重定向到安装向导
    $url = $_SERVER['HTTP_HOST'].trim($_SERVER['SCRIPT_NAME'],'index.php').'install/index.php';
    header('Location:http://'.$url);
    die;
}
三:流程

首先;当访问index.php的时候;
会先走上面那段代码;判断/Public/install/install.lock文件是否存在;
如果不存在;那么表示还没安装;
则会重定向到/Public/install/index.php走安装程序;
当按照要求输入数据库的账号密码安装成功后;
会创建一个/Public/install/install.lock文件;
再访问入口文件的时候;就会跳过重定向;
同时会把输入的数据库账号密码写入到 /Application/Common/Conf/db.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('../../config/database.php', $db_str);
        @touch('./install.lock');
        require './success.html';
    }

}
上一篇 下一篇

猜你喜欢

热点阅读