Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить поддомен 
:(
    Опции темы
nepster
Дата 17.7.2013, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Подскажите как решить данную проблему. Нужно вытащить название поддомена из строки
есть несколько моментов, половину решил, а половину не смог.

 
login.site.com              должен быть результат: login
www.login.site.com      должен быть результат: login
site.com                     должен быть результат: false
login.site.com.ua          должен быть результат: login
www.login.site.com.ua  должен быть результат: login
site.com.ua                 должен быть результат: false
PM MAIL   Вверх
MoLeX
Дата 17.7.2013, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



parse_url()


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
nepster
Дата 17.7.2013, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



не плохо, но всеравно не решеает проблем.


PM MAIL   Вверх
SergV
Дата 17.7.2013, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



А что мешает с помощью explode разбить строку по точкам, и по условию получить то что требуется.
К примеру при разбивке будет несколько частей, где две последние будут отвечать за домены первого и второго уровня, и их так сказать сразу откидываем, а уже по общему количеству и с проверкой на www можно получить то что нужно.
Пример не привожу, это элементарные условия "if" или "switch - case"

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM   Вверх
Fortop
Дата 17.7.2013, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



поскольку www почему-то не считаете доменом, то для начала отрезать все www в начале урла
Затем точно так же отрезать site.com в конце урла

Остаток будет искомыми поддоменами.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Sanchezzz
Дата 17.7.2013, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Когда стандартные средства не подошли в бой идут регулярки)
Накидал на калеках теоретически должно работать 
Код

function getSubDomen($str){
    $pattern = '#^(www\.)?(?P<sub>[a-z_0-9\-]{1,63})\.([a-z_0-9\-]{1,63})\.([a-z]{2,3})$#is';    
    return !preg_match($pattern,$str ,$matcher)? false : $matcher['sub'];
}


Если в строке есть первые www... это не субдомен,  www.login.mail.ru субдомен будет Login

Это сообщение отредактировал(а) Sanchezzz - 17.7.2013, 20:02


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
nepster
Дата 18.7.2013, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Код

Затем точно так же отрезать site.com в конце урла



Вот это нам не известно. К примеру у нас есть несколько доменов. 
site.com.ua
site.ru
site.com

тут вот проблемы уже начинаются 
PM MAIL   Вверх
Fortop
Дата 18.7.2013, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nepster @  18.7.2013,  00:06 Найти цитируемый пост)
Вот это нам не известно. 

тогда вообще никак.
И даже теоретически никак.


Для того чтобы выяснить поддомен ты должен быть в курсе его родительского домена.
В первом приближении считаем доменом все что находится сразу после tld т.е. site.com разбирается на две части site - домен  com - tld

А случаи site.yyy.xx не разбираются в принципе если ты не перечислишь все возможные варианты (или правила) yyy.xx которые ты будешь считать эквивалентом tld

Т.е. пока ты не определишься с правилами сделать ты ничего не сможешь.




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
krundetz
Дата 18.7.2013, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(nepster @  18.7.2013,  00:06 Найти цитируемый пост)
Вот это нам не известно. К примеру у нас есть несколько доменов. 
site.com.ua
site.ru
site.com

тут вот проблемы уже начинаются  

а кто нам мешает сделать создать фильтр? в него добавим все домены первого уровня, и доменные типа com.ua, com.ru, org.com  и т.д. и т.п. Информация же не закрытая и сбор ее можно автоматизировать.


Цитата(Fortop @  18.7.2013,  02:47 Найти цитируемый пост)
Т.е. пока ты не определишься с правилами сделать ты ничего не сможешь.

полностью согласен. ТС вам просто надо задать правила по которым будет определяться что считается доменом, а что поддоменом. 


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
SergV
Дата 18.7.2013, 10:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



Чет тут всё запутано у вас. smile
Я вроде привёл вариант наипростейший, разбить домен с помощью explode, и получим масив, где последние 2 значения это домен скажем site.com или site.ru. А всё что до этого, это субдомен(ы) или www. А уже с этим 1-2 значения то думаю не сложно решить что делать..., Здесь регулярка нужна разве что на проверку www.

Для примера, имеем 4 адреса sub.domen.ru, www.domen.ru, sub.sub.domen.ru и domen.ru
При разбивке получим такие массивы:
array(
    [0] => sub
    [1] => domen
    [2] => ru
)
array(
    [0] => www
    [1] => domen
    [2] => ru
)
array(
    [0] => sub
    [1] => sub
    [2] => domen
    [3] => ru
)
array(
    [0] => domen
    [1] => ru
)
Теперь остаётся проверить на count, и:
если 2 значения в масиве, значит субдоменов нет,
если 3 значения, проверяем 0-ю ячейку на www, и получаем либо субдомен, либо нет
если 4 значения, то опять в том же дуже по первым двум, так как 3 и 4 это не то что нужно...
Проще паренной репы, и не каких хитрых танцев с бубном в регулярках... smile Может не самый красивый способ, но зато простой. По крайней мере я бы так сделал, так как не нужно заранее знать какой будет основной домен, и не нужно крутить вертеть сложные регулярки, достаточно простой проверки на www.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM   Вверх
Arantir
Дата 18.7.2013, 13:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



