random'la dosyaya ad vermek

Kodla Büyü

cakkoyun

Aktif Üye
Mesajlar
230
function isim($isim){
$karakterler = "1234567890abcdefghijklmnopqrstuvwxyz";
for($i=0;$i<8;$i++){
$yeni .= $karakterler{rand(0,35)};
}
return md5(sha1($yeni));
}

yukardaki fonksiyonla kullanıcıların upload ettikleri dosyalara isim veriyorum, şimdi aynı ismin tekrarlanma olasılığı gerçek rastgelelik presibine göre
(1/35) üzeri 8
şimdi çok çok çok küçük bir ihtimal olsa da aynı ismin tekrarlanma olasılığı var. veri tabanındaki her resmin ismini tarayıp eşleştirmeden bu tekrarlanma olasılığını nasıl ortadan kaldırırız?

yoksa php' nin random komutunun bir sistemi mi var tekrarlanmayan?(çok saçma oldu bu cümle :) )
 
Hocam asp'de ben dosya isimlerini GünAyYıl+RandomSayı olarak vererek kullanıyordum... PHP bilmiyorum ama çözüm olabilir...
 
hocam çok teşekkür, süper fikir. başına gün ay yıl eklemek ihtimali çok çok daha aza indirgese de aynı gün içinde hatta saat eklersek aynı saniye içinde bile tekrarlama ihtimali var.
Aslında ben tam olarak çözüm arıyorum diyemiycem. sonuçta "(1/35) üzeri 8" ihtimal de hiçbir zaman gerçekleşmeyecek ve benim işimi fazlasıyla görüyor. aslında biraz takıntı oldu, tam olarak tekrar ihtimali olmayan döngüyü arıyorum. milyon tane kayıt olduğunu da düşünürsek veritabanındaki kayıtları tek tek karşılaştırmak server'ı yorar.

aha şimdi yazarken bir fikir geldi aklıma şöyle:
bir kereye mahsus tekrarsız dosya isimleri barındıran bir txt dosyası oluşturmak. sonra txt'den sırayla isimleri çekmek. :idea:

yeni fikirlerinizi de bekliyorum :)
 
istersen time() fonksiyonunu kullan. microtime kullan. ama teorik olarak benzersiz bir isim bulma ihtimalini 0 yapamazsın . dosya adını 8değilde 16 yap ihtimali iyice düşürürsün.
ayrıca resmi saklayacağın dizinde random olarak belirlediğin dosya varmı yokmu kontrol edebilirsin. veritabanına bağlanmadan.
dosya varsa yeniden isim belirlersin. yoksa devam edersin

kolay gelsin
 
klasörde o isimde dosya varsa yeniden isimlendir, yeniden isimlendieilince de varsa tekrar çalıştır ve tekrar ve tekrar ama kaç kere? yani o klasörde o isimde dosya olmayana kadar kontrol ettirmek için döngü kurmak imkansız.

özet olarak pratikte: time() fonksiyonu+16karakterden oluşan random dosya ismi+klasörün içindeki dosya varsa kontrol eden(file_exists) 20 defa dönen bir döngüyle (for) tekrarlama ihtimali yok. ama teorik olarak yine var.

uf neyse başınızı ağrıttım gereksiz yere. sanırım dosya ismi havuzu oluşturmak, teorik olarak tekrarlanmasını imkansızlaştıran tek seçenek.
 
BBNET
Geri
Üst