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

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

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

en.example.com

Ответы [ 28 ]

1 голос
/ 26 октября 2013

Для тех, кто получает «Ошибка: строгие стандарты: только переменные должны передаваться по ссылке».Используйте как это:

$env = (explode(".",$_SERVER['HTTP_HOST'])); $env = array_shift($env);

1 голос
/ 28 ноября 2015

это мое решение, оно работает с наиболее распространенными доменами, вы можете разместить массив расширений по своему усмотрению:

$ SubDomain = explode ('.', Explode ('| ext |', str_replace (array ('. Com', '.net', '.org'), '| ext |', $ _ SERVER [' HTTP_HOST '])) [0]);

1 голос
/ 10 ноября 2014

На самом деле не существует 100% -ного динамического решения - я просто пытался его выяснить, и из-за различных расширений домена (DTL) эта задача была бы действительно трудной без фактического анализа всех этих расширений и их проверки.каждый раз:

.com vs .co.uk vs org.uk

Наиболее надежным вариантом является определение константы (или записи в базе данных и т. д.), в которой хранится фактическое имя домена, и удаление его из $_SERVER['SERVER_NAME'] с помощью substr()

defined("DOMAIN")
    || define("DOMAIN", 'mymaindomain.co.uk');



function getSubDomain() {

    if (empty($_SERVER['SERVER_NAME'])) {

        return null;

    }

    $subDomain = substr($_SERVER['SERVER_NAME'], 0, -(strlen(DOMAIN)));

    if (empty($subDomain)) {

        return null;

    }

    return rtrim($subDomain, '.');

}

Теперь, если вы используете эту функцию в http://test.mymaindomain.co.uk, она даст вам test или если у вас есть несколько уровней субдомена http://another.test.mymaindomain.co.uk, вы получите another.test -если, конечно, вы не обновите DOMAIN.

Надеюсь, это поможет.

1 голос
/ 14 февраля 2015

Просто

reset(explode(".", $_SERVER['HTTP_HOST']))

1 голос
/ 28 августа 2014
$domain = 'sub.dev.example.com';
$tmp = explode('.', $domain); // split into parts
$subdomain = current($tmp);
print($subdomain);     // prints "sub"

Как видно из предыдущего вопроса: Как получить первый поддомен с PHP?

0 голосов
/ 13 марта 2014
$host = $_SERVER['HTTP_HOST'];
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
$domain = $matches[0];
$url = explode($domain, $host);
$subdomain = str_replace('.', '', $url[0]);

echo 'subdomain: '.$subdomain.'<br />';
echo 'domain: '.$domain.'<br />';
0 голосов
/ 17 января 2013
// For www.abc.en.example.com 
$host_Array = explode(".",$_SERVER['HTTP_HOST']); // Get HOST as array www, abc, en, example, com
array_pop($host_Array); array_pop($host_Array);   // Remove com and exmaple
array_shift($host_Array);                         // Remove www (Optional)
echo implode($host_Array, ".");                   // Combine array abc.en
0 голосов
/ 28 января 2013

Я знаю, что я действительно опаздываю к игре, но здесь идет.

Я использовал переменную сервера HTTP_HOST ($_SERVER['HTTP_HOST']) и количество букв в домене (поэтому для example.com это будет 11).

Затем я использовал функцию substr, чтобы получить поддомен. Я сделал

$numberOfLettersInSubdomain = strlen($_SERVER['HTTP_HOST'])-12
$subdomain = substr($_SERVER['HTTP_HOST'], $numberOfLettersInSubdomain);

Я сократил подстроку в 12 вместо 11, потому что подстроки начинаются с 1 для второго параметра. Так что теперь, если вы ввели test.example.com, значение $subdomain будет test.

Это лучше, чем использовать explode, потому что если в поддомене есть ., это не обрежет его.

0 голосов
/ 27 августа 2014

Попробуйте это ...

$domain = 'en.example.com';
$tmp = explode('.', $domain);
$subdomain = current($tmp);
echo($subdomain);     // echo "en"
0 голосов
/ 24 июля 2013

, если вы используете drupal 7

вам это поможет:

global $base_path;
global $base_root;  
$fulldomain = parse_url($base_root);    
$splitdomain = explode(".", $fulldomain['host']);
$subdomain = $splitdomain[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...