У меня есть статический домен dev.example.com
с поддоменами подстановочных символов, например *.dev.example.com
.
Мне нужно определить имя текущего поддомена подстановочных знаков. Итак, если я просматриваю sub.dev.example.com
как мне получить «sub»?
$env_domain = dev.example.com; $subdomain = array_shift( explode( '.', $_SERVER['HTTP_HOST'] ) ) .'.'. $env_domain; echo $subdomain;
В настоящее время это возвращает dev
. Мне нужно, чтобы он возвращал sub
.
Я думаю, что наилучшей практикой здесь было бы вернуть самый низкоуровневый домен (первый подобъект).
Обратите внимание, что я не разбираю URL-адрес, а заданный домен.
$domain = 'sub.dev.example.com'; $tmp = explode('.', $domain); $subdomain = current($tmp); print($subdomain); // prints "sub"
Это еще одно простое решение вопроса.
echo array_shift((explode(".",$_SERVER['HTTP_HOST'])));
Я думаю, что использование функции parse_url намного лучше подходит:
getUrlSubdomain($url){ $urlSegments = parse_url($url); $urlHostSegments = explode('.', $urlSegments['host']); if(count($urlHostSegments) > 2) { return $urlHostSegments[0]; } else{ return null; } }
Вот небольшая функция, которая сделает трюк. Просто вставьте $ _SERVER ['HTTP_HOST'] в функцию, и вы должны получить то, что хотите
function getSubDomain ($domain) { $eDom = explode('.', $domain); return $eDom[0]; } echo getSubDomain('sub.dev.example.com'); // echo 'sub'
Из PHP 5.3 вы можете использовать strstr () с истинным параметром
echo strstr('sub.dev.example.com', '.', true); //prints sub
Оригинальная ссылка