function get_last_subdomain($url) { //приводим строку к нижнему регистру, а то мало ли... $url = trim(strtolower($url)); //проверяем наличие http(s) //это сделано как костыль, чтоб parse_url сработал корректно $scheme_entry = preg_match('/^(http|https)/i', $url); if ($scheme_entry == 0){ $url = 'http://' . $url; } //выпиливаем www и парсим $url_parsed = parse_url($url, PHP_URL_HOST); $url_parsed = preg_replace('/^www\./i','', $url_parsed); $url_exploded = explode('.', $url_parsed ); //проверяем кол-во элементов в массиве //если 2 и меньше отдаем FALSE ( нет поддомена ) если больше отдаем первое if ( sizeof($url_exploded) <=2 ) { return FALSE; } else { return $url_exploded[0]; } return NULL; } $pool = array( 'http://www.domain.com', // www 'http://domain.com', // --nothing-- 'https://domain.com', // --nothing-- 'www.domain.com', // www 'domain.com', // --nothing-- 'www.wadomain.com/some/path', // www 'http://sub.domain.com/domain.com', // sub 'опубликованному.значения.ua', // опубликованному ;) 'значения.ua', // --nothing-- 'http://sub-domain.domain.net/domain.net', // sub-domain 'sub-domain.third-Level_DomaIN.domain.uk.co/domain.net' // sub-domain ); foreach($pool as $url) { echo $url.' -> '; var_dump(get_last_subdomain($url)); }
http://www.domain.com -> bool(false)http://domain.com -> bool(false)https://domain.com -> bool(false)www.domain.com -> bool(false)domain.com -> bool(false)www.wadomain.com/some/path -> bool(false)http://sub.domain.com/domain.com -> string(3) "sub"опубликованному.значения.ua -> string(30) "опубликованному"значения.ua -> bool(false)http://sub-domain.domain.net/domain.net -> string(10) "sub-domain"sub-domain.third-Level_DomaIN.domain.uk.co/domain.net -> string(10) "sub-domain"
Хорошее замечание. но это не проблема. просто замените
$url = ltrim( parse_url( strtolower($url), PHP_URL_HOST ), 'www.' );
на
$url = ltrim( pathinfo( strtolower( $url ), PATHINFO_BASENAME ), 'www.' );
Смотрите. Вы сейчас более-менее пересказали идеологию PWA ( progressive web app )Очень интересная тема. Я ее начал прорабатывать для сайтов компании в конце 19 года, а потом случился ковид со всеми вытекающими последствиями. Но если мы берем чисто-технологический вопрос, то как мне кажется тема очень интересная и перспективная. Разумеется с поправкой на то, что все интересные и прогрессивные технологии пробиваются на рынок года через 3-4 после появления.
// приводим URL к типовому представлению// выкидываем www, если есть$url = 'https://wWW.SomeUrl.domain.myhost.com';$url = ltrim( parse_url( strtolower($url), PHP_URL_HOST ), 'www.' ); //разделяем на составляющие и выбираем первое значение//подобная конструкция будет работать в php 7.0+$last_url = explode( '.', $url )[0];echo $last_url;
Евгений Крупченко, у вашего способа, есть один крупный недостаток. Домен должен быть известен. Если он неизвестен, придется сначала выловить собсно домен, а потом уже начинать шаманить.представьте простой случай, когда пользователь вводит url в форму.меня, кстати, смущает вопрос, как подобные варианты будут работать на сайтах url-ами в паникоде. Вроде xn--b1afnsoec8e.xn--d1acufc.xn--p1aiхотя тут тоже используется точка - разделитель. то-есть должно быть нормально
какую переменную вы туда вкорячите зависит от вашего воображения. только в той переменной должен быть валидный http адрес, иначе вернет пустую строку
апд.разумеется, если в качестве источника мы берем $_SERVER, то проще использовать 'HTTP_HOST' но это может быть не всегда. например, если url вводится руками пользователя в форме
прошу прощения за кучу правок. Самочувствие не очень, сижу на колёсах.
$first_sub = explode('.', parse_url ( 'https://WwW.mySubDomain.mYsITe.COM', PHP_URL_HOST )); if (strtolower ($first_sub[0]) == 'www'){ $subdomain = strtolower ( $first_sub[1] ); } else { $subdomain = strtolower ( $first_sub[0] ); } echo $subdomain;
как дети малые. чесслово
echo explode('.', parse_url ( 'https://my.site.com', PHP_URL_HOST ))[0]
это без wwwс www добавляете проверку на www
Надо было сделать быстро - сделали быстро.какая разница на чем сайт, главное полезен он или нет. это школьникам важно, какие технологии используются, чтоб похвастаться перед друзьями, а в крупном бизнесе другие критерии качества сайта.