Nahrada za ip2long a long2ip – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nahrada za ip2long a long2ip – PHP – Fórum – Programujte.comNahrada za ip2long a long2ip – PHP – Fórum – Programujte.com

 

marioff0
Expert
25. 10. 2009   #1
-
0
-

zdravas,

nedavno som zistil ze funkcie ip2long a long2ip nie su velmi spolahlive (niekedy davaju ine vysledky na linux strojoch a winoch)..

tak som napisal vlastnu funkciu (za 5 min :D ):

function my_ip2long($ip) {

$ipe=explode(".",$ip);
return (($ipe[0]*256+$ipe[1])*256+$ipe[2])*256+$ipe[3];
}

function my_long2ip($ipv) {
$ipp[0] = floor($ipv / 16777216);
$ipv -= $ipp[0] * 16777216;
$ipp[1] = floor($ipv / 65536);
$ipv -= $ipp[1] * 65536;
$ipp[2] = floor($ipv / 256);
$ipp[3] = $ipv - ($ipp[2] * 256);
return $ipp[0].".".$ipp[1].".".$ipp[2].".".$ipp[3];
}


prosim nebicujte ma ak to neni moc dobre... pisal som to 5 min aj z uvazovanim... ide o to ze sa to bude vykonavat casto, cize potrebujem zrychlit beh tychto funkcii.. a uz nic efektivnejsie ma nenapada... newie niekto???

+ co bude podla Vas rychlejsie... ukladat do databazy ip vo formate:
varchar(12) = 195.154.45.2
bigint(20) = 3358297517 - cize vysledok funkcie ip2long.

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
new_pope0
Newbie
25. 10. 2009   #2
-
0
-

To marioff : Keby som mal cas tak by som to testol nejaky cyklom co bude rychlejsie :smile1:, z hlavy si myslim ze rychlejsie bude bigint

Nahlásit jako SPAM
IP: 82.119.109.–
d.mostek0
Návštěvník
25. 10. 2009   #3
-
0
-
Nahlásit jako SPAM
IP: 88.146.211.–
www.dominik-mostek.cz
d.mostek0
Návštěvník
25. 10. 2009   #4
-
0
-

To marioff : Jinak já bych to řešil spíš přes bitové operátory.

$ip[0] = ($longIP & (255 << 24)) >> 24;

$ip[1] = ($longIP & (255 << 16)) >> 16 ;
$ip[2] = ($longIP & (255 << 8)) >> 8;
$ip[3] = $longIP & 255;


Posuny jsou sice pro procesor záhul, ale asi menší než to dělení, násobení, sčítání, zaokrouhlování v tvém příkladu.



Nahlásit jako SPAM
IP: 88.146.211.–
www.dominik-mostek.cz
marioff0
Expert
26. 10. 2009   #5
-
0
-

To d.mostek : ja pouzivam mysql...

diki za navrh... ale je tam ale... moc bitove operatory nemusim (mozno je to tym ze ich dobre nechapem :) ), zatial som si vystacil z logickymi, ale ok... vyskusal som si tie posuny teda v praxi:

ale vyslo z toho toho:

napr: z IP: 56.25.41.12 longIP=941173004
vysledok: 52415.41.12

napr: z IP: 209.77.125.4 longIP=3511516420
vysledok: -71477.125.4

proste vzdy posledne 2-3 cislice su dobre... ale zvysok nejaka blbost...

teraz som trochu v pomykove... :( ...

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Prog.0
Věrný člen
26. 10. 2009   #6
-
0
-

Ešte som to nepoužil, ale nebolo by jednoduchšie ukladať IPv4 do BINARY(4) ? Myslím že aj sortovať a testovať, či patria do rozsahu by sa potom dali rovnako ako long-y. Odpadla by tak nutnosť toho prevodu.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
marioff0
Expert
26. 10. 2009   #7
-
0
-

To Prog. : no... newiem ci by bolo binary vhodnejsie , ohladom rychlosti... ale ide aj o to ze uz mam tabulku zo 167k riadkami, ktore obsahuju longy...

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Prog.0
Věrný člen
26. 10. 2009   #8
-
0
-

veď to neviem ani ja, neviem ako sa binary chova pri indexovaní, ešte som to nepoužil. Ale myslím že to bude rovnaké ako pri INT-e.

Bola reč o biginte, no stačiť bude o polovicu menší INT (UNSIGNED), viď. http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html.

V prípade BINARY by si rovno tie 4 čísla IP adresy uložil ako 4 bajty a potom nazad, čo mi príde podstatne jednoduchšie.


A previesť tých 167k riadkov z bigint do binary tiež nebude problém, myslím.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
hrach
~ Redaktor
+1
Boss
26. 10. 2009   #9
-
0
-

my v projektu používáme binární, a není problém. tedy, nějaký zásadní. vše se dá vyřešit (cachováním, indexy, atp.)

Nahlásit jako SPAM
IP: 90.179.27.–
http://jan.skrasek.com@hrachcz – webdeveloper
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Nahrada retazca — založil Marek

Nahrada exploreru — založil Zavi

Náhrada za mysql_num_rows — založil ZačínamSphp

Náhrada eregi — založil Martin

Náhrada websocket — založil Tomáš

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý