[PHP] Проверка вхождения IP-адреса в диапазон

Khvosticov Sergey
Сообщения: 201
Зарегистрирован: 31 дек 2009
Как задать диапазон допустим интернет провайдера Beeline и при проверке IP писать что это Beeline ? или не Beeline?

Допустим диапазон домолинка 77.45.128.0/77.45.255.255
Последний раз редактировалось Distructor 11 ноя 2010, 10:05, всего редактировалось 3 раза.
Были времена я срывался и падал вниз, но всегда успевал ухватиться за карниз...

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
77.45.0.0/77.45.255.255

Тогда так

Код: Выделить всё

if(preg_match('/^77\.45\.[0-9]{1,3}\.[0-9]{1,3}$/',$IP))
  echo 'Внутри сети!';
else
  echo 'Внешка';
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Аватара пользователя
Distructor
Администратор
Сообщения: 1599
Зарегистрирован: 28 дек 2009
и идеале надо перевести ип и диапазон в число и потом их уже сравнивать как простые числа

Khvosticov Sergey
Сообщения: 201
Зарегистрирован: 31 дек 2009
AgentSIB можно более подробно про '/^77\.45\.[0-9]{1,3}\.[0-9]{1,3}$/' что-то не особо понял что значит [ ] скобки так-же {} , что обозначает переменая IP это понятно в переменную проверку ипа ставить.
Были времена я срывался и падал вниз, но всегда успевал ухватиться за карниз...

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
Кури мануалы по регулярным выражениям, если особо сложно, вот тебе вариант, предложенный Диструктором:

Код: Выделить всё

if ( strpos( '77.45.', $IP )===0 )
  echo 'Внутри сети';
else
  echo 'Внешка';

Подходит это только для того варианта, что ты предложил.

-- добавлено 11 ноя 2010, 10:26 --

77.45.128.0/77.45.255.255
Вижу диапазон изменился)
Тогда так

Код: Выделить всё

$ip_begin=ip2long('77.45.128.0');
$ip_end=ip2long('77.45.255.255');
$ip_real=ip2long($user_ip);
if($ip_real>=$ip_begin&&$ip_real<=$ip_end) echo 'Внутри сети';
else echo 'Неа)';

Определение IP я намеренно не пишу, у каждого свои вкусы :)
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Аватара пользователя
Distructor
Администратор
Сообщения: 1599
Зарегистрирован: 28 дек 2009
AgentSIB писал(а):Тогда так
про это я и говорил в самом начале))

AgentSIB писал(а):Определение IP я намеренно не пишу, у каждого свои вкусы
его уже обсуждали в viewtopic.php?p=3642#p3642

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
2Distructor
Так просто кода больше, а я сторонник минимализма :) А предложенный мной ранее - вполне адекватный для условия, поставленного раньше)
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Аватара пользователя
Distructor
Администратор
Сообщения: 1599
Зарегистрирован: 28 дек 2009
достаточно кратко)

Код: Выделить всё

function checkEntranceIP ($user_ip, $ip_from, $ip_to) 
{
    return ( ip2long($user_ip)>=ip2long($ip_from) && ip2long($user_ip)<=ip2long($ip_to) );
}

echo checkEntranceIP ( $user_ip, '77.45.128.0', '77.45.255.255') ? 'Внутри сети' : 'Неа'; 

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
Меримся?)))

Код: Выделить всё

function isLocal ($user_ip) 
{
    return ( ip2long($user_ip)>=ip2long('77.45.128.0') && ip2long($user_ip)<=ip2long('77.45.255.255') );
}

echo isLocal ( $user_ip) ? 'Внутри сети' : 'Неа';  
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Khvosticov Sergey
Сообщения: 201
Зарегистрирован: 31 дек 2009
AgentSIB писал(а):Меримся?)))

Код: Выделить всё

function isLocal ($user_ip) 
{
    return ( ip2long($user_ip)>=ip2long('77.45.128.0') && ip2long($user_ip)<=ip2long('77.45.255.255') );
}

echo isLocal ( $user_ip) ? 'Внутри сети' : 'Неа';  

Спасибо , идеальная работа! :)

-- добавлено 13 ноя 2010, 09:15 --

А как задать несколько диапазонов , но с учётом если домолинк то пишит домолинк , если билайн пишит билайн , если не известно пишит неизвестно ...
Были времена я срывался и падал вниз, но всегда успевал ухватиться за карниз...

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
А чуть чуть подумать не пробовал?) Тут преобразовывать функцию минут 5, не больше.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"


Вернуться в «Другие вопросы»