$v){ if(!is_dir(ROOT_PATH.$v)){ $errInfo = '请先在'.$name."根目录下执行php composer.phar install 安装依赖"; break; } } } // 当前是POST请求 if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST'){ if($errInfo){ echo $errInfo; exit; } $err = ''; $APP_KEY = md5(time().mt_rand(1, 1000000)); $DB_HOST = isset($_POST['mysqlHost'])? trim($_POST['mysqlHost']) : '127.0.0.1'; $DB_PORT = isset($_POST['mysqlPort'])? trim($_POST['mysqlPort']) : 3306; $hostArr = explode(':', $DB_HOST); if(count($hostArr) > 1){ $DB_HOST = $hostArr[0]; $DB_PORT = $hostArr[1]; } $DB_USERNAME = isset($_POST['mysqlUsername'])? trim($_POST['mysqlUsername']) : 'proxypanel'; $DB_PASSWORD = isset($_POST['mysqlPassword'])? trim($_POST['mysqlPassword']) : 'proxypanel'; $DB_DATABASE = isset($_POST['mysqlDatabase'])? trim($_POST['mysqlDatabase']) : 'proxypanel'; try{ // 检测能否读取数据库文件 $sql = @file_get_contents(DB_PATH); if(!$sql){ throw new Exception("无法读取所需的".DB_PATH.",请检查是否有读权限"); } $config = @file_get_contents($exampleConfigFile); if(!$config){ throw new Exception("无法读取配置.env.example文件,请检查是否有读权限"); } $pdo = new PDO("mysql:host={$DB_HOST};port={$DB_PORT}", $DB_USERNAME, $DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ]); // 检测是否支持innodb存储引擎 $pdoStatement = $pdo->query("SHOW VARIABLES LIKE 'innodb_version'"); $result = $pdoStatement->fetch(); if(!$result){ throw new Exception("当前数据库不支持innodb存储引擎,请开启后再重新尝试安装"); } $pdo->query("CREATE DATABASE IF NOT EXISTS `{$DB_DATABASE}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"); $pdo->query("USE `{$DB_DATABASE}`"); $pdo->exec($sql); // 写入数据库配置到.env文件 $callback = function($matches) use ($APP_KEY, $DB_HOST, $DB_PORT, $DB_USERNAME, $DB_PASSWORD, $DB_DATABASE) { $field = $matches[1]; $replace = ${"{$field}"}; return "{$matches[1]}={$replace}".PHP_EOL; }; $config = preg_replace_callback("/(APP_KEY|DB_HOST|DB_DATABASE|DB_USERNAME|DB_PASSWORD|DB_PORT)=(.*)(\s+)/", $callback, $config); $result = @file_put_contents($ConfigFile, $config); if(!$result){ throw new Exception("无法写入数据库信息到.env文件,请检查是否有写权限"); } echo "success"; }catch(PDOException $e){ $err = $e->getMessage(); }catch(Exception $e){ $err = $e->getMessage(); } echo $err; exit; } ?>