thinkphp5 cms安装引导

1: 复制application/database.php 命名为database_default.php,并修改主要属性的值为可替换值,如:

return [
    // 数据库类型
    'type'            => 'mysql',
    // 服务器地址
    'hostname'        => 'default_host',
    // 数据库名
    'database'        => 'default_database',
    // 用户名
    'username'        => 'default_user',
    // 密码
    'password'        => 'default_password',
    // 端口
    'hostport'        => '',
    // 连接dsn
    'dsn'             => '',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
    'prefix'          => 'default_prefix',
    // 数据库调试模式
    'debug'           => false,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 0,
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => false,
    // 读写分离后 主服务器数量
    'master_num'      => 1,
    // 指定从服务器序号
    'slave_no'        => '',
    // 自动读取主库数据
    'read_master'     => false,
    // 是否严格检查字段是否存在
    'fields_strict'   => true,
    // 数据集返回类型
    'resultset_type'  => 'array',
    // 自动写入时间戳字段
    'auto_timestamp'  => false,
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
    // 是否需要进行SQL性能分析
    'sql_explain'     => false,
];

 

2:在public下建立install文件夹,并把sql导出一份,删除不必要的注释 信息,放到install目录下。

3: 在public的index.php文件中加入引导入口

// 安装入口
if (file_exists('./install') && !file_exists('./install/install.lock')) {
  header('Location: install/index.php');
  exit;
}

 

4:建立

index.php 功能代码

style.css 引导步骤样式

welcome.html 欢迎页面,并进行一定的说明

step1.html 数据库连接信息页面

step2.html 网站标题及管理员用户名和密码

success.html 安装成功页面

欢迎页面:

<div class="welcome">
    <h3>欢迎使用,在开始前,你需要准备以下信息:</h3>
    <ul>
      <li>1. 数据库名称</li>
      <li>2. 数据库用户名</li>
      <li>3. 数据库密码</li>
      <li>4. 数据库主机</li>
      <li>5. 数据库前缀</li>
      <li>6. 网站名称</li>
      <li>7. 后台登陆用户名</li>
      <li>8. 后台登陆密码</li>
      <li>9. public/install可写</li>
      <li>10. application/database_default.php可读</li>
      <li>11. application/database.php可写</li>
      <li>12. php版本大于7.0</li>
    </ul>
    <div class="next"><a href="./index.php?step=step1">开始安装</a></div>
  </div>

step1.html 

<div class="db-config">
    <h3>请在下方填写数据库连接信息,如果你不确定,请联系你的服务提供商。</h3>
    <form name="theform" action="./index.php?step=step2" method="post">
    <ul>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="dbname" value="" placeholder="数据库名称" />
        </div>
        <div class="desc-box">
          数据库的名称
        </div>
      </li>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="dbuser" value="" placeholder="数据库用户名" />
        </div>
        <div class="desc-box">
          数据库的用户名
        </div>
      </li>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="dbpassword" value="" placeholder="数据库密码" />
        </div>
        <div class="desc-box">
          数据库的密码
        </div>
      </li>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="dbhost" value="localhost" placeholder="数据库主机名" />
        </div>
        <div class="desc-box">
          数据库的主机名,如果localhost不能用,请联系你的服务提供商
        </div>
      </li>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="dbprefix" value="" placeholder="数据表前缀" />
        </div>
        <div class="desc-box">
          数据表的前缀
        </div>
      </li>
    </ul>
    <div class="next"><input type="submit" value="提 交" /></div>
  </form>
  </div>

step2.html

<div class="db-config">
    <h3>你需要填写一些基本信息,这些信息可以修改。</h3>
    <form name="theform" action="./index.php?step=step3" method="post">
    <ul>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="web_name" value="" placeholder="网站名称" />
        </div>
        <div class="desc-box">
          网站的名称
        </div>
      </li>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="web_user" value="" placeholder="用户名" />
        </div>
        <div class="desc-box">
          后台登陆的用户名
        </div>
      </li>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="web_password" value="" placeholder="密码" />
        </div>
        <div class="desc-box">
          后台登陆的密码
        </div>
      </li>
      <li class="clearfix">
        <div class="input-box">
          <input type="text" name="web_repassword" value="" placeholder="确认密码" />
        </div>
        <div class="desc-box">
          后台登陆的确认密码
        </div>
      </li>
    </ul>
    <div class="next"><input type="submit" value="提 交" /></div>
  </form>
  </div>

 