SergV, да неправильный Ваш вариант, неправильный...  Нет однозначных лексических правил определения поддомена.

Есть сайты www.odessa.ua и www.misto.odessa.ua
Сайта odessa.ua не существует, ведь odessa.ua - доменная зона. 
По сути, www - это название домена в зоне odessa.ua.
misto - не является поддоменом odessa.ua, misto.odessa.ua - полностью независимый от www.odessa.ua сайт.
misto - название домена в зоне odessa.ua.
При этом www - поддомен домена misto.odessa.ua.

И это реальный пример. И не исключение. 
Поддомен поддоменом делает человеческое субъективное восприятие. В самом деле - что такое поддомен? 

На программном уровне все есть поддомены.
Более того, даже ru, ua и т.д. - это поддомены! Это поддомены корневого домена <пустая строка>. Да, да, допишите точку после ua, ru и т.д. любого сайта и это будет работать!
По сути, домена нет. Он - пустая строка. Есть только поддомены.
Доменные зоны и прочее - это просто соглашения. Договор между людьми о том, какие названия сайтом могут быть, а какие не могут. Нельзя зарегистрировать сайт com.ua или ua только потому, что все на это согласились и теперь базе доменных имен эти домены заняты, просто не ведут ни на какой сервер.

Это сообщение отредактировал(а) Arantir - 18.7.2013, 14:46


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
SergV
Дата 18.7.2013, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



O_o Arantir, я привёл лишь логический вариант решения поставленной проблемы... Есть строка, есть субъекты строки разделённые точкой, а дальше нужен результат - получение определённого субъекта строки. Вот я и предложил как его получить, а все слова про - "субъективное восприятие" и т.д., к вопросу отношения не имеют.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM   Вверх
Arantir
Дата 18.7.2013, 18:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(SergV @  18.7.2013,  16:18 Найти цитируемый пост)
логический вариант решения поставленной проблемы

Доменные зоны второго уровня тоже входят в проблему еще с первого поста, но вашим вариантом не учитываются. В частности, для site.com.ua поддоменом выйдет site, хотя это не так.
В принципе, есть всего одна проблема в определении поддомена: доменные зоны могут быть как первого так и второго уровня. И определить их можно только словарным методом (сравнивая со списком оных).

Про субъективноть - это я в целом по теме, а не лично к Вашему посту, если что...


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
SergV
Дата 19.7.2013, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



Цитата

   Доменные зоны второго уровня тоже входят в проблему еще с первого поста, но вашим вариантом не учитываются.
   

Моя ошибка..., недосмотрел что в списке последний пункт не login а site, и везде упор идёт только на login.
В таком случае вопрос не совсем конкретно описан, из него не ясно, будет ли искомое всегда одного названия типа - логин, или всегда разное. Если первое, то тут обычная регулярка на проверку этого слова, если два, то тут сложнее, об этом уже написали...

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM   Вверх
krundetz
Дата 19.7.2013, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Arantir @  18.7.2013,  18:17 Найти цитируемый пост)
И определить их можно только словарным методом (сравнивая со списком оных).

ключевые слова

приведу пожалуй простенький пример сравнения со словарем

Код

$dictionaryFirst = array('.ua', '.ru');//пример словаря для доменных зон первого уровня
$dictionarySecond = array('.msk.ru', '.org.ru');//пример словаря для доменных зон второго уровня
//разделены они специально, так как будут не правильно распознанные доменные зоны если их объединить

//----------------------------------------------------

//превращаем словари в регулярки, хотя можно и сразу словарь делать регуляркой

function getPattern($dictionary) {
    return '(' . preg_replace('/\./', '\.', implode('$)|(' ,$dictionarySecond)) . '$)';
}

$paternFirst = getPatern($dictionaryFirst);
$paternSecond = getPatern($dictionarySecond);

//возвращаем имя домена на котором запущен скрипт 
//без доменной зоны, с поддоменами если есть, кроме поддоменов с www
if(preg_match('/' . $paternSecond . '/', $_SERVER['HTTP_HOST'])) {
    return preg_replace('/(^www)|' . $paternSecond . '/', '', $_SERVER['HTTP_HOST']);
}elseif (preg_match('/' . $paternFirste . '/', $_SERVER['HTTP_HOST'])) {
    return  preg_replace('/(^www)|' . $paternFirste . '/', '', $_SERVER['HTTP_HOST']);
} else {
    return false;
}

TC если вы усовершенствуете регулярку и блок условных операторов то получите то что хотели.

Это сообщение отредактировал(а) krundetz - 19.7.2013, 10:20


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1357 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.