Как определить принадлежность урла к домену?

Sirius

PHP+MySQL=LOVE
Как определить принадлежность урла к домену?

С наступающим :)

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

Например есть домен:
mysite.com

Нужно определить что:
www.mysite.com
blah-blah.mysite.com
www.mysite.com/~booom/

к нему относится(то есть являются его поддоменами или поддиректориями), а:

narod.ru/mysitecom/
narod.ru/mysite/

к нему не относятся!!!
 

Фанат

oncle terrible
Команда форума
ну, для поставленной задачи достаточно обычного sstrpos
if (strpos($url,$domen)!==FALSE) echo "относится";

а вот если ты имел в виду
mysite.commerce.net, то тут сложнее.
можно регами, например
 

Фанат

oncle terrible
Команда форума
если без регов, то можно так:
$uarr=parse_url($url);
if (substr($uarr['host'],-1*(strlen($domain)))==$domain) echo "относится";

но проще регом, наверное, по тому же принципу - домен должен впритык к первому слешу.
Хотя нет - там еще порт может быть.
В общем целый парсер надо писать.
проще готовым воспользоваться, если никто не напишет :)
 

ForJest

- свежая кровь
Если я правильно понял принадлежность это последние 2 периода. Так в чем проблема?
1. Делаешь parse_url - получаешь хосты
2. Делаешь explode(".", $host);
3. Сравниваешь последние 2 значения в каждом массиве.
 

Sirius

PHP+MySQL=LOVE
Спасибки - вот что я намылил, если кому-нибудь вдруг понадобится:

PHP:
<?php

$OkDomains=array('mysite.com','doom.com','bratva.com');

function GetServer()
{
  if (!empty($_SERVER) && isset($_SERVER['SERVER_NAME']))
  {
    Return $_SERVER['SERVER_NAME'];
  }
  else if (!empty($_ENV) && isset($_ENV['SERVER_NAME']))
  {
    Return $_ENV['SERVER_NAME'];
  }
  else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['SERVER_NAME']))
  {
    Return $HTTP_SERVER_VARS['SERVER_NAME'];
  }
  else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['SERVER_NAME']))
  {
    Return $HTTP_ENV_VARS['SERVER_NAME'];
  }
  else if (@getenv('SERVER_NAME'))
  {
    Return getenv('SERVER_NAME');
  }
}

function GetDomain($domain)
{
  $Tmp = parse_url('http://'.$domain);
  $Arr = explode(".", $domain);
  Return $Arr[count($Arr)-2].'.'.$Arr[count($Arr)-1];
}

function IsExist($Domains,$ForCheck)
{
  Return (in_array($ForCheck, $Domains)) ? True : False;
}

echo (IsExist($OkDomains,GetDomain(GetServer()))) ? 'Ok' : 'False';
?>
ПыСы: Всем спасибо! Все свободны :)
 

Sirius

PHP+MySQL=LOVE
:) Хе-хе - конечно было б лучше без неё... Но... На всякий случай... Случаи бывают разные... :)
 

Фанат

oncle terrible
Команда форума
я фигею с этих людей.
Сам-то я уж так переживал, что не одной строчкой сделал, а двумя.
На форджеста уж не стал ругаться за абсолютно лишний эксплод - пустая трата времени.
Но товарищ превзошел любые ожидания.
ЦЕЛАЯ СТРАНИЦА КОДА на такую примитивную операцию.
Я просто в ауте.
Я представляю, какого размера у него гостевая книга, к примеру. Килобайт сто кода - не меньше....

Я, кстати, догадываюсь, для чего ему это.
по ходу, причина будет гораздо смешнее реализации.
 

Popoff

popoff.donetsk.ua
1. Отбрасываешь все, что после первого слеша
1а. если в конце получилась точка, то ее тоже отбрасываешь (адрес можно набрать, например, так: http://www.google.com.ru./)
2. Проверяешь, совпадает ли конец полученной строки с твоим суффиксом
 

Фанат

oncle terrible
Команда форума
1. Если отпросить все после первого слеша, то останется "http:/"
1a. где это можно? Я набрал адрес с точкой в конце и мой браузер не нашел ничего.
2. Спасибо, что описал словами то, для чего я привел код еще вчера.
Но, право, не стоило утруждаться.
 

Sirius

PHP+MySQL=LOVE
2Фанат:
А я могу признаться - чтобы прятать скрипт от неблагополучных юзверей, которые теряют мои коды...

Таким образом никто не сможет использовать скрипт на другом сервере :) Хе-хе...

А ну конечно же проверка будет проводится в заэнкодировном Зендом файле (я ж не собираюсь это открывать) - а то мне не нравится встроенный в Зенд Лицензии на домены...

А в Ioncube всё круче и проще... Но я всё же решил пока сделать свой собственный проверятель...

И ты не смотри на размеры кода :) Зато он почти универсален - к чему я всегда стремлюсь. У h1.ru например такие настройки, что или спец. скрипт, или вот такие универсальности идут (GetServer())!
Алгоритм определения ИП - 8 кб (похож на phpmyadmin-овский, но чуть лучше :) )

2Popoff:
Проблема остаётся только в проверке на домены 3-го, 4-го уровня и т.д.
 

Popoff

popoff.donetsk.ua
0. отбросить http://, если оно есть
1а. в моем експлорере-5 все прекрасно переходится :)
 

voodoo

Новичок
а мне еще нравятся адреса типа http://3589815313/talk/
Как тут ваши скрипты в две строчки, определяют принадлежность?
 

Фанат

oncle terrible
Команда форума
Таким образом никто не сможет использовать скрипт на другом сервере Хе-хе...
и правда - хе-хе.
взять, сделать автопрепенд файл с одной строчкой
<? $_SERVER['SERVER_NAME'])) = 'doom.com'; ?>

За идиотов своих клиентов будет держать только идиот-девелопер.

Вообще, конечно, это все пустые разговоры.
человек, который не умеет сравнивать строки, но при этом тратит уйму ресурсов на то, чтобы его "гениальные" скрипты не украли, достоин помещения в кунсткамеру.

lucas, спасибо за науку.
voodoo, наши скрипты в две строчки не занимаются фигней. А то, что делают - делают нормально.
во всяком случае, имя сервера по НТТР_ХОСТ не определяют.
 

Sirius

PHP+MySQL=LOVE
Да уж ты прав! На крайняк:
putenv ("SERVER_NAME=doom.com");
в небезопасном режиме вообще все старания определить текущий сервер убивает :(

Ничо себе - так как же программно определить домен - где сейчас работает скрипт? :)
 
Сверху