Öneri ve Hata Raporu



Günün Sözü Asla yalnız yürümeyeceksin

kategori PHP
oylama 3/5 yorum 0 yorum yazar Hakan Taşan tarih 21 Haziran 2015

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. Örneği inceleyince olay daha iyi anlaşılacaktır.

Örnek

<?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
?>

 

paylaş Paylaş
oylama yap Oyla

makale yorumları YORUMLAR

Bu makale için yorum yazılmamış