Browse Source

重构初始化安装的数据库配置处理

ox5a0b54 8 months ago
parent
commit
0fb49c1a9a
1 changed files with 15 additions and 9 deletions
  1. 15 9
      application/admin/command/Install.php

+ 15 - 9
application/admin/command/Install.php

@@ -214,22 +214,28 @@ class Install extends Command
         $adminFile = ROOT_PATH . 'public' . DS . 'admin.php';
 
         // 数据库配置文件
-        $dbConfigFile = APP_PATH . 'database.php';
-        $dbConfigText = @file_get_contents($dbConfigFile);
+        // 数据库配置文件
+        $envSampleFile = ROOT_PATH . '.env.sample';
+        $envFile = ROOT_PATH . '.env';
+        if (!file_exists($envFile)) {
+            if (!copy($envSampleFile, $envFile)) {
+                throw new Exception(__('Failed to copy %s to %s', '.env.sample', '.env'));
+            }
+        }
+
+        $envText = @file_get_contents($envFile);
+
         $callback = function ($matches) use ($mysqlHostname, $mysqlHostport, $mysqlUsername, $mysqlPassword, $mysqlDatabase, $mysqlPrefix) {
             $field = "mysql" . ucfirst($matches[1]);
             $replace = $$field;
-            if ($matches[1] == 'hostport' && $mysqlHostport == 3306) {
-                $replace = '';
-            }
-            return "'{$matches[1]}'{$matches[2]}=>{$matches[3]}Env::get('database.{$matches[1]}', '{$replace}'),";
+            return "{$matches[1]} = {$replace}";
         };
-        $dbConfigText = preg_replace_callback("/'(hostname|database|username|password|hostport|prefix)'(\s+)=>(\s+)Env::get\((.*)\)\,/", $callback, $dbConfigText);
+        $envText = preg_replace_callback("/(hostname|database|username|password|hostport|prefix)\s*=\s*(.*)/", $callback, $envText);
 
         // 检测能否成功写入数据库配置
-        $result = @file_put_contents($dbConfigFile, $dbConfigText);
+        $result = @file_put_contents($envFile, $envText);
         if (!$result) {
-            throw new Exception(__('The current permissions are insufficient to write the file %s', 'application/database.php'));
+            throw new Exception(__('The current permissions are insufficient to write the file %s', '.env'));
         }
 
         // 设置新的Token随机密钥key