Еще один вопрос по диапазону ip и функции ip2long

WebSQLNeeder

Новичок
Еще один вопрос по диапазону ip и функции ip2long

Вопрос такой.

Если я захочу добавить в свою базу новый диапазон айпи, например 212.42.42.0-50

То будет ли правильным просто приобразовать ip2long('212.42.42.0') = '-735434240' - это будет начальный диапазон, и ip2long('212.42.42.50') = '-735434190' - это будет конечный диапазон.

Так вот что странно число 735434240 БОЛЬШЕ 735434190 или "-" это именно знак минус ??

В общем как быть?

А проверяю наличие айпи в диапазоне и потом вывожу страну такой функцией, может у меня алгоритм не верный?

function ShowCountry($ip)
{
$ip=ip2long($ip);
$sql="SELECT country FROM ip_total WHERE startip<'$ip' AND endip>'$ip'";
$result=mysql_query($sql);
while ($ar=mysql_fetch_array($result))
{
return $ar["country"];break;
}

return "N/A ";
}
 

WebSQLNeeder

Новичок
Я читал этот пример в документации но не могу понять смысла приобразования, ну вот как оно получается:

$ip = gethostbyname('www.example.com');
$long = ip2long($ip);

echo $ip . "\n"; // 192.0.34.166
echo $long . "\n"; // -1073732954
printf("%u\n", ip2long($ip)); // 3221234342

-----------------------------------------------

И по сути: мне нужно приобразовать все как вы показали sprintf("%u", ip2long('192.168.0.1')); и эти значения заносить в базу?

То есть для начального диапазона взять sprintf("%u", ip2long('212.42.42.0')); а для конечного sprintf("%u", ip2long('212.42.42.50'));

Получаются значения для начального 3559533056 а для конечного 3559533106

И последний вопрос, моя функция ShowCountry($ip) с точки зрения алгоритма верно написана?

-~{}~ 17.10.05 12:56:

Разумеется с учетом последних изменений функция тогда изменится на:

function ShowCountry($ip)
{
$ip=sprintf("%u", ip2long($ip));
$sql="SELECT country FROM ip_total WHERE startip<'$ip' AND endip>'$ip'";
$result=mysql_query($sql);
while ($ar=mysql_fetch_array($result))
{
return $ar["country"];break;
}

return "N/A ";
}

А то что то у меня есть база данных диапазонов на 2 метра, но большинство айпи, которых я проверяю не идентифицируются ...
 

SiMM

Новичок
> Я читал этот пример в документации но не могу понять смысла приобразования, ну вот как оно получается:
Смысл преобразования в том, что знаковое число преобразуется в беззнаковое. Дело в том, что знаковое -735434240 - это четыре байта 0xD42A2A00. Если рассматривать это число как беззнаковое - получишь те самые 3559533056. Вам бы юноша с машинной арифметикой познакомиться поближе - тогда таких вопросов просто не будет.
 
Сверху