尝试使用 php 获取子域 URL
Trying to get subdomain URL using php
实际上我正在尝试使用 php 获取子域 URL。我在下面写代码:
$sub_url = explode('.', $_SERVER['HTTP_HOST']);
$suburl = $sub_url[0];
例如:
如果子域 URL 类似于 my.example.com
上面的代码给了我 my
这很好但是如果没有子域那么我的代码将 return example
这不好。
我想要第一个点之前的任何东西,甚至 www
,但是如果 URL 是 example.com
,那么我想要一个空白值而不是 example
。
我假设你可以检查数组的大小,假设它总是相同的大小,如果它更大你可能 运行 出问题。
$sub_url = explode('.', $_SERVER['HTTP_HOST']);
if (sizeof($sub_url) > 2) {
$suburl = $sub_url[0];
} else {
$suburl = null;
}
这是获取子域的单行代码:
$subdomain = join('.', explode('.', $_SERVER['HTTP_HOST'], -2))
explode
和限制参数 -2
将在每个点上拆分字符串,忽略最后两个元素。如果有两个或更少的元素,它 return 是一个空数组。
join
将 assemble 生成的数组变回点分隔的字符串。如果您设置了多个子域,例如foo.bar.domain.com
将 return foo.bar
.
如果没有子域,它将return一个空字符串。
你应该注意到,也有二级域名的网站,例如co.uk
、com.cn
。如果您能确定您的代码不会在此类网站上使用,您可以简单地使用 DarthJDG
的答案或检查 count($sub_url) > 2
。但如果不是,则需要检查域名。
$secondLevelDomainsList = str_getcsv(file_get_contents('https://raw.github.com/gavingmiller/second-level-domains/master/SLDs.csv'), PHP_EOL);
foreach($secondLevelDomainsList as &$item) {
list($tld, $stld) = str_getcsv($item, ",");
$item = $stld;
}
$urlParts = explode('.', $url);
$challenger = '.' . join('.', array_slice($urlParts, -2, 2, true));
$length = in_array($challenger, $secondLevelDomainsList) ? -3 : -2;
$subDomainName = join('.', array_slice($urlParts, 0, $length, true));
来自 gavingmiller/second-level-domains github 存储库的 CSV 格式的二级域列表用于测试,如果该域是二级域。
实际上我正在尝试使用 php 获取子域 URL。我在下面写代码:
$sub_url = explode('.', $_SERVER['HTTP_HOST']);
$suburl = $sub_url[0];
例如:
如果子域 URL 类似于 my.example.com
上面的代码给了我 my
这很好但是如果没有子域那么我的代码将 return example
这不好。
我想要第一个点之前的任何东西,甚至 www
,但是如果 URL 是 example.com
,那么我想要一个空白值而不是 example
。
我假设你可以检查数组的大小,假设它总是相同的大小,如果它更大你可能 运行 出问题。
$sub_url = explode('.', $_SERVER['HTTP_HOST']);
if (sizeof($sub_url) > 2) {
$suburl = $sub_url[0];
} else {
$suburl = null;
}
这是获取子域的单行代码:
$subdomain = join('.', explode('.', $_SERVER['HTTP_HOST'], -2))
explode
和限制参数 -2
将在每个点上拆分字符串,忽略最后两个元素。如果有两个或更少的元素,它 return 是一个空数组。
join
将 assemble 生成的数组变回点分隔的字符串。如果您设置了多个子域,例如foo.bar.domain.com
将 return foo.bar
.
如果没有子域,它将return一个空字符串。
你应该注意到,也有二级域名的网站,例如co.uk
、com.cn
。如果您能确定您的代码不会在此类网站上使用,您可以简单地使用 DarthJDG
的答案或检查 count($sub_url) > 2
。但如果不是,则需要检查域名。
$secondLevelDomainsList = str_getcsv(file_get_contents('https://raw.github.com/gavingmiller/second-level-domains/master/SLDs.csv'), PHP_EOL);
foreach($secondLevelDomainsList as &$item) {
list($tld, $stld) = str_getcsv($item, ",");
$item = $stld;
}
$urlParts = explode('.', $url);
$challenger = '.' . join('.', array_slice($urlParts, -2, 2, true));
$length = in_array($challenger, $secondLevelDomainsList) ? -3 : -2;
$subDomainName = join('.', array_slice($urlParts, 0, $length, true));
来自 gavingmiller/second-level-domains github 存储库的 CSV 格式的二级域列表用于测试,如果该域是二级域。