2BlackLogic ты имеешь представление о хранении целых чисел в памяти? я про современную архитектуру. простой пример, -1 и 255 типа char (один байт) будут выглядеть в памяти одинаково, в то же время (-1<255)==true понимаешь к чему я клоню? ip2long возвращает значение ip адреса (целое знаковое число размером в 4 байта). пхп его обрабатывает и у себя и на более низком уровне сравнивает два знаковых числа, так как в коде пхп они были обьявлены как signed, то сравнение идет уже действительно двух знаковых чисел. и если unsigned результат ip2long был больше (но не более чем на 2^31-1) чем 2^31-1 к примеру, то это число считается уже отрицательным. а отрицательное меньше положительного в результате, хотя как тебе кажется - больше --- кстати, так к слову, если есть число a, то -a получается простой инверсией битов и прибавлением единицы.
2BlackLogic ну я хз конечно, но учитывая что ни один из приведенных кодов не работает, то видимо мой) тем более такая иллюстрация "алгоритма" предложенного кезом выглядит нагляднее
Ух... в какие степи вас занесло... В общем... Использовал Code: <? $first="0.0.0.0"; $last="255.255.255.254"; $check="192.0.34.166"; // $check_d=sprintf("%u",ip2long($check)); $first_d=sprintf("%u",ip2long($first)); $last_d=sprintf("%u",ip2long($last)); // if( ($check_d>=$first_d) && ($check_d<=$last_d) ) { //xek echo 'xek'; } ?> этот способ... (ИМХО самый короткий и понятный) Рассматривал только те примеры в которых идет выборка ip из диапазона ) Sorry за кривой топик "Сравнение..." но нужно было выяснить именно принадлежность к диапазону... ВСЕМ спасибо за ответы...
http://packetstormsecurity.org/0608-advisories/ip2long.txt ip2long - не самый безопасный способ. только если кроме REMOTE_ADDR не будет больше ничего передаваться.
Вот такой вот скриптик сварганил: PHP: <?php $ip = '10.10.10.10'; $bZone = array('10', '10', '1', '1'); $eZone = array('10', '10', '255', '255'); $info = explode('.', $ip); $error = 0; for ($i = 0; $i < 4; $i++) { if (!($info[$i] >= $bZone[$i] && $info[$i] <= $eZone[$i])) { $error = 1; continue; } } echo ($error) ? 'Не принадлежит' : 'Принадлежит'; ?>