ThinkPHP5.1实现CMS程序安装向导【内附漂亮的后台】
其实是图片、【尴尬的笑了】
最近在写一个小的CMS内容管理系统、因此我将如何实现CMS的安装向导和大家分享下。
在此之前、我看过很多类似的CMS管理系统、甚至有很多自称为通用的后台管理系统、各种类型、质量是参差不齐的、有的太过于简略【只有登录注册、权限管理等基础的东西】、有的太过于复杂【封装太严重】。首先我拿到这么个系统、对于小白或者刚入门的我来说、是不肯能扩展的、这辈子都不可能的【开玩笑】、研究别人的写法、我还得需要时间、但是前提你已经说了这是一个通用的管理系统、怎么通用呢?总结一点就是对于新手而言、没办法在你的基础上进行代码的修改【扩展】。
做得高端一点的呢、要收费、对于刚进入"码农"行业的小白程序猿来说、这完全是不可能的嘛、如果有可能就是被忽悠的、人家写得那么高端、你怎么去扩展、且还收费。说这么多、其实就想表达一些内容:
简单且可扩展性强、在不改动核心代码的基础之上做开发、让使用者【开发者】只专注于自己的逻辑业务的实现、在开发中、CMS值帮你提供一部分功能、且不影响你的逻辑业务。嗯、对就是这样......
进入正题、怎么实现这种引导安装呢?
我的思路是:
①、准备好你的SQL文件、
②、准备好你的安装向导页面【chou一点没关系】
③、准备一些输入框给客户、例如主机头、用户名、密码、端口等
③、验证输入是否合法、如果合法、则提交
④、加载SQL文件、执行一系列的字符串替换操作、例如替换表前缀
⑤、SQL准备好了、然后创建一个数据库、
⑥、导入SQL
⑦、根据客户输入的内容、修改配置文件
⑧、各种判断之后、如果全部成功、则说明安装成功、否则安装失败、重新来过。
嗯、就是这样、简单八步轻松搞定。
先上几张我的例示图片、再上代码吧
安装界面:

系统首页:

