Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> ipv6 a przechowywanie w mysql
reyder
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 2.03.2011

Ostrzeżenie: (0%)
-----


Witam. Jako, że myślę przyszłościowo to zastanawiam się nad ipv6 i napotkałem dość poważny problem. Mianowicie zastanawiam się jak przechowywać ipv6 w tabeli mysql. Zastanawiałem się nad 2-bigint, wtedy ipv6 zajmowało by drugą kolumnę biginta i łatwo było by rozróżnić jakie ip ma użytkownik, ale po dłuższym zastanowieniu jest to bardzo nie wygodne rozwiązanie. Drugi pomysł to przechowywanie w varchear, to chyba nie zbyt wydajny sposób, a trzeci to przechowywanie w postaci binarnej. Według mnie to najlepsze rozwiązanie. Zawadza mi tylko jeszcze jeden problem, że połowa adresów będzie ipv4 a druga połowa ipv6. Nie da się przekonwertować ipv4 użytkownika na wersje ipv6 i dopiero uaktualniać w bazie danych ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A nie pomślałeś by to zostawić jak najprościej jest? 4 pola typu int, które przechowują 4 bloki-32 bitowe jest już funkcja inet_atoi w()ięc czemu jej mamy nie używać? Rozwiązuje nam ona problem ipv4, ponieważ czwarty blok to będzie stary ipv4 i jego wtedy nie musimy tykać. Trzeci blok nam bedzie determinował z czym mamy do czynienia... Jeśli trafimy tam inet_atoi(0.0.255.255) to na bank mamy do czynienia z ipv4... By szybciej to sprawdzać założymy na ten trzeci blok indeks. Domyślnie te pola będą przyjmowały wartości:
Pierwsze: inet_atoi(0.0.0.0)
Drugie: inet_atoi(0.0.0.0)
Trzecie: inet_atoi(0.0.255.255)
Czwarte: można olać bo tu zawsze coś będzie.
Po stronie php jedynie ip będziemy dzielili na bloki 32-bitowe. Sprawdzimy czy podany ip będzie miał : (ipv6) czy może . (ipv4) i zareagujemy. Jeśli będą . to od razu, bez sentymentu, inet_atoi dla 4 bloku tylko bo mamy do czynienia z ipv4. Jeśli trafimy na : to musimy zrobić explode (zapewne po (IMG:style_emoticons/default/smile.gif) na 4 bloki i potem tylko już zapisać każdy z nich do odpowiedniego pola. Jako że będziemy mieć do czynienia z liczbą w heksach, to wystarczy po prostu walnąć hex2dec i pojechać z tym do bazy. Warto zapamiętać, że explode po : dla ::ffff:(ipv4 jako hexy) da nam elementy puste w tablicy wynikowej, a więc wtedy do bazy powinny lecieć zera.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 15:53