Reputation: 955
say someone enters a URL like this:
http://i.imgur.com/a/b/c?query=value&query2=value
And I want to return: imgur.com
not i.imgur.com
This is code I have right now
$sourceUrl = parse_url($url);
$sourceUrl = $sourceUrl['host'];
But this returns i.imgur.com
Upvotes: 42
Views: 94231
Reputation: 154
Check Simaple Code You can get host, subdomain, domain, extension
$urls = array("https://www.face.com","www.asdasd.asd","sasdas.com/asdas","sdfsdf.sdf","https://app.abcdlink.com/user/test/");
Function :-
function getDomainname($a)
{
$r = "(?P<host>(?:(?P<subdomain>[\w\.]+)\.)?" . "(?P<domain>\w+\.(?P<extension>\w+)))";
$r = "!$r!";// Delimiters
preg_match($r, $a, $out);
// if you need only domain then return $out['domain'];
// if you need only host then return $out['host'];
// if you need only subdomain then return $out['subdomain'];
// if you need only extension then return $out['extension'];
// Full Data array
return $out;
}
$urls = array_map('getDomainname', $urls);
OR
function getsingaldomainHost($a)
{
$a = (substr($a, 0, 7) == "http://" || substr($a, 0, 8) == "https://") ? $a : 'http://' . $a;
$r = "/(?P<host>(?:(?P<subdomain>[a-z0-9][a-z0-9\-]{0,63}\.[a-z0-9]{0,62}))?(?P<domain>[a-z0-9][a-z0-9\-]{0,63}\.[a-z0-9]{0,62})(?P<extension>[a-z0-9][a-z0-9\-]{0,63}\.[a-z\.]{0,61}))$/i";
$pieces = parse_url($a);
if (isset($pieces['host'])) {
$domain = substr($pieces['host'], 0, 4) == "www." ? $pieces['host'] : 'www.' . $pieces['host'];
} else {
$domain = $pieces['path'];
}
if (preg_match($r, $domain, $regs)) {
return substr($regs['host'], 0, 4) == "www." ? substr($regs['host'], 4) : $regs['host'];
} else {
if ($rr == 1) {
return false;
} else {
return $a;
}
}
}
$urls = array_map('getsingaldomainHost', $urls);
Upvotes: 0
Reputation: 172
The code below should be perfect for the job.
function get_domain($url){
$charge = explode('/', $url);
$charge = $charge[2]; //assuming that the url starts with http:// or https://
return $charge;
}
echo get_domain('http://www.example.com/example.php');
Upvotes: 2
Reputation: 846
Check the code below, it should do the job fine.
<?php
function get_domain($url)
{
$pieces = parse_url($url);
$domain = isset($pieces['host']) ? $pieces['host'] : $pieces['path'];
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;
}
print get_domain("http://mail.somedomain.co.uk"); // outputs 'somedomain.co.uk'
?>
Upvotes: 83
Reputation: 455
I have found a very useful library using publicsuffix.org, PHP Domain Parser is a Public Suffix List based domain parser implemented in PHP.
https://github.com/jeremykendall/php-domain-parser
<?php
// this will do the job
require_once '../vendor/autoload.php';
$pslManager = new Pdp\PublicSuffixListManager();
$parser = new Pdp\Parser($pslManager->getList());
var_dump($parser->getRegistrableDomain('www.scottwills.co.uk'));
?>
string(16) "scottwills.co.uk"
Upvotes: 4
Reputation: 4335
You need package that using Public Suffix List. Yes, you can use string functions arround parse_url() or regex, but they will produce incorrect result in complex URLs.
I recomend TLDExtract for domain parsing, here is sample code:
$url = 'http://i.imgur.com/a/b/c?query=value&query2=value';
parse_url($url, PHP_URL_HOST); // will return 'i.imgur.com'
$extract = new LayerShifter\TLDExtract\Extract();
$result = $extract->parse($url);
$result->getFullHost(); // will return 'i.imgur.com'
$result->getSubdomain(); // will return 'i'
$result->getRegistrableDomain(); // will return 'imgur.com'
$result->getSuffix(); // will return 'com'
Upvotes: 8
Reputation: 15
If you only want the domain name, try the following:
$domain = $_SERVER['SERVER_NAME'];
echo $domain;
Upvotes: -5
Reputation: 13
use this:
$uri = "$_SERVER[REQUEST_URI]";<br>
print($uri);
Example:
http://exemple.com/?directory<br>
Result:
/?diretory
The command get the directory and not domain.
Upvotes: -5
Reputation: 264
if(substr_count($original_url, 'http://')) {
if(substr_count($original_url, 'www.')) {
// url style would be 'http://www.abc.xxx/page?param' or http://www.abc.xxx.xx/page?param
// extract 'abc'
$temp = explode('.', $original_url);
$store_url = $temp[1];
// now
// $temp[2] = xxx or xxx/page?param
// $temp[3] = null or xx/page?param
//if ($temp[3] == null) { // then we are sure that $temp[2]== "xxx/page?param"
if(sizeof($temp) > 3) {
// extract "xxx" from "xxx/page?param" and append to store url so it will be "abc.xxx"
$temp = explode('/',$temp[2]);
$store_url .= '.'.$temp[0];
}
else {
// then we are sure that $temp[2]== "xxx" and then $temp[3] == "xx/page?param"
// or $temp[2]== xxx/page?stripped-link from second dot(.)
if(substr_count($temp[2], '/')) { // in case $temp[2]== xxx/page?stripped-link from second dot(.)
// extract "xxx" from "xxx/page?stripped-link" and appent to store url so it will be "abc.xxx"
$temp = explode('/',$temp[2]);
$store_url .= '.'.$temp[0]; // "abc".="xxx" ==> abc.xxx
}
else { // in case $temp[2]== "xxx" and then $temp[3] == "xx/page?param"
$store_url .= '.'.$temp[2]; // "abc".="xxx" ==> abc.xxx
// extract "xx" from "xx/page?param" and appent to store url so it will be "abc.xxx.xx"
$temp = explode('/',$temp[3]);
if(strlen($temp[0])==2) {
$store_url .= '.'.$temp[0];
}
}
}
}
else {
// url style would be 'http://abc.xxx/page?param' or 'http://abc.xxx.xx/page?param'
// remove 'http://'
$temp = substr($original_url, 7);
// now temp would be either 'abc.xxx/page?param' or 'abc.xxx.xx/page?param'
// explode with '/'
$temp = explode('/', $temp);
$store_url = $temp[0];
}
}
else if(substr_count($original_url, 'www.')) {
// url style would be 'www.abc.xxx/page?param' or 'www.abc.xxx.xx/page?param'
// remove 'www.'
$temp = substr($original_url, 4);
// now, $temp would be either "abc.xxx/page?param" or "abc.xxx.xx/page?param"
// explode with '/'
$temp = explode('/', $temp);
$store_url = $temp[0];
}
else {
// url style would be 'abc.xxx/page?param' or 'abc.xxx.xx/page?param'
//explode with '/'
$temp = explode('/', $original_url);
$store_url = $temp[0];
}
Upvotes: -1