Функция PHP, чтобы получить поддомен URL - PullRequest
104 голосов
/ 14 марта 2011

Есть ли в PHP функция для получения имени субдомена?

В следующем примере я хотел бы получить часть URL "en":

en.example.com

Ответы [ 28 ]

0 голосов
/ 22 марта 2018

Мы используем эту функцию для обработки нескольких субдоменов и нескольких tld , а также для обработки ip и localhost

function analyse_host($_host)
    {
        $my_host   = explode('.', $_host);
        $my_result = ['subdomain' => null, 'root' => null, 'tld' => null];

        // if host is ip, only set as root
        if(filter_var($_host, FILTER_VALIDATE_IP))
        {
            // something like 127.0.0.5
            $my_result['root'] = $_host;
        }
        elseif(count($my_host) === 1)
        {
            // something like localhost
            $my_result['root'] = $_host;
        }
        elseif(count($my_host) === 2)
        {
            // like jibres.com
            $my_result['root'] = $my_host[0];
            $my_result['tld']  = $my_host[1];
        }
        elseif(count($my_host) >= 3)
        {
            // some conditons like
            // ermile.ac.ir
            // ermile.jibres.com
            // ermile.jibres.ac.ir
            // a.ermile.jibres.ac.ir

            // get last one as tld
            $my_result['tld']  = end($my_host);
            array_pop($my_host);

            // check last one after remove is probably tld or not
            $known_tld    = ['com', 'org', 'net', 'gov', 'co', 'ac', 'id', 'sch', 'biz'];
            $probably_tld = end($my_host);
            if(in_array($probably_tld, $known_tld))
            {
                $my_result['tld'] = $probably_tld. '.'. $my_result['tld'];
                array_pop($my_host);
            }

            $my_result['root'] = end($my_host);
            array_pop($my_host);

            // all remain is subdomain
            if(count($my_host) > 0)
            {
                $my_result['subdomain'] = implode('.', $my_host);
            }
        }

        return $my_result;
    }
0 голосов
/ 23 ноября 2017

Я делаю что-то вроде этого

$url = https://en.example.com

$splitedBySlash = explode('/', $url);
$splitedByDot = explode('.', $splitedBySlash[2]);

$subdomain = $splitedByDot[0];
0 голосов
/ 17 февраля 2017

Вы можете использовать это тоже

echo substr($_SERVER['HTTP_HOST'], 0, strrpos($_SERVER['HTTP_HOST'], '.', -5));
0 голосов
/ 16 июля 2014

В PHP 5.3 вы можете использовать strstr () с true параметром

echo strstr($_SERVER["HTTP_HOST"], '.', true); //prints en
0 голосов
/ 29 декабря 2017

PHP 7.0: Использование функции разнесения и создание списка всех результатов.

list($subdomain,$host) = explode('.', $_SERVER["SERVER_NAME"]);

Пример: sub.domain.com

echo $subdomain; 

Результат: sub

echo $host;

Результат: домен

0 голосов
/ 11 августа 2014
function get_subdomain($url=""){
    if($url==""){
        $url = $_SERVER['HTTP_HOST'];
    }
    $parsedUrl = parse_url($url);
    $host = explode('.', $parsedUrl['path']);
    $subdomains = array_slice($host, 0, count($host) - 2 );
    return implode(".", $subdomains);
}
0 голосов
/ 04 февраля 2019

Предположим, текущий URL = sub.example.com


    $host = array_reverse(explode('.', $_SERVER['SERVER_NAME']));

    if (count($host) >= 3){
       echo "Main domain is = ".$host[1].".".$host[0]." & subdomain is = ".$host[2];
       // Main domain is = example.com & subdomain is = sub
    } else {
       echo "Main domain is = ".$host[1].".".$host[0]." & subdomain not found";
       // "Main domain is = example.com & subdomain not found";
    }

0 голосов
/ 14 марта 2011

Если вы хотите только то, что предшествует первому периоду:

list($sub) = explode('.', 'en.example.com', 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...