success.html

<div class="success">
    <h3>系统以安装完成,谢谢使用!</h3>
    <ul>
      <li><a href="../../../">回到首页</a></li>
      <li><a href="../../../backend/login">后台登陆</a></li>
    </ul>
  </div>

 主要功能:index.php

<?php
// 为防止直接输入进来,需要判断是否存在lock,存在则跳转到首页

if (file_exists('/install.lock')) {
  header('Location: ' . $_SERVER['SERVER_NAME']);
  die;
}

$action = $_GET['step'] ?? '';

/**
 * 版本确认
 */
if ($action == 'step1') {
  //获取php版本
  if (version_compare(PHP_VERSION, '7.0.0') < 0) {
    echo "<script> alert('PHP版本过低,需要php7.0以上版本');javascript:history.back(-1); </script>"; 
    exit;
  }
  // 数据库配置文件读写
  $database_file = str_replace('\public\install', '', __DIR__) . '/application/database.php';
  $default_database_file = str_replace('\public\install', '', __DIR__) . '/application/database_default.php';
  if (!is_readable($default_database_file) && !is_writeable($database_file)) {
    echo "<script> alert('数据库配置文件不可读写,请检查/config/database.php和/config/database_default.php的读写权限!');javascript:history.back(-1); </script>"; 
    exit;
  }
  // sql文件是否可读
  if (!is_readable('./install.sql')) {
    echo "<script> alert('数据库文件不可读,请检查/public/install/install.sql的读写权限!');javascript:history.back(-1); </script>"; 
    exit;
  }
  // lock写入权限
  if (!is_readable(dirname(__FILE__))) {
    echo "<script> alert('install.lock文件不可写,请检查/public/install的读写权限!');javascript:history.back(-1); </script>"; 
    exit;
  }
  // 数据库信息
  require('./step1.html');
} 
/**
 * 数据库连接信息
 */
else if ($action == 'step2') {
  //获取数据库连接信息
  $dbname = $_POST['dbname'];
  $dbuser = $_POST['dbuser'];
  $dbpassword = $_POST['dbpassword'];
  $dbhost = $_POST['dbhost'];
  $dbprefix = $_POST['dbprefix'];
  if (empty($dbname) && empty($dbuser) && empty($dbpassword) && empty($dbhost)) {
    echo "<script> alert('请将信息填写完整');javascript:history.back(-1); </script>"; 
    exit;
  }
  $res = create_db($dbname, $dbuser, $dbpassword, $dbhost, $dbprefix);
  if ($res['error'] == 1) {
    echo "<script> alert('".$res['msg']."');javascript:history.back(-1); </script>"; 
    exit;
  }
  // 网站信息
  require('./step2.html');
} 
/**
 * 网站信息
 */
else if ($action == 'step3') {
  $web_name = $_POST['web_name'];
  $web_user = $_POST['web_user'];
  $web_password = $_POST['web_password'];
  $web_repassword = $_POST['web_repassword'];
  if (empty($web_user) && empty($web_password) && empty($web_repassword)) {
    echo "<script> alert('请将信息填写完整');javascript:history.back(-1); </script>"; 
    exit;
  }
  // 密码是否一致
  if ($web_password != $web_repassword) {
    echo "<script> alert('2次输入的密码不一致');javascript:history.back(-1); </script>"; 
    exit;
  }
  $res = insert_base_info ($web_user, $web_password, $web_name);
  if ($res['error'] == 1) {
    echo "<script> alert('".$res['msg']."');javascript:history.back(-1); </script>"; 
    exit;
  }
  // 完成安装
  require('./success.html');
}
/**
 * 欢迎页面
 */
