Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Функция на mysql 5.0.18 (Igorek) 02/03/2006 - 14:35:01



From: Igorek - 02/03/2006 - 14:35:01
Subject:Функция на mysql 5.0.18
-----------------
Есть функция на php
[code]
function net_match($network, $ip) {
// determines if a network in the form of 192.168.17.1/16 or
// 127.0.0.1/255.255.255.255 or 10.0.0.1 matches a given ip
$ip_arr = explode('/', $network);
$network_long = ip2long($ip_arr[0]);

$x = ip2long($ip_arr[1]);
$mask = long2ip($x) == $ip_arr[1] ? $x : 0xffffffff << (32 -
$ip_arr[1]);
$ip_long = ip2long($ip);
// echo ">".$ip_arr[1]."> ".decbin($mask)."\n";
return ($ip_long & $mask) == ($network_long & $mask);
}
[/code]

Хочеться ее сделать на mysql - я делаю, так но у меня проблема с отдачей маски подсети.
(функция не дописана)

DROP FUNCTION IF EXISTS net_match;
delimiter '/';
CREATE FUNCTION net_match(network varchar(32), ip varchar(16)) returns varchar(32)
begin
declare network_long bigint;
declare x varchar(16);
declare x1 bigint;
declare mask varchar(32);
declare ip_long bigint;

set ip_long=INET_ATON(ip);
set network_long=INET_ATON(SUBSTRING_INDEX(network,'/',1));

if LOCATE('/',network)!=0
then set x=trim(SUBSTRING_INDEX(network,'/',-1));
set x1=INET_ATON(x);
else set x='0';
set x1=0;
end if;

if (x=INET_NTOA(x1))
then set mask=x1;
else set mask=CONV('FFFFFFFF',16,10) << (32 - x1);
end if;

return mask;

end;
/




[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
26757



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |