Reputation: 105
Actually I am trying to get the sub-domain URL using php. I write code below:
$sub_url = explode('.', $_SERVER['HTTP_HOST']);
$suburl = $sub_url[0];
For Example:
if sub domain URL is like my.example.com
the code above is giving me my
which is good but if there is no sub domain then my code will return example
which is not good.
I want anything before the first dot even www
but if there is nothing like if URL is example.com
then I want a blank value instead of example
.
Upvotes: 4
Views: 7195
Reputation: 56
You should notice that, there are also websites with second level domains, for example co.uk
, com.cn
. If you can make sure, that your code will not be used on such website, you can simple use the answer of DarthJDG
or check count($sub_url) > 2
. But if not, you need to check the domain name.
$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));
The list of second level domains in format of CSV from gavingmiller/second-level-domains github repository is used for the test, if the domain is a second level domain.
Upvotes: 0
Reputation: 16591
Here's a one-liner to get the subdomain:
$subdomain = join('.', explode('.', $_SERVER['HTTP_HOST'], -2))
explode
with the limit parameter of -2
will split the string on each dot, ignoring the last two elements. If there are two or fewer elements, it returns an empty array.
join
will assemble the resulting array back into a dot delimited string. In case you have multiple subdomains set, e.g. foo.bar.domain.com
will return foo.bar
.
If there is no subdomain, it will return an empty string.
Upvotes: 14
Reputation: 819
I'd assume you can just check the size of the array, assuming it was always the same size, if it was any larger you may run into problems.
$sub_url = explode('.', $_SERVER['HTTP_HOST']);
if (sizeof($sub_url) > 2) {
$suburl = $sub_url[0];
} else {
$suburl = null;
}
Upvotes: 1