CMS安装的导向代码:
<?php
/**
* @Author 张超.
* @Copyright http://www.zhangchao.name
* @Email 416716328@qq.com
* @DateTime 2018/5/20 15:53
* @Yes-Admin 安装引导
*/
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
ini_set('display_errors', '1');
//定义目录分隔符
define("DS", DIRECTORY_SEPARATOR);
//定义项目目录
define('APP_PATH', dirname(dirname(__FILE__)) . DS . 'application' . DS);
//定义web根目录
define('WWW_ROOT', dirname(__FILE__) . DS);
//定义CMS名称
$sitename = "Yes-Admin CMS";
$lockFile = "." . DS . "install" . DS . "install.lock";
if (is_file($lockFile)) {
die("<sc
}
if ($_GET['c'] = 'start' && isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
//执行安装
$host = isset($_POST['hostname']) ? $_POST['hostname'] : '127.0.0.1';
$port = isset($_POST['port']) ? $_POST['port'] : '3306';
//判断是否在主机头后面加上了端口号
$hostData = explode(":", $host);
if (isset($hostData) && $hostData && is_array($hostData) && count($hostData) > 1) {
$host = $hostData[0];
$port = $hostData[1];
}
//mysql的账户相关
$mysqlUserName = isset($_POST['username']) ? $_POST['username'] : 'root';
$mysqlPassword = isset($_POST['password']) ? $_POST['password'] : 'root';
$mysqlDataba
$mysqlPreFix = isset($_POST['prefix']) ? $_POST['prefix'] : 'yes_';
$mysqlPreFix = rtrim($mysqlPreFix, "_") . "_";
$adminUserName = isset($_POST['adminUserName']) ? $_POST['adminUserName'] : 'admin';
$adminPassword = isset($_POST['adminPassword']) ? $_POST['adminPassword'] : '123456';
$rePassword = isset($_POST['rePassword']) ? $_POST['rePassword'] : '123456';
$email = isset($_POST['email']) ? $_POST['email'] : 'admin@admin.com';
//判断两次输入是否一致
if ($adminPassword != $rePassword) {
die("<sc
}
if (!preg_match("/^[\S]+$/", $adminPassword)) {
die("<sc
}
if (!preg_match("/^\w+$/", $adminUserName)) {
die("<sc
}
if (strlen($adminUserName) < 3 || strlen($adminUserName) > 12) {
die("<sc
}
if (strlen($adminPassword) < 5 || strlen($adminPassword) > 16) {
die("<sc
}
//检测能否读取安装文件
$sql = @file_get_contents(WWW_ROOT . DS . "install" . DS . 'yesadmin.sql');
if (!$sql) {
die("<sc
}
//替换表前缀
$sql = str_replace("`yes_", "`{$mysqlPreFix}", $sql);
//链接数据库
$pdo = new PDO("mysql:host={$host};port={$port}", $mysqlUserName, $mysqlPassword, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
));
// 连接数据库
$li
// 获取错误信息
$error = $li
if (!is_null($error)) {
// 转义防止和alert中的引号冲突
$error = addslashes($error);
die("<sc
}
// 设置字符集
$li
$li
// 创建数据库并选中
if (!$li
$create_sql = 'CREATE DATAba
$li
$li
}
$sqlArr = explode(';', $sql);
foreach ($sqlArr as $key => $val) {
if ($val) {
$li
}
}
$password = password_hash($adminPassword, PASSWORD_BCRYPT);
$result = $li
if (!$result) {
die("<sc
}
$databa
//替换数据库相关配置
$databa
$databa
$databa
$databa
$databa
$databa
$putConfig = @file_put_contents("../config" . DS . "databa
if (!$putConfig) {
die("<sc
}
$result = @file_put_contents($lockFile, 1);
if (!$putConfig) {
die("<sc
}
die("<sc
}
?>
<!doctype html>
<html>
<head>
<me
<me
<ti
<me
<li
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<st
html, body {
height: 100%;
background-image: url("./install/img/installbg.jpg");
background-size: cover;
}
</st
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-4 col-md-offset-4">
<div st
<img src="install/img/logo.jpg" st
</div>
</div>
<div class="col-md-4 col-md-offset-4"
st
<div id="cms-box">
<form class="form-horizontal" action="./install.php?c=start" method="post">
<p st
<div class="panel panel-default">
<div class="panel-heading">数据库相关设置</div>
<div class="panel-body">
<div class="form-group">
<label class="col-sm-2 control-label">主机地址</label>
<div class="col-sm-10">
<input type="text" name="hostname" class="form-control" placeholder="请输入主机地址、端口号可选">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">数据库名</label>
<div class="col-sm-10">
<input type="text" name="databa
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">用户名</label>
<div class="col-sm-10">
<input type="text" name="username" class="form-control" placeholder="请输入用户名">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="password" name="password" class="form-control" placeholder="请输入数据库密码">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">表前缀</label>
<div class="col-sm-10">
<input type="text" name="prefix" class="form-control" placeholder="请设置数据表前缀">
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">管理员账户相关设置</div>
<div class="panel-body">
<div class="form-group">
<label class="col-sm-2 control-label">用户名</label>
<div class="col-sm-10">
<input type="text" name="adminUserName" class="form-control" placeholder="请输入管理员账号">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Email</label>
<div class="col-sm-10">
<input type="text" name="email" class="form-control" placeholder="请输入管理员邮箱">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="password" name="adminPassword" class="form-control" placeholder="请输入密码">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">重复密码</label>
<div class="col-sm-10">
<input type="password" name="rePassword" class="form-control" placeholder="请再次输入密码">
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success" st
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<sc
<sc
<sc
$(function () {
$('body').ripples({
resolution: 512,
dropRadius: 20, //px
perturbance: 0.04,
});
});
</sc
</body>
</html>
个人技术交流QQ群:665781972
个人博客:https://www.zhangchao.name、百度文库资料可以免下载券下载【不是我告诉你的】
install.zip
( 3.45 KB 下载:405 次 )
