美文网首页ThinkPHP
thinkphp5安装引导程序详解

thinkphp5安装引导程序详解

作者: IT小池 | 来源:发表于2018-10-25 17:56 被阅读4次
    一:导入安装引导程序

    /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';
        }
    
    }
    

    相关文章

      网友评论

        本文标题:thinkphp5安装引导程序详解

        本文链接:https://www.haomeiwen.com/subject/mwpctqtx.html