diff --git a/app/install/controller/Index.php b/app/install/controller/Index.php new file mode 100644 index 0000000..11d51a4 --- /dev/null +++ b/app/install/controller/Index.php @@ -0,0 +1,207 @@ +alert('已经成功安装了TaoLer社区系统,安装系统已锁定。如需重新安装,请删除根目录下的install.lock文件')"; + die(); + } + } + + //安装首页 + public function index() + { + Session::set('agre',true); + return View::fetch('agreement'); + } + + //test + public function test() + { + if(Session::pull('agre')){ + Session::set('cre',true); + return View::fetch('test'); + } else { + return 'error,请返回安装!'; + } + } + + //test + public function create(){ + if(Session::pull('cre')){ + Session::set('suc',true); + return View::fetch('create'); + } else { + return 'error,请返回安装!'; + } + } + + // 安装成功页面 + public function complete(){ + + if(Session::has('suc') != 'true'){ + return 'error,请返回安装!'; + } + + // 判断是否为post + if ($_SERVER['REQUEST_METHOD'] == 'POST') { + + $data = $_POST; + //var_dump($data); + if (!preg_match("/^[a-zA-Z]{1}([0-9a-zA-Z]|[._]){4,19}$/", $data['admin_user'])) { + die(""); + } + + if (!preg_match("/^[\@A-Za-z0-9\!\#\$\%\^\&\*\.\~]{6,22}$/", $data['admin_pass'])) { + die(""); + } + if ($data['admin_pass'] != $data['admin_pass2']) { + die(""); + + } + $_SESSION['adminusername'] = $data['admin_user']; + // 生成管理员 + $username = $data['admin_user']; + $create_time = time(); + $salt = substr(md5($create_time),-6); + $pass = md5(substr_replace(md5($data['admin_pass']),$salt,0,6)); + + + if ($data['DB_TYPE'] == 'mysql') { + + //数据库 + $db_s = << [ + 'mysql' => [ + // 数据库类型 + 'type' => 'mysql', + // 服务器地址 + 'hostname' => '{$data['DB_HOST']}', + // 数据库名 + 'database' => '{$data['DB_NAME']}', + // 用户名 + 'username' => '{$data['DB_USER']}', + // 密码 + 'password' => '{$data['DB_PWD']}', + // 端口 + 'hostport' => '{$data['DB_PORT']}', + // 数据库连接参数 + 'params' => [], + // 数据库编码默认采用utf8 + 'charset' => 'utf8', + // 数据库表前缀 + 'prefix' => '{$data['DB_PREFIX']}', + ], + ], +]; +php; + // 创建数据库链接配置文件 + + $fp = fopen('../app/install/config/database.php', "r+b"); + fputs($fp, $db_s); + fclose($fp); + + + $db = Db::connect('mysql'); + //var_dump($db); + $sql = 'CREATE DATABASE IF NOT EXISTS '.$data['DB_NAME'].' DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci'; + //$db->execute($sql); + + //创建数据表 + create_tables($db, $data['DB_PREFIX']); + + //管理员 + $table_admin = $data['DB_PREFIX'] . "admin"; + $table_user = $data['DB_PREFIX'] . "user"; + $sql_admin = "UPDATE $table_admin SET username = '{$username}', password = '{$pass}', status=1,create_time = '{$create_time}' WHERE id = 1"; + $sql_user = "UPDATE $table_user SET name = '{$username}', password = '{$pass}', status=1, auth=1, create_time = '{$create_time}' WHERE id = 1"; + $db->execute($sql_admin); + $db->execute($sql_user); + + Db::getConnection()->close(); + } + + $db_str = << [], + // 自动写入时间戳字段 + // true为自动识别类型 false关闭 + // 字符串则明确指定时间字段类型 支持 int timestamp datetime date + 'auto_timestamp' => true, + // 时间字段取出后的默认时间格式 + 'datetime_format' => 'Y-m-d H:i:s', + // 数据库连接配置信息 + 'connections' => [ + 'mysql' => [ + // 数据库类型 + 'type' => 'mysql', + // 服务器地址 + 'hostname' => '{$data['DB_HOST']}', + // 数据库名 + 'database' => '{$data['DB_NAME']}', + // 用户名 + 'username' => '{$data['DB_USER']}', + // 密码 + 'password' => '{$data['DB_PWD']}', + // 端口 + 'hostport' => '{$data['DB_PORT']}', + // 数据库连接参数 + 'params' => [], + // 数据库编码默认采用utf8 + 'charset' => 'utf8', + // 数据库表前缀 + 'prefix' => '{$data['DB_PREFIX']}', + // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) + 'deploy' => 0, + // 数据库读写是否分离 主从式有效 + 'rw_separate' => false, + // 读写分离后 主服务器数量 + 'master_num' => 1, + // 指定从服务器序号 + 'slave_no' => '', + // 是否严格检查字段是否存在 + 'fields_strict' => true, + // 是否需要断线重连 + 'break_reconnect' => false, + // 监听SQL + 'trigger_sql' => true, + // 开启字段缓存 + 'fields_cache' => false, + // 字段缓存路径 + 'schema_cache_path' => app()->getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR, + ], + ], +]; +php; + // 创建数据库链接配置文件 + + $fp = fopen('../config/database.php', "r+b"); + fwrite($fp, $db_str); + fclose($fp); + + file_put_contents('../install.lock', 'lock'); + Session::clear(); + return View::fetch('complete'); + } else { + return '安装失败'; + } + + } +} \ No newline at end of file