ip2long() ve long2ip() Fonksiyonları Kullanımı
IP adresi kayıtlarını IP kontrolleri, IP yasaklama, hit sayma, oylama yapma vb. gibi nedenlerle tutmamız gerekebilir. Ancak veritabanında IP adresi tutmak çok güvenli bir yöntem değildir. Bu yüzden PHP’nin bize sağladığı ip2long() ve long2ip() fonksiyonları ile IP adreslerini sayısal değerlere dönüştürüp veritabanına kayıt işlemleri yapılmalıdır. Basit anlaşılması için md5 ile şifrelemek gibi düşünebilirsiniz. Fonksiyon kullanımlarını açıklamadan önce birkaç bilgi vermekte fayda var.
- 32 bitlik verinin ister signed olsun ister unsigned olsun alabileceği maksimum değer onluk sisteme göre 232‘dir.
- 32 bitlik signed değer aralığı –2,147,483,648 ile 2,147,483,647
- 32 bitlik unsigned değer aralığı 0 ile 4,294,967,295
ip2long() Fonksiyonu Kullanımı
ip2long() fonksiyonu IP adresini 32 bitlik signed (işaretli) bir değere dönüştürür (ya negatif ya da pozitif bir değer). Eğer pozitif bir değer dönerse problem değil ama negatif bir değer dönerse bunu printf kullanarak pozitif bir değere dönüştürmeliyiz. Dönüştürme işlemi şu şekilde gerçekleşiyor;
örneğin -5000 sayısını elde ettik diyelim, 32 bitten elde edilebilecek toplam sayıdan yani 4,294,967,296’dan 5000 çıkardığımızda IP adresinin pozitif değerini bulmuş oluruz. Daha sonra elde ettiğimiz değeri veritabanına kaydedebiliriz. Sizin için bu aritmetik işlemler önemli değil, fonksiyon bunları otomatik olarak zaten yapıyor, sadece fonksiyonun nasıl çalıştığını anlattım.
<?php $ip = "192.0.35.122"; $long = ip2long($ip); echo $long; // Çıktı: -1073732742 printf("%u", $long); // Çıktı: 3221234554 // 4294967296 - 1073732742 = 3221234554 ?>
long2ip() Fonksiyonu Kullanımı
long2ip() fonksiyonu ip2long() fonksiyonundan elde ettiğimiz değeri tekrar IP adresine dönüştürür. Bir nevi ip2long() fonksiyonunun sağlaması diyebiliriz.
<?php $ip = long2ip(3221234554); echo $ip; // Çıktı: 192.0.35.122 ?>