Hkan adlı üyeden alıntı: mesajı görüntüle
Hocam eline sağlık ama çok karışık olmuş. Geliştirmek, değiştirmek isteyen biri için çözmesi bile belki saatler alır. Ben de kendi yazdığımı paylaşayım.

// Link kısaltma fonksiyonu, Hkan @ r10.net (biggboss35@gmail.com)
function shortenLink($q, $l = 5)
{
    $uc = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; // uc = usable chars;
    
    $return = '';
    for($i=0; $i < $l; ++$i)
    {
        $return .= $uc[rand(0, strlen($uc)-1)];
    }

    // MySQL controls
    $check = mysql_query("SELECT `abbr` FROM `link` WHERE `abbr` = '$return'");
    
    if($check && mysql_num_rows($check) > 0)
        return shortenLink($q, $l);
    elseif($check || @mysql_num_rows($check) == 0)
        $newLink = mysql_query("INSERT INTO link (`abbr`, `to`) VALUES ('$return', '$q')");
    // MySQL controls - end

    return $return;
}
Çalışma mantığı ve kullanımı:
  • shortenLink('http://site.com', '7') şeklinde kullanılabilir. 7 ibaresi oluşturulacak kısa bağlantının uzunluğunu belirler. Dilerseniz yazmayabilirsiniz.
  • Fonksiyon önce kullanılabilr karakterleri tanımlar.
  • return isimli boş bir değişken oluşturur.
  • For döngüsüyle 1'den başlayarak (PHP'de ilk sayı 0'dır. Döngüde bu yüzden $i = 0 yazıyor.) belirtilen uzunluğa ulaşana kadar return değişkenine rastgele bir karakter ekler.
  • Oluşturulan return değişkeninin daha önce kaydedilmiş olup olmadığına bakar, eğer varsa işlemi en baştan tekrarlar.
  • Son olarak kullanılmamış bir kısaltma bulduğunda bunu veritabanına kaydeder ve değeri döndürür.
  • Öneri: Veritabanı kullanmak istemezseniz 2 // MySQL controls etiketi arasındaki kodları silmeniz yeterli olur.

    MySQL Yapısı:
    +----+----------+-------+------------+
    | id | abbr     | to    | time       |
    +----+----------+-------+------------+
    |    |          |       |            |
    +----+----------+-------+------------+
Peki diyelim shortenLink('http://site.com', '1') şeklinde kullanmaya başladık ve ikinci denemedede aynısı denk geldi. Bunu nasıl kontrol edeceğiz?