Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Php, сравнение Ip (вопрос) (https://forum.antichat.xyz/showthread.php?t=34720)

Химический_Ёжик 05.03.2007 15:51

Php, сравнение Ip (вопрос)
 
Здраствуйте...
Подскажите пожалуйста как можно проверить принадлежит ли ip адрес заданному диапазону?

PHP код:

<?
$s
="$REMOTE_ADDR";
if (?????) {
echo 
"yes!"
}
else {
echo 
"No!";
?>

Если криво задал вопрос, скажите- перефразирую :))
сорри за глупые вопросы, умные пока придумать не могу... :confused:

GreenBear 05.03.2007 16:03

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'


KEZ 05.03.2007 16:04

пусть $d1 и $d2 - диапазоны в виде "x.x.x.x" (например 1.2.3.4 - 1.2.3.100)
переводи их в числа (4-байтные как бы) чтобы небыло никаких точек. просто числа.
далее переводи в такое же число заданый адрес, и если
конец_диапазона >= заданый_адрес >= начало_диапазона
то yes, иначе нет.


UPD
поскольку коллега Green_Bear успел написать ответ быстрее меня, читай его код (правда я неуверен что он правильный)

KEZ 05.03.2007 16:10

надо было уточнить как задан диапазон
уточняй сразу что нужно и пиши пример так:
PHP код:

<?
$d1 
"1.2.3.4"$d2 "1.2.3.10"# или по другому, как хотел то?

$s=$_SERVER["REMOTE_ADDR"]; # так правильнее
if (?????)
{
echo 
"yes!"
}
else
{
echo 
"No!";
# забыл "}"
?>


GreenBear 05.03.2007 16:13

кез, а чо там не правильного? поставить * за место цифры =)) например 127.0.*.*
и все =\
правда я не учел, что твое... например 127.0.0.1 - 127.0.0.15 =\
но это уже надо более точно узнать у автора топика, что ему конкретно надо.

TaNkist 05.03.2007 16:26

PHP код:

$text="$REMOTE_ADDR";
$text=strrev($text);
$last =strchr($text".");
$last =strrev($last);
if (
$last=="127.0.0.") {
echo 
"yes!"
}
else {
echo 
"No!"


ZaCo 05.03.2007 18:31

2GreenBear твой код неправильный. сравнивать символы на равенство?)
2TaNkist это вообще что?
2BlackLogic а это что?
--
вообще советую перечитывать свои сообщения перед постом.
ЗЫ сегодня победил кез.

GreenBear 05.03.2007 18:34

покажи правильное.

ZaCo 05.03.2007 18:39

тк в пхп тип 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';
}
?>
самому не нравится...

GreenBear 05.03.2007 18:41

ну у каждой задачи есть множесвто решений. так что если ты делаешь по другому, то не значит что у других не правильно :)
другое дело, что я вопрос не правильно понял =). .. как уже написал выше.


Время: 01:17