Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Php, сравнение Ip (вопрос) |

05.03.2007, 15:51
|
|
Новичок
Регистрация: 09.01.2007
Сообщений: 9
Провел на форуме: 28497
Репутация:
21
|
|
Php, сравнение Ip (вопрос)
Здраствуйте...
Подскажите пожалуйста как можно проверить принадлежит ли ip адрес заданному диапазону?
PHP код:
<?
$s="$REMOTE_ADDR";
if (?????) {
echo "yes!";
}
else {
echo "No!";
?>
Если криво задал вопрос, скажите- перефразирую  )
сорри за глупые вопросы, умные пока придумать не могу... 
Последний раз редактировалось Химический_Ёжик; 05.03.2007 в 15:54..
|
|
|

05.03.2007, 16:03
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
PHP код:
$check_ip = explode('.', "127.0.0.2");
$user_ip = explode('.', $_SERVER['REMOTE_ADDR']);
for($i=0;$i<4;$i++){
if (($check_ip[$i] == $user_ip[$i]) OR $check_ip[$i] == "*") $do = true;
else {$do = false; break; }
}
if($do) echo 'yes';
else echo 'no';
|
|
|

05.03.2007, 16:04
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
пусть $d1 и $d2 - диапазоны в виде "x.x.x.x" (например 1.2.3.4 - 1.2.3.100)
переводи их в числа (4-байтные как бы) чтобы небыло никаких точек. просто числа.
далее переводи в такое же число заданый адрес, и если
конец_диапазона >= заданый_адрес >= начало_диапазона
то yes, иначе нет.
UPD
поскольку коллега Green_Bear успел написать ответ быстрее меня, читай его код (правда я неуверен что он правильный)
Последний раз редактировалось KEZ; 05.03.2007 в 16:08..
|
|
|

05.03.2007, 16:10
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
надо было уточнить как задан диапазон
уточняй сразу что нужно и пиши пример так:
PHP код:
<?
$d1 = "1.2.3.4"; $d2 = "1.2.3.10"; # или по другому, как хотел то?
$s=$_SERVER["REMOTE_ADDR"]; # так правильнее
if (?????)
{
echo "yes!";
}
else
{
echo "No!";
} # забыл "}"
?>
|
|
|

05.03.2007, 16:13
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
кез, а чо там не правильного? поставить * за место цифры =)) например 127.0.*.*
и все =\
правда я не учел, что твое... например 127.0.0.1 - 127.0.0.15 =\
но это уже надо более точно узнать у автора топика, что ему конкретно надо.
|
|
|

05.03.2007, 16:26
|
|
Участник форума
Регистрация: 06.04.2006
Сообщений: 257
Провел на форуме: 367179
Репутация:
76
|
|
PHP код:
$text="$REMOTE_ADDR";
$text=strrev($text);
$last =strchr($text, ".");
$last =strrev($last);
if ($last=="127.0.0.") {
echo "yes!";
}
else {
echo "No!";
|
|
|

05.03.2007, 18:31
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
2GreenBear твой код неправильный. сравнивать символы на равенство?)
2TaNkist это вообще что?
2BlackLogic а это что?
--
вообще советую перечитывать свои сообщения перед постом.
ЗЫ сегодня победил кез.
|
|
|

05.03.2007, 18:34
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
покажи правильное.
|
|
|

05.03.2007, 18:39
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
тк в пхп тип Integer по-умолчанию знаковый и ip2long может вернуть отрицательное значение, то делаем так:
<?
$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';
}
?>
самому не нравится...
Последний раз редактировалось ZaCo; 05.03.2007 в 19:16..
|
|
|

05.03.2007, 18:41
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
ну у каждой задачи есть множесвто решений. так что если ты делаешь по другому, то не значит что у других не правильно 
другое дело, что я вопрос не правильно понял =). .. как уже написал выше.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|