diff --git a/application/admin/command/Install.php b/application/admin/command/Install.php index 82dd8c76..eba8d451 100644 --- a/application/admin/command/Install.php +++ b/application/admin/command/Install.php @@ -199,21 +199,34 @@ class Install extends Command // 后台入口文件 $adminFile = ROOT_PATH . 'public' . DS . 'admin.php'; - // 生成数据库Env配置文件 - $envFile = ROOT_PATH . '.env.sample'; - $envStr = @file_get_contents($envFile); + // 数据库配置文件 + $dbConfigFile = APP_PATH . 'database.php'; + $dbConfigText = @file_get_contents($dbConfigFile); $callback = function ($matches) use ($mysqlHostname, $mysqlHostport, $mysqlUsername, $mysqlPassword, $mysqlDatabase, $mysqlPrefix) { $field = "mysql" . ucfirst($matches[1]); $replace = $$field; return "{$matches[1]} = {$replace}" . PHP_EOL; }; - $envConf = preg_replace_callback('/(hostname|database|username|password|hostport|prefix)\s*=\s*(.*?)\n/', $callback, $envStr); + $dbConfigText = preg_replace_callback("/'(hostname|database|username|password|hostport|prefix)'(\s+)=>(\s+)Env::get\((.*)\)\,/", $callback, $config); - $result = @file_put_contents(ROOT_PATH . '.env', $envConf); + // 检测能否成功写入数据库配置 + $result = @file_put_contents($dbConfigFile, $dbConfigText); if (!$result) { throw new Exception(__('The current permissions are insufficient to write the file %s', '.env')); } + // 设置新的Token随机密钥key + $oldTokenKey = config('token.key'); + $newTokenKey = \fast\Random::alnum(32); + $coreConfigFile = CONF_PATH . 'config.php'; + $coreConfigText = @file_get_contents($coreConfigFile); + $coreConfigText = preg_replace("/'key'(\s+)=>(\s+)'{$oldTokenKey}'/", "'key'\$1=>\$2'{$newTokenKey}'", $coreConfigText); + + $result = @file_put_contents($coreConfigFile, $coreConfigText); + if (!$result) { + throw new Exception(__('The current permissions are insufficient to write the file %s', 'application/config.php')); + } + // 变更默认管理员密码 $adminPassword = $adminPassword ? $adminPassword : Random::alnum(8); $adminEmail = $adminEmail ? $adminEmail : "admin@admin.com"; @@ -237,8 +250,8 @@ class Install extends Command //修改站点名称 if ($siteName != config('site.name')) { $instance->name('config')->where('name', 'name')->update(['value' => $siteName]); - $configFile = CONF_PATH . 'extra' . DS . 'site.php'; - $config = include $configFile; + $siteConfigFile = CONF_PATH . 'extra' . DS . 'site.php'; + $siteConfig = include $siteConfigFile; $configList = $instance->name("config")->select(); foreach ($configList as $k => $value) { if (in_array($value['type'], ['selects', 'checkbox', 'images', 'files'])) { @@ -247,10 +260,10 @@ class Install extends Command if ($value['type'] == 'array') { $value['value'] = (array)json_decode($value['value'], true); } - $config[$value['name']] = $value['value']; + $siteConfig[$value['name']] = $value['value']; } - $config['name'] = $siteName; - file_put_contents($configFile, '