![]() |
Php, сравнение Ip (вопрос)
Здраствуйте...
Подскажите пожалуйста как можно проверить принадлежит ли ip адрес заданному диапазону? PHP код:
сорри за глупые вопросы, умные пока придумать не могу... :confused: |
PHP код:
|
пусть $d1 и $d2 - диапазоны в виде "x.x.x.x" (например 1.2.3.4 - 1.2.3.100)
переводи их в числа (4-байтные как бы) чтобы небыло никаких точек. просто числа. далее переводи в такое же число заданый адрес, и если конец_диапазона >= заданый_адрес >= начало_диапазона то yes, иначе нет. UPD поскольку коллега Green_Bear успел написать ответ быстрее меня, читай его код (правда я неуверен что он правильный) |
надо было уточнить как задан диапазон
уточняй сразу что нужно и пиши пример так: PHP код:
|
кез, а чо там не правильного? поставить * за место цифры =)) например 127.0.*.*
и все =\ правда я не учел, что твое... например 127.0.0.1 - 127.0.0.15 =\ но это уже надо более точно узнать у автора топика, что ему конкретно надо. |
PHP код:
|
2GreenBear твой код неправильный. сравнивать символы на равенство?)
2TaNkist это вообще что? 2BlackLogic а это что? -- вообще советую перечитывать свои сообщения перед постом. ЗЫ сегодня победил кез. |
покажи правильное.
|
тк в пхп тип Integer по-умолчанию знаковый и ip2long может вернуть отрицательное значение, то делаем так:
Цитата:
|
ну у каждой задачи есть множесвто решений. так что если ты делаешь по другому, то не значит что у других не правильно :)
другое дело, что я вопрос не правильно понял =). .. как уже написал выше. |
2 GreenBear
Нет... Как раз у него всё правильно. Блин, только допечатал, а он уже написал. Свой пример удалил. |
ну хорошо я буду делать только так, как делает зако. п***ец
|
Цитата:
Всякие там функции типа _http://php.net/ip2long _http://php.net/long2ip использовать намного правильнее нежели эм.м.. другое...вот. |
мда... у меня работает код? - да. тогда хули вы прикопались как он работает? =((
оцтаньте. как хачу, так и пешу. |
Цитата:
|
PHP код:
|
2BlackLogic код у тебя некорректный ;)
|
Цитата:
Пусть он любой берёт. Все примеры работают. |
>>Пусть он любой берёт. Все примеры работают.
твой код НЕ работает, потому что например 10>-9, но сдвинем по кругу и что тогда? ;) |
Цитата:
У меня всё работает прекрасно. В чём проблема-то. Объясни тогда подоступнее... |
2BlackLogic ты имеешь представление о хранении целых чисел в памяти? я про современную архитектуру. простой пример, -1 и 255 типа char (один байт) будут выглядеть в памяти одинаково, в то же время (-1<255)==true понимаешь к чему я клоню? ip2long возвращает значение ip адреса (целое знаковое число размером в 4 байта). пхп его обрабатывает и у себя и на более низком уровне сравнивает два знаковых числа, так как в коде пхп они были обьявлены как signed, то сравнение идет уже действительно двух знаковых чисел. и если unsigned результат ip2long был больше (но не более чем на 2^31-1;)) чем 2^31-1 к примеру, то это число считается уже отрицательным. а отрицательное меньше положительного в результате, хотя как тебе кажется - больше ;)
--- кстати, так к слову, если есть число a, то -a получается простой инверсией битов и прибавлением единицы. |
Терь понятно.
Так как же быть? Кому верить то теперь?! ;) |
2BlackLogic ну я хз конечно, но учитывая что ни один из приведенных кодов не работает, то видимо мой) тем более такая иллюстрация "алгоритма" предложенного кезом выглядит нагляднее:)
|
Ух... в какие степи вас занесло...
В общем... Использовал Код:
<? Рассматривал только те примеры в которых идет выборка ip из диапазона :)) Sorry за кривой топик "Сравнение..." но нужно было выяснить именно принадлежность к диапазону... ВСЕМ спасибо за ответы... |
Цитата:
ip2long - не самый безопасный способ. только если кроме REMOTE_ADDR не будет больше ничего передаваться. |
Вот такой вот скриптик сварганил:
PHP код:
|
| Время: 07:35 |