Как быстро и просто определить диапазон IP с помощью PHP?
Мы часто встречаем ситуации, когда необходимо работать с диапазонами IP адресов. Это могут быть поисковые системы, боты, которые атакуют сайт или просто обычные пользователи с определенными IP-диапазонами. Что же делать, когда необходимо узнать принадлежит ли конкретный IP конкретному посетителю или боту сайта?
На самом деле код очень короткий и простой, как капля чистой воды. Все, что тебе необходимо - умение редактировать текстовые файлы. И так, открывай любой текстовый документ, мы начинаем работать...
Как тебе известно, любой PHP код начинается с:
<?php //тут код; ?>
так что, открывай текстовый редактор и поехали дальше.
Для определения диапазона IP нам потребуется создать один раз функцию, которая бы собственно и давала результат true или false в зависимости от определенных условий.
Например, назовем эту функцию proverkaip. Все диапазоны IP будут лежать у нас в массиве. Далее, мы конвертируем при помощи ip2long IP адреса стандартные (например 192.168.0.1) в те, которые не содержат точек - получится (из 192.168.0.1) 3232235521. Таким образом, мы сможем сравнить диапазоны IP адресов.
Пример кода:
function proverkaip()
{
$iparray = array
(
array('111.69.245.0', '111.69.245.255'),
array('111.69.246.0', '111.69.247.255'),
array('111.69.248.0', '111.69.251.255')
);
$iptolong = ip2long($_SERVER['REMOTE_ADDR']);
foreach($iparray as $IP)
{
if
(
$iptolong>= ip2long($IP[0]) && $iptolong<= ip2long($IP[1])
)
return true;
}
}
Как видишь, небольшой код может сэкономить твое время, ресурсы твоего хостинга или сервера. После диапазона IP идет присвоение функции $iptolong IP адреса клиента, который конвертируется с использованием ip2long функцией PHP. Далее в цикле (foreach) мы перелопачиваем массив данных и сравниваем его с IP адресом клиента. Если совпадения есть, то функция возвращает true.
Например, у тебя диапазон IP 192.0.0.0 - 195.0.0.0, адрес, который будет иметь цифры 194.168.250.254 с использованием вышеупомянутой функции возвратит true. Т.е. он будет в диапазоне проверяемых тобой IP адресов.
Пример работы кода:
if (proverkaip())
{echo "Адрес в диапазоне";}
else
{echo "Адрес ВНЕ диапазона!";}
Вот и все... Еще один совет. Используй Notepad++, если тебе необходимо сделать из трехсот строк (например) разных диапазонов IP массивы. Пример:
У тебя есть диапазоны:
192.168.0.5 - 192.168.255.250
195.1.1.2 - 196.255.255.255
105.1.1.1 - 106.255.255.255
и еще 297 строки (например)
то необходимо, открыв Notepad++, поставить каретку в конец первой строки (где написано 192.168.255.255), далее зажать Shift и нажимать стрелку вправо, пока каретка не остановится перед цифрой 195 (именно перед 195.1.1.2), на следующей строке. После этого жми Crtl+H. У тебя появится автозамена. В поле «Найти» у тебя уже будут непонятные символы, не обращай внимания, в поле «Заменить на:» поставь '),\n array(' ЗАТЕМ внизу (режим поиска) нажми «Расширенный», нажми Заменить все. Далее замени ПРОБЕЛ-ПРОБЕЛ > ( - ) на ', ' (знак апострофа запятая ПРОБЕЛ знак апострофа). После чего в самом начале кода поставь array(', так как там не произошла автозамена и в конце поставь ') (апостроф и скобка закрывающая).