else {
  require('./welcome.html');
}


/**
 * 创建数据库并创建表
 */
function create_db($dbname, $dbuser, $dbpassword, $dbhost, $dbprefix) {
  $res = [
    'error' => 1,
    'msg' => '不可预期错误!'
  ];
  // 连接数据库
  $conn = @mysqli_connect($dbhost, $dbuser, $dbpassword);
  if (!$conn) {
    $res = [
      'error' => 1,
      'msg' => '数据库连接错误,请核对数据库连接信息!'
    ];
    return $res;
  } 
  // 读取sql文件
  if (!file_exists('./install.sql')) {
    $res = [
      'error' => 1,
      'msg' => '数据库文件不存在,请检查/public/install/install.sql是否存在!'
    ];
    return $res;
  }  
  // database配置文件是否可写
  $database_file = str_replace('\public\install', '', __DIR__) . '/application/database.php';
  $default_database_file = str_replace('\public\install', '', __DIR__) . '/application/database_default.php';

  $sql_file = @file_get_contents('./install.sql');
  // 设置数据库编码
  $conn->query("SET NAMES 'utf8'");
  //创建数据库
  $sql = "CREATE DATABASE IF NOT EXISTS ".$dbname." default character set utf8 COLLATE utf8_general_ci;";
  if (!$conn->query($sql)) {
    $res = [
      'error' => 1,
      'msg' => '数据库创建失败!'
    ];
    return $res;
  }
  //选择数据库
  $conn->select_db($dbname);

  //替换数据表前缀
  if(!empty($dbprefix)) {
    $sql_file = str_replace('ty_', $dbprefix, $sql_file);
  }
  // sql文件语句以;号结束,将每条语句分割到属猪
  $sql_arr = explode(';', $sql_file);
  foreach($sql_arr as $val) {
    // sql运行需要;号,所以还得加上
    $sql = $val . ';';
    $conn->query($sql);
  }
  // 关闭数据库
  mysqli_close($conn);

  // 修改database配置
  $database_config = @file_get_contents($default_database_file);
  // 替换配置
  $database_config = str_ireplace('default_host', $dbhost, $database_config);
  $database_config = str_ireplace('default_database', $dbname, $database_config);
  $database_config = str_ireplace('default_user', $dbuser, $database_config);
  $database_config = str_ireplace('default_password', $dbpassword, $database_config);
  if (!empty($dbprefix)) {
    $database_config = str_ireplace('default_prefix', $dbprefix, $database_config);
  } else {
    $database_config = str_ireplace('default_prefix', 'ty_', $database_config);
  }

  @file_put_contents($database_file, $database_config);
}

/**
 * 保存基本信息
 */
function insert_base_info ($web_user, $web_password, $web_name) {
  $database_file = str_replace('\public\install', '', __DIR__) . '/application/database.php';
  $database_config = require($database_file);
  $conn = @mysqli_connect($database_config['hostname'], $database_config['username'], $database_config['password'], $database_config['database']);
  if (!$conn) {
    $res = [
      'error' => 1,
      'msg' => '数据库连接错误,请核对数据库连接信息!'
    ];
    return $res;
  }
  $conn->query("SET NAMES 'utf8'");
  // 插入用户名和密码
  $password = password_hash($web_password, PASSWORD_DEFAULT);
  $sql = "INSERT INTO " . $database_config['prefix'] . "admins (name, password, create_time, update_time) VALUES('". $web_user ."', '". $password ."', ". time() .", ". time() .")";
  $conn->query($sql);
  if (!empty($web_name)) {
    $web_name = "管理系统";
  }
  $sql = "INSERT INTO ". $database_config['prefix'] . "configs (name) VALUES('".$web_name."')";
  $conn->query($sql);
  mysqli_close($conn);
  //写入lock
  $content = "系统名称". $web_name .",创建时间: " .date("Y-m-d H:i:s");
  $file = fopen("./install.lock","w");
  fwrite($file, $content);
  fclose($file);
}
?>

代码托管地址:https://github.com/tang05709/thinkphp5-admin

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值