214 lines
7.2 KiB
PHP
214 lines
7.2 KiB
PHP
|
<?php
|
|||
|
|
|||
|
define('INSTALL_PATH', str_replace('\\', '/', dirname(__FILE__)));//安装文件路径
|
|||
|
define('ROOT_PATH', str_replace('\\', '/', dirname(INSTALL_PATH)));//项目路径
|
|||
|
require_once(INSTALL_PATH."/install.common.php");
|
|||
|
|
|||
|
$check = $_POST['check'];
|
|||
|
$dbhost = $_POST['dbhost'];
|
|||
|
$dbport = $_POST['dbport'];
|
|||
|
$dbuser = $_POST['dbuser'];
|
|||
|
$dbpwd = $_POST['dbpwd'];
|
|||
|
if($check == "conn"){//数据库连接
|
|||
|
$con = connDb($dbhost, $dbuser, $dbpwd, $dbport);
|
|||
|
if($con){
|
|||
|
echo 'true';
|
|||
|
}else{
|
|||
|
echo 'false';
|
|||
|
}
|
|||
|
exit();
|
|||
|
}elseif ($check == "db"){//数据库名称
|
|||
|
$conn = connDb($dbhost, $dbuser, $dbpwd, $dbport);
|
|||
|
if($conn == null){
|
|||
|
echo 'conn';
|
|||
|
}else{
|
|||
|
try {
|
|||
|
$dbname = $_POST['dbname'];
|
|||
|
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|||
|
$conn->exec("use `".$dbname."`");
|
|||
|
echo 'false';
|
|||
|
} catch (Exception $e) {
|
|||
|
echo "true";
|
|||
|
}
|
|||
|
}
|
|||
|
exit();
|
|||
|
}elseif ($check == "cu"){//检查用户权限
|
|||
|
|
|||
|
$conn = connDb($dbhost, $dbuser, $dbpwd, $dbport);
|
|||
|
if($conn == null){
|
|||
|
echo 'conn';
|
|||
|
}else{
|
|||
|
try {
|
|||
|
$stmt = $conn->query("SHOW GRANTS");
|
|||
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|||
|
$cu = "false";
|
|||
|
foreach ($rows as $val){
|
|||
|
if($cu == "false"){
|
|||
|
foreach ($val as $vall){
|
|||
|
$value = get_between($vall,"GRANT", "ON");
|
|||
|
$value = trim($value);
|
|||
|
$allDb = trim(get_between($vall,"ON", "TO"));
|
|||
|
if($value == "ALL PRIVILEGES"){
|
|||
|
if($allDb == "*.*"){
|
|||
|
$cu = "true";
|
|||
|
break;
|
|||
|
}
|
|||
|
}else{
|
|||
|
$valArr = explode(",", $value);
|
|||
|
if(in_array("CREATE", $valArr) && in_array("DROP", $valArr) && in_array("PROCESS", $valArr)
|
|||
|
&& in_array("SELECT", $valArr) && in_array("INSERT", $valArr) && in_array("UPDATE", $valArr)
|
|||
|
&& in_array("DELETE", $valArr) && in_array("TABLES", $valArr) && in_array("LOCK", $valArr)
|
|||
|
&& in_array("ALTER", $valArr) && in_array("INDEX", $valArr) && in_array("TABLES", $valArr)
|
|||
|
){
|
|||
|
if($allDb == "*.*"){
|
|||
|
$cu = "true";
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
echo $cu;
|
|||
|
} catch (Exception $e) {
|
|||
|
echo "false";
|
|||
|
}
|
|||
|
}
|
|||
|
exit();
|
|||
|
|
|||
|
}elseif ($check == "install_struct"){//安装结构
|
|||
|
$dbname = $_POST['dbname'];
|
|||
|
$my_website = $_POST['my_website'];
|
|||
|
$email = $_POST['email'];
|
|||
|
$domain = $_POST['domain'];
|
|||
|
$username = $_POST['username'];
|
|||
|
$password = $_POST['password'];
|
|||
|
$url_prefix = $_POST['url_prefix'];
|
|||
|
|
|||
|
$pattern = '/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,}$/';
|
|||
|
if (!preg_match($pattern,$password)){
|
|||
|
echo 'pwd';
|
|||
|
exit();
|
|||
|
}
|
|||
|
$password = xn_encrypt($password);
|
|||
|
$pdo = connDb($dbhost, $dbuser, $dbpwd, $dbport);
|
|||
|
if($pdo == null){
|
|||
|
echo 'conn';
|
|||
|
exit();
|
|||
|
}
|
|||
|
// 查询数据库
|
|||
|
$res = $pdo->query('show Databases');
|
|||
|
// 遍历所有数据库,存入数组
|
|||
|
$dbnameArr = [];
|
|||
|
foreach ($res->fetchAll(PDO::FETCH_ASSOC) as $row) {
|
|||
|
$dbnameArr[] = $row['Database'];
|
|||
|
}
|
|||
|
// 检查数据库是否存在,没有则创建数据库
|
|||
|
if (!in_array(trim($dbname), $dbnameArr)) {
|
|||
|
$pdo->query("SET NAMES utf8"); // 设置数据库编码
|
|||
|
$pdo->query("SET FOREIGN_KEY_CHECKS = 0");
|
|||
|
if (!$pdo->exec("CREATE DATABASE `$dbname`")) {
|
|||
|
echo "create";
|
|||
|
exit();
|
|||
|
}
|
|||
|
}
|
|||
|
try{
|
|||
|
// 数据库创建完成,开始连接
|
|||
|
$pdo->query("USE `$dbname`");
|
|||
|
//创建表结构
|
|||
|
$sql_struct = file_get_contents(INSTALL_PATH."/data/install_struct.php");
|
|||
|
$f = $pdo->exec(trim($sql_struct));
|
|||
|
ob_flush();
|
|||
|
flush();
|
|||
|
// 结束缓存区
|
|||
|
ob_end_flush();
|
|||
|
$pdo = null;
|
|||
|
if($f==0){
|
|||
|
exit("true");
|
|||
|
}else{
|
|||
|
exit("false");
|
|||
|
}
|
|||
|
}catch (Exception $e){
|
|||
|
exit("false");
|
|||
|
}
|
|||
|
|
|||
|
}elseif ($check == "install_data"){//安装数据
|
|||
|
$dbname = $_POST['dbname'];
|
|||
|
$my_website = $_POST['my_website'];
|
|||
|
$email = $_POST['email'];
|
|||
|
$domain = $_POST['domain'];
|
|||
|
$username = $_POST['username'];
|
|||
|
$password = $_POST['password'];
|
|||
|
$password = xn_encrypt($password);
|
|||
|
$url_prefix = $_POST['url_prefix'];
|
|||
|
$data_method = $_POST['data_method'];
|
|||
|
|
|||
|
$pdo = connDb($dbhost, $dbuser, $dbpwd, $dbport);
|
|||
|
if($pdo == null){
|
|||
|
echo 'conn';
|
|||
|
exit();
|
|||
|
}
|
|||
|
try{
|
|||
|
// 数据库创建完成,开始连接
|
|||
|
$pdo->query("USE `$dbname`");
|
|||
|
//保存数据库信息
|
|||
|
$phpPath = ROOT_PATH."/data/";
|
|||
|
$filename = "dbconfig.php";
|
|||
|
$saveData = require_once($phpPath.$filename);
|
|||
|
$saveData['hostname'] = $dbhost;
|
|||
|
$saveData['database'] = $dbname;
|
|||
|
$saveData['username'] = $dbuser;
|
|||
|
$saveData['password'] = $dbpwd;
|
|||
|
$saveData['hostport'] = $dbport;
|
|||
|
set_php_arr($phpPath, $filename, $saveData);
|
|||
|
ob_flush();
|
|||
|
flush();
|
|||
|
//导入默认数据
|
|||
|
if($data_method == 2){
|
|||
|
$sql_data = file_get_contents(INSTALL_PATH."/data/pure_install_data.php");
|
|||
|
}else{
|
|||
|
$sql_data = file_get_contents(INSTALL_PATH."/data/install_data.php");
|
|||
|
}
|
|||
|
//将SQL大件内容被照分隔待进行分割
|
|||
|
$sqls = explode( ");\n",$sql_data);
|
|||
|
// 遍历并执行每条8L语句
|
|||
|
foreach ($sqls as $sql){
|
|||
|
//执行sql语句,并捕获发生的异常
|
|||
|
if(empty($sql)){
|
|||
|
continue;
|
|||
|
}
|
|||
|
try{
|
|||
|
if(end_with($sql, ";")){
|
|||
|
$eSql = trim($sql);
|
|||
|
}else{
|
|||
|
$eSql = trim($sql).")";
|
|||
|
}
|
|||
|
$pdo->exec($eSql);
|
|||
|
}catch (PDOException $e){
|
|||
|
exit("false".$e->getMessage());
|
|||
|
}
|
|||
|
}
|
|||
|
// $fd = $pdo->exec(trim($sql_data));
|
|||
|
ob_flush();
|
|||
|
flush();
|
|||
|
//修改基本信息
|
|||
|
$stmt = $pdo->query("select id from {$saveData['prefix']}basic limit 1");
|
|||
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|||
|
if(sizeof($rows) > 0){
|
|||
|
$row = $rows[0];
|
|||
|
$upSql = "UPDATE `{$saveData['prefix']}basic` SET `url_prefix` = '{$url_prefix}', `url` = '{$domain}', `name` = '{$my_website}' WHERE `id` = {$row['id']}";
|
|||
|
$pdo->exec($upSql);
|
|||
|
}
|
|||
|
//修改用户信息
|
|||
|
$upSql = "UPDATE `{$saveData['prefix']}admin` SET `username` = '{$username}', `password` = '{$password}', `email` = '{$email}' WHERE `id` = 1";
|
|||
|
$pdo->exec($upSql);
|
|||
|
// 结束缓存区
|
|||
|
ob_end_flush();
|
|||
|
$pdo = null;
|
|||
|
exit("true");
|
|||
|
}catch (PDOException $e){
|
|||
|
exit("false".$e->getMessage());
|
|||
|
}
|
|||
|
}
|
|||
|
exit("false");
|