[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ip адрес
borisz
нашёл такое условие:
if ($long == -1) 
echo "Невозможно определить IP, доступ запрещен";
else
{
$ip2long = sprintf("%u",ip2long($ip));
switch (true){
case ($ip2long >= 1505435648 && $ip2long <= 1505443839): break;
case ($ip2long >= 1424633856 && $ip2long <= 1424637951): break;
default: err("Неразрешённый IP.");
}
}

Понял, что тут указано для каких ip адресов разрешёл доступ.
Что такое
1505435648 && $ip2long <= 1505443839
и как высчитать?
paul85
borisz, это хранение ip адреса числом. Как известно, операции с числами всегда в разы быстрее, чем со строками. Для этого и сделано. Особенно ощутимо, если хранить статистику (биллинг) пользователей.

Вычисляется очень просто (x.y.z.w):
x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)

В вашем примере указаны промежутки IP адресов, которые, по-видимому, разрешены. Можно поступить проще! Например необходимо разрешить подсеть 192.168.1.1 - 192.168.1.14. Просто напросто делаем:
echo abs(ip2long('192.168.1.1'));
echo abs(ip2long('192.168.1.14'));

Вот вам первое и второе значение!

P.s. Меня совершенно справедливо поправили.
Последний код неверный. Вместо него нужно использовать:

printf("%u", ip2long('192.168.1.1'));
printf("%u", ip2long('192.168.1.14'));
Rand

echo 'ip >= ' . long2ip(1505435648) . ' && ip <= ' . long2ip(1505443839) . PHP_EOL;
echo 'ip >= ' . long2ip(1424633856) . ' && ip <= ' . long2ip(1424637951) . PHP_EOL;

// Вывод:
// ip >= 89.187.32.0 && ip <= 89.187.63.255
// ip >= 84.234.48.0 && ip <= 84.234.63.255


paul85
MiksIr, согласен! Это я не из той оперы ляпнул...
borisz
Цитата (paul85 @ 27.07.2013 - 18:36)
borisz, это хранение ip адреса числом. Как известно, операции с числами всегда в разы быстрее, чем со строками. Для этого и сделано. Особенно ощутимо, если хранить статистику (биллинг) пользователей.

Вычисляется очень просто (x.y.z.w):
x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)

В вашем примере указаны промежутки IP адресов, которые, по-видимому, разрешены. Можно поступить проще! Например необходимо разрешить подсеть 192.168.1.1 - 192.168.1.14. Просто напросто делаем:
echo abs(ip2long('192.168.1.1'));
echo abs(ip2long('192.168.1.14'));

Вот вам первое и второе значение!

P.s. Меня совершенно справедливо поправили.
Последний код неверный. Вместо него нужно использовать:

printf("%u", ip2long('192.168.1.1'));
printf("%u", ip2long('192.168.1.14'));

Спасибо за формулу:
x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.