php. Получить имя домена из ссылки -2
К сожалению все стандартные средства не позволяют получить из субдомена имя домена. Сложность здесь заключается в том, что надо отличить домен третьего уровня от субдомена, т.е. для этого придется создавать исключения для всех доменов третьего уровня. И самая большая сложность — получить эти самые всевозможные исключения.
Итак, решая эту проблему я случайно натолкнулся на готовые функции, которые я выложил подкатом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | // get base domain (domain.tld) function get_base_domain($url) { $debug = 0; $base_domain = ''; // generic tlds (source: http://en.wikipedia.org/wiki/Generic_top-level_domain) $G_TLD = array( 'biz','com','edu','gov','info','int','mil','name','net','org', 'aero','asia','cat','coop','jobs','mobi','museum','pro','tel','travel', 'arpa','root', 'berlin','bzh','cym','gal','geo','kid','kids','lat','mail','nyc','post','sco','web','xxx', 'nato', 'example','invalid','localhost','test', 'bitnet','csnet','ip','local','onion','uucp', 'co' // note: not technically, but used in things like co.uk ); // country tlds (source: http://en.wikipedia.org/wiki/Country_code_top-level_domain) $C_TLD = array( // active 'ac','ad','ae','af','ag','ai','al','am','an','ao','aq','ar','as','at','au','aw','ax','az', 'ba','bb','bd','be','bf','bg','bh','bi','bj','bm','bn','bo','br','bs','bt','bw','by','bz', 'ca','cc','cd','cf','cg','ch','ci','ck','cl','cm','cn','co','cr','cu','cv','cx','cy','cz', 'de','dj','dk','dm','do','dz','ec','ee','eg','er','es','et','eu','fi','fj','fk','fm','fo', 'fr','ga','gd','ge','gf','gg','gh','gi','gl','gm','gn','gp','gq','gr','gs','gt','gu','gw', 'gy','hk','hm','hn','hr','ht','hu','id','ie','il','im','in','io','iq','ir','is','it','je', 'jm','jo','jp','ke','kg','kh','ki','km','kn','kr','kw','ky','kz','la','lb','lc','li','lk', 'lr','ls','lt','lu','lv','ly','ma','mc','md','mg','mh','mk','ml','mm','mn','mo','mp','mq', 'mr','ms','mt','mu','mv','mw','mx','my','mz','na','nc','ne','nf','ng','ni','nl','no','np', 'nr','nu','nz','om','pa','pe','pf','pg','ph','pk','pl','pn','pr','ps','pt','pw','py','qa', 're','ro','ru','rw','sa','sb','sc','sd','se','sg','sh','si','sk','sl','sm','sn','sr','st', 'sv','sy','sz','tc','td','tf','tg','th','tj','tk','tl','tm','tn','to','tr','tt','tv','tw', 'tz','ua','ug','uk','us','uy','uz','va','vc','ve','vg','vi','vn','vu','wf','ws','ye','yu', 'za','zm','zw', // inactive 'eh','kp','me','rs','um','bv','gb','pm','sj','so','yt','su','tp','bu','cs','dd','zr' ); // get domain if ( !$full_domain = get_url_domain($url) ) { return $base_domain; } // now the fun // break up domain, reverse $DOMAIN = explode('.', $full_domain); if ( $debug ) print_r($DOMAIN); $DOMAIN = array_reverse($DOMAIN); if ( $debug ) print_r($DOMAIN); // first check for ip address if ( count($DOMAIN) == 4 && is_numeric($DOMAIN[0]) && is_numeric($DOMAIN[3]) ) { return $full_domain; } // if only 2 domain parts, that must be our domain if ( count($DOMAIN) <= 2 ) return $full_domain; /* finally, with 3+ domain parts: obviously D0 is tld now, if D0 = ctld and D1 = gtld, we might have something like com.uk so, if D0 = ctld && D1 = gtld && D2 != 'www', domain = D2.D1.D0 else if D0 = ctld && D1 = gtld && D2 == 'www', domain = D1.D0 else domain = D1.D0 these rules are simplified below */ if ( in_array($DOMAIN[0], $C_TLD) && in_array($DOMAIN[1], $G_TLD) && $DOMAIN[2] != 'www' ) { $full_domain = $DOMAIN[2] . '.' . $DOMAIN[1] . '.' . $DOMAIN[0]; } else { $full_domain = $DOMAIN[1] . '.' . $DOMAIN[0];; } // did we succeed? return $full_domain; } /*____________________________________________________________________________*/ // get domain from url /*____________________________________________________________________________*/ function get_url_domain($url) { $domain = ''; $_URL = parse_url($url); // sanity check if ( empty($_URL) || empty($_URL['host']) ) { $domain = ''; } else { $domain = $_URL['host']; } return $domain; } /*____________________________________________________________________________*/ // Testbed /*____________________________________________________________________________*/ if ( 1 ) { // test code here $TESTURL[] = 'http://blog.org.ua'; $TESTURL[] = 'http://www.blog.org.ua'; $TESTURL[] = 'http://subdomen.blog.org.ua'; $TESTURL[] = 'http://127.0.0.1'; $TESTURL[] = 'http://www.examplesite.com.pk'; $TESTURL[] = 'http://domain.tv.com'; $TESTURL[] = 'http://domain.com.tv'; $TESTURL[] = 'http://domain.tv'; $TESTURL[] = 'http://domain.com'; $TESTURL[] = 'http://secure.email.website.co.uk'; $TESTURL[] = 'http://username:password@this.is.a.worst.shortly.subdomain.thisIsMyMainWebsite.com.cl'; foreach ( $TESTURL as $url ) { echo $url . ' -> ' . get_base_domain($url) . ' '; } } |
Результат работы скрипта:
1 2 3 4 5 6 7 8 9 10 11 | http://blog.org.ua -> blog.org.ua http://www.blog.org.ua -> blog.org.ua http://subdomen.blog.org.ua -> blog.org.ua http://127.0.0.1 -> 127.0.0.1 http://www.examplesite.com.pk -> examplesite.com.pk http://domain.tv.com -> tv.com http://domain.com.tv -> domain.com.tv http://domain.tv -> domain.tv http://domain.com -> domain.com http://secure.email.website.co.uk -> website.co.uk http://username:password@this.is.a.worst.shortly.subdomain.thisIsMyMainWebsite.com.cl -> thisIsMyMainWebsite.com.cl |
Популярность: 2%
Также почитайте эти записи:
- Удалить последний символ из строки. PHP (2)
- Скрипт для проверки индексации сайтов (22)
- Скрипт для замены php 5.3 на 5.2 (1)
2 комментария
Оставить комментарий
Поиск по сайту
Облаго тегов
мини заметки о CodeIgniter
iMacros
Программы
ccna
helper
vmware
кодинг
linux
fetchmail
Сайты
разработка
jQuery
flash
php
почтовый робот
microsoft
mysql
Windows xp
дизайн
блокнот
производительность
vps
Автоматизация
блог
Wordpress
Горячие клавиши
url
CodeIgniter
Windows 2003
FusionCharts
cisco
firefox
70-290
сертификаты
dropbox
IE
FreeBSD
админ
css
статистика
рбк
hardware
profiler
мое мнение
контент
Партнеры
Популярные статьи
- Программы для работы с веб- камерами
- Как узнать mac адрес сетевой карты удаленно
- Чтение ext4 разделов в Windows
- Как обжать кабель
- Основные сочетания клавиш Windows XP
- Доступ к виртуальной машине из интернета. Осваиваем port mapping в vmware
- Ubuntu. Как узнать размер папок в директории?
- MySQL: Optimize Table
- Скрипт для проверки индексации сайтов
- Google Chrome или Firefox
$url = parse_url ($url);
print_r ($url);
To Александр:
Ты сначала разберись клоун как работает функция parse_url и что она возвращает, а потом тут пиши.
Как автор уже сказал — НЕТ на пхп возможности очистить домен в поддомене. parse_url при урле ... вернет тебе в host — sub.site.ru и ты ничем не сможешь определить site.ru, а всегда будешь иметь sub.site.ru.
Так что сначала учись школьнегг а потом уже понты кидай.