This question already has an answer here:
-
PHP Getting Domain Name From Subdomain
22 answers
I just need to get the domain name only form a url, (without com and everything else) example:
I have:
http://www.subdomain.domain1.com/
www.subdomain.domain2.net
subdomain.subdomain2.domain3.org/
http://domain4.com
I want to get with PHP:
domain1
domain2
domain3
domain4
parse_url()
with the "PHP_URL_HOST" argument
then explode() on the "." and extract the penultimate element of the resulting array
Building off of Shyam's answer and employing the concept suggested by Mark Baker to get the penultimate element of the namespace, I might suggest using a simpler regular expression that utilizes an anchored lookahead like the following:
function get_domain($url) {
$matches = [];
preg_match('/[\w-]+(?=(?:\.\w{2,6}){1,2}(?:\/|$))/', $url, $matches);
return $matches[0];
}
Matches
names
in https://www.names.co.uk/
domain1
in http://www.subdomain.domain1.com/
domain2
in www.subdomain.domain2.net
domain3
in subdomain.subdomain2.domain3.org/
domain4
in http://domain4.com
seventymm
in http://www.seventymm.co.in/browse/buy-home-furnishing-bed-sheets-pack-of-3/2456/1/v2034/0/0/1/2/1/0/go
Shyam's answer is the best. You just have to make sure all the the URLs start with HTTP and add strtok at the end(see below). Here's another version using an array:
function get_domain($url)
{
$urlobj = parse_url($url);
$domain = $urlobj['host'];
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs))
{
return $regs['domain'];
}
return false;
}
$urls = array(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
// Using foreach + strtok to remove .[domain extensions]
echo "<ul>";
foreach($urls as $url)
{
echo "<li>" . strtok(get_domain($url),'.') . "</li>";
}
echo "</ul>";
This will output:
- domain1
- domain2
- domain3
- domain4
P.S you can add strtok to the function as shown below:
function get_domain($url)
{
$urlobj = parse_url($url);
$domain = $urlobj['host'];
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs))
{
return strtok($regs['domain'], '.');
}
return false;
}
then:
$urls = array(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
// Using foreach
echo "<ul>";
foreach($urls as $url)
{
echo "<li>" . get_domain($url) . "</li>";
}
echo "</ul>";
Minus ul/li:
$urls = array(
'http://www.subdomain.domain1.com/',
'http://www.subdomain.domain2.net',
'http://subdomain.subdomain2.domain3.org/',
'http://domain4.com'
);
// Using foreach
foreach($urls as $url)
{
echo get_domain($url)."<br>";
}
Output:
domain1
domain2
domain3
domain4
To get the domain , you can use $_SERVER["SERVER_NAME"]
.
Explode the string with the subdomain you do not want to include.
Eg.
subdomain.domain.com
<?php
$add=explode('subdomain.',$_SERVER["SERVER_NAME"])[1];
// $add = domain.com
?>