60 lines
1.5 KiB
PHP
60 lines
1.5 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace app\common\service;
|
||
|
|
|
||
|
|
use app\admin\model\Domain as DomainModel;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 平台分配域名解析(支持多域名,一行一个)
|
||
|
|
*/
|
||
|
|
class SplitPlatformDomainService
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* 解析配置文本为合法根域名列表(去重、小写)
|
||
|
|
*
|
||
|
|
* @param string $raw 换行或逗号分隔的域名文本
|
||
|
|
* @return array<int, string>
|
||
|
|
*/
|
||
|
|
public static function parseList(string $raw): array
|
||
|
|
{
|
||
|
|
$raw = trim($raw);
|
||
|
|
if ($raw === '') {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
|
||
|
|
$parts = preg_split('/[\r\n,]+/', $raw) ?: [];
|
||
|
|
$domains = [];
|
||
|
|
foreach ($parts as $part) {
|
||
|
|
$domain = DomainModel::normalizeDomain(trim((string) $part));
|
||
|
|
if ($domain === '' || isset($domains[$domain])) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
if (!DomainModel::isValidRootDomain($domain)) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
$domains[$domain] = $domain;
|
||
|
|
}
|
||
|
|
|
||
|
|
return array_values($domains);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 将域名列表格式化为配置存储文本(一行一个)
|
||
|
|
*
|
||
|
|
* @param array<int, string> $domains
|
||
|
|
*/
|
||
|
|
public static function formatList(array $domains): string
|
||
|
|
{
|
||
|
|
$lines = [];
|
||
|
|
foreach ($domains as $domain) {
|
||
|
|
$domain = DomainModel::normalizeDomain((string) $domain);
|
||
|
|
if ($domain !== '' && DomainModel::isValidRootDomain($domain)) {
|
||
|
|
$lines[$domain] = $domain;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return implode("\n", array_values($lines));
|
||
|
|
}
|
||
|
|
}
|