You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
283 lines
10 KiB
283 lines
10 KiB
<?php
|
|
/**
|
|
* [Laike System] Copyright (c) 2017-2020 laiketui.com
|
|
* Laike is not a free software, it under the license terms, visited http://www.laiketui.com/ for more details.
|
|
*/
|
|
|
|
define('WEB_PATH', str_replace('\\', "/", substr(dirname(__FILE__), 0, strrpos(dirname(__FILE__), 'install'))));
|
|
|
|
class step3Action extends Action
|
|
{
|
|
|
|
public function execute()
|
|
{
|
|
|
|
$request = $this->getContext()->getRequest();
|
|
$admin = $request->getParameter('admin');
|
|
$db = $request->getParameter('db');
|
|
$step = $this->getContext()->getStorage()->read('step');
|
|
|
|
if ($step == 2) {
|
|
header("Content-type: text/html;charset=utf-8");
|
|
echo "<script language='javascript'>" . "alert('环境检测没有通过,请调整环境后重试!');" . "location.href='index.php?action=step2';</script>";
|
|
return;
|
|
|
|
} else {
|
|
if (!is_array($admin) || empty($admin[0]) || empty($admin[1]) || empty($admin[3])) {
|
|
header("Content-type: text/html;charset=utf-8");
|
|
echo "<script language='javascript'>" . "alert('请填写完整管理员信息!');" . "location.href='index.php?action=step2';</script>";
|
|
return;
|
|
} else if ($admin[1] != $admin[2]) {
|
|
header("Content-type: text/html;charset=utf-8");
|
|
echo "<script language='javascript'>" . "alert('确认密码和密码不一致!');" . "location.href='index.php?action=step2';</script>";
|
|
return;
|
|
} else {
|
|
$info = (array)$admin;
|
|
list($info['username'], $info['password'], $info['repassword'], $info['email']) = $admin;
|
|
$this->getContext()->getStorage()->write('admin_info', $info);
|
|
}
|
|
|
|
if (!is_array($db) || empty($db[0]) || empty($db[1]) || empty($db[2]) || empty($db[3])) {
|
|
|
|
header("Content-type: text/html;charset=utf-8");
|
|
echo "<script language='javascript'>" . "alert('请填写完整的数据库配置!');" . "location.href='index.php?action=step2';</script>";
|
|
return;
|
|
|
|
} else {
|
|
|
|
$DB = (array)$db;
|
|
list($DB['type'], $DB['hostname'], $DB['database'], $DB['username'], $DB['password'], $DB['hostport'], $DB['prefix']) = $db;
|
|
$DB['params']["\PDO::ATTR_PERSISTENT "] = TRUE;
|
|
$DB['params']["\PDO::ATTR_CASE "] = \PDO::CASE_LOWER;
|
|
$this->getContext()->getStorage()->write('db_config', $DB);
|
|
$dbname = $DB['database'];
|
|
unset($db);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$url = 'index.php';
|
|
|
|
$request->setAttribute("url", $url);
|
|
//第一步创建数据库配置文件
|
|
$res_one = $this->create_database_tab();
|
|
//连接数据库
|
|
$db = $this->DB($DB['hostname'], $DB['username'], $DB['password'], $DB['hostport']);
|
|
//检测mysql版本
|
|
$mysql_server_info = $db->server_info;
|
|
$mysql_version = substr($mysql_server_info, 0, strrpos($mysql_server_info, "."));
|
|
|
|
if ($mysql_version < 5.5) {
|
|
$_SESSION['install_error'] = true;
|
|
header("Content-type: text/html;charset=utf-8");
|
|
echo "<script language='javascript'>alert('您的mysql版本低于5.5,请调整环境后重试!');location.href='index.php?action=step2';</script>";
|
|
return;
|
|
exit;
|
|
}
|
|
|
|
//第二步创建数据库
|
|
$this->create_database($DB['database'], $db);
|
|
//第三步创建数据表
|
|
$this->create_db_tables($DB['prefix'], $db, $DB['database']);
|
|
//最后添加管理员
|
|
$this->insert_member($db, $DB['prefix'], $info);
|
|
$_SESSION['install_step'] = '3';
|
|
|
|
return View::INPUT;
|
|
|
|
}
|
|
|
|
public function getDefaultView()
|
|
{
|
|
$request = $this->getContext()->getRequest();
|
|
$admin = $request->getParameter('admin');
|
|
if (!is_array($admin) || empty($admin[0]) || empty($admin[1]) || empty($admin[3])) {
|
|
|
|
header("Content-type: text/html;charset=utf-8");
|
|
echo "<script language='javascript'>" . "alert('请填写完整管理员信息!');" . "location.href='index.php?action=step2';</script>";
|
|
return;
|
|
|
|
}
|
|
return View::INPUT;
|
|
|
|
}
|
|
|
|
public function getRequestMethods()
|
|
{
|
|
return Request::POST;
|
|
|
|
}
|
|
|
|
public function test()
|
|
{
|
|
|
|
$request = $this->getContext()->getRequest();
|
|
// 获取输入的用户名
|
|
$servername = trim(strtolower($request->getParameter("localhost")));
|
|
$username = trim(strtolower($request->getParameter("user")));
|
|
$password = trim(strtolower($request->getParameter("password")));
|
|
$db = new mysqli($servername, $username, $password);
|
|
if ($db->connect_error) {
|
|
echo 0;
|
|
} else {
|
|
echo 1;
|
|
}
|
|
exit;
|
|
}
|
|
|
|
function show_log($msg, $class = '')
|
|
{
|
|
|
|
echo "<script type='text/javascript'>show_log('$msg', '$class')</script>";
|
|
@flush();
|
|
@ob_flush();
|
|
}
|
|
|
|
public function DB($servername, $username, $password, $hostport)
|
|
{
|
|
if ($hostport != '3306') {
|
|
$servername = $servername . ":" . $hostport;
|
|
}
|
|
$db = new mysqli($servername, $username, $password);
|
|
if ($db->connect_error) {
|
|
header("Content-type: text/html;charset=utf-8");
|
|
echo "<script language='javascript'>" . "alert('数据库连接失败,有可能密码错误或者数据库没有访问权限!');" . "location.href='index.php?action=step2';</script>";
|
|
return;
|
|
exit;
|
|
} else {
|
|
return $db;
|
|
}
|
|
|
|
}
|
|
|
|
//第一步创建数据库配置文件
|
|
|
|
function create_database_tab()
|
|
{
|
|
|
|
$db_config = $this->getContext()->getStorage()->read('db_config');
|
|
|
|
if (is_array($db_config)) {
|
|
//读取配置内容
|
|
unset($db_config['params']);
|
|
$conf = file_get_contents(WEB_PATH . 'data/database.tpl');
|
|
//替换配置项
|
|
foreach ($db_config as $name => $value) {
|
|
$conf = str_replace("[{$name}]", $value, $conf);
|
|
}
|
|
|
|
//创建数据库连接文件
|
|
if (file_put_contents(WEB_PATH . 'LKT/webapp/config/db_config.php', $conf)) {
|
|
file_put_contents(WEB_PATH . 'install/webapp/config/db_config.php', $conf);
|
|
return true;
|
|
} else {
|
|
$type = true;
|
|
$_SESSION['install_error'] = $type;
|
|
}
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//第二步创建数据库
|
|
|
|
public function create_database($database, $db)
|
|
{
|
|
|
|
$conn = $db;
|
|
// 检测连接
|
|
if ($conn->connect_error) {
|
|
die("连接失败: " . $conn->connect_error);
|
|
}
|
|
$sql = "CREATE DATABASE `$database` CHARACTER SET utf8 COLLATE utf8_general_ci ";
|
|
$r = $conn->query($sql);
|
|
$conn->query("set names utf8");
|
|
if ($r) {
|
|
return true;
|
|
} else {
|
|
$sqp_drop = "DROP database $database;";
|
|
$_drop = $conn->query($sqp_drop);
|
|
$rrr = $conn->query($sql);
|
|
return $rrr;
|
|
}
|
|
|
|
}
|
|
|
|
function create_db_tables($prefix = '', $db, $database)
|
|
{
|
|
|
|
//读取SQL文件
|
|
$sql_use = "use $database";
|
|
$db->query($sql_use);
|
|
$this->show_log(WEB_PATH . 'data/install.sql');
|
|
$sql = file_get_contents(WEB_PATH . 'data/install.sql');
|
|
$sql = str_replace("\r", "\n", $sql);
|
|
$sql = explode(";\n", $sql);
|
|
$orginal = "lkt_";
|
|
$sql = str_replace(" `{$orginal}", " `{$prefix}", $sql);
|
|
$tables_num = 0;
|
|
|
|
//开始安装
|
|
$this->show_log('开始安装数据库...');
|
|
foreach ($sql as $value) {
|
|
$value = trim($value);
|
|
if (empty($value))
|
|
continue;
|
|
if (substr($value, 0, 12) == 'CREATE TABLE') {
|
|
$name = preg_replace("/^CREATE TABLE `(\w+)` .*/s", "\\1", $value);
|
|
$tables_num++;
|
|
$msg = "创建数据表{$name}";
|
|
|
|
if (false !== $db->query($value)) {
|
|
$this->show_log($msg . '...成功');
|
|
} else {
|
|
$this->show_log($value . '...失败!');
|
|
}
|
|
|
|
} else {
|
|
$db->query($value);
|
|
}
|
|
|
|
}
|
|
|
|
//查询表的数量
|
|
$sql = "select count(*) as num from information_schema.tables where table_schema='$database'";
|
|
$obj = mysqli_query($db, $sql);
|
|
$database_tn = 0;
|
|
while ($row = mysqli_fetch_assoc($obj)) {
|
|
$database_tn = $row['num'];
|
|
}
|
|
|
|
if ($database_tn != $tables_num) {
|
|
header("Content-type: text/html;charset=utf-8");
|
|
echo "<script language='javascript'>" . "alert('创建数据失败!');" . "location.href='index.php?action=step2';</script>";
|
|
return;
|
|
exit;
|
|
}
|
|
|
|
}
|
|
|
|
function insert_member($db, $prefix, $admin)
|
|
{
|
|
|
|
$password = md5($admin['password']);
|
|
$sql = "INSERT INTO `lkt_admin` (`id`, `sid`, `name`, `password`, `admin_type`, `permission`, `role`, `status`, `add_date`, `recycle`, `nickname`, `birthday`, `sex`, `tel`, `token`, `ip`) VALUES ('1', '0', '{$admin['username']}', '{$password}', '1', NULL, '1', NULL, '2018-09-25 16:55:26', '0', 'lkt', '1936-2-1', '2', '86453408', '', '127.0.0.1')";
|
|
//执行sql
|
|
$db->query($sql);
|
|
$request = $this->getContext()->getRequest();
|
|
$url = $request->getParameter('url');
|
|
$domain = $url . '/LKT/index.php?module=api';
|
|
$uploadImg_domain = $url;
|
|
$sql = "update `{$prefix}config` set domain = '$domain', uploadImg_domain = '$uploadImg_domain',modify_date = CURRENT_TIMESTAMP where id = '1'";
|
|
$db->query($sql);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|