$value_reserve) { $regex = '/_ENV\[\'' . $key . '\'\].*?;/s'; $matches_new = []; preg_match($regex, $config_new, $matches_new); if (! isset($matches_new[0])) { echo '未找到配置项:' . $key . ' 未能在新版本 .config.php 文件中找到,可能已被更名或废弃。' . PHP_EOL; continue; } $matches_old = []; preg_match($regex, $config_old, $matches_old); $config_new = str_replace($matches_new[0], $matches_old[0], $config_new); $migrated[] = '_ENV[\'' . $key . '\']'; } //检查新增了哪些config $regex_new = '/_ENV\[\'.*?\'\]/s'; $matches_new_all = []; preg_match_all($regex_new, $config_new, $matches_new_all); $differences = array_diff($matches_new_all[0], $migrated); foreach ($differences as $difference) { //匹配注释 $regex_comment = '/' . $difference . '.*?;.*?(?=\n)/s'; $regex_comment = str_replace(['[', ']'], ['\[', '\]'], $regex_comment); $matches_comment = []; preg_match($regex_comment, $config_new, $matches_comment); $comment = ''; if (isset($matches_comment[0])) { $comment = $matches_comment[0]; $comment = substr( $comment, strpos( $comment, '//', strpos($comment, ';') //查找';'之后的第一个'//',然后substr其后面的comment ) + 2 ); } //裁去首尾 $difference = substr($difference, 15); $difference = substr($difference, 0, -2); echo '新增 .config.php 配置项:' . $difference . ':' . $comment . PHP_EOL; } echo '没有任何新 .config.php 配置项需要添加。' . PHP_EOL; file_put_contents(BASE_PATH . '/config/.config.php', $config_new); echo '迁移完成。' . PHP_EOL; // 更新 GeoLite2 数据库 if ($_ENV['maxmind_license_key'] !== '') { echo '正在更新 GeoLite2 数据库...' . PHP_EOL; $client = new Client([ 'license_key' => $_ENV['maxmind_license_key'], 'dir' => BASE_PATH . '/storage/', 'editions' => ['GeoLite2-City', 'GeoLite2-Country'], ]); try { $client->run(); echo '成功更新 GeoLite2 数据库。' . PHP_EOL; } catch (Exception $e) { echo '更新 GeoLite2 数据库失败。' . PHP_EOL; echo $e->getMessage() . PHP_EOL; } } } }