php rasgele isim

8 Cevap

HI

Nedir, bir klasör için rasgele bir ad oluşturmak için en iyi yolu nedir?

Onun belgeleri depolamak için bir klasör adında kullanılan olacak. Ama Çok sayıda klasörler oluşturulmuş olacak ve bu yüzden eğer mümkünse her zaman benzersiz olması için ihtiyacı vardır.

Uzunluk muhtemelen yaklaşık 7 karakter olmalıdır.

8 Cevap

Benzersiz olması gerekiyorsa, o zaman ben rastgele olmak ve sadece bir sayaç artırmak unutun. Tüm iyi, bir veritabanındaki kayıtları ile klasörlerin içeriğini ilişkilendirmek gerekir. Sen sadece veritabanındaki bir değiştirmemesi sütun var ve klasör adının bir parçası olarak kullanabilirsiniz.

Ayrıca PHP'nin uniqid() , with the param more_entropy ayarlanmış true deneyebilirsiniz.

Ya da sha1( microtime() )

Burada kullandığım fonksiyonu bulunuyor:

function makeRandomString($max=6) {
    $i = 0; //Reset the counter.
    $possible_keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $keys_length = strlen($possible_keys);
    $str = ""; //Let's declare the string, to add later.
    while($i<$max) {
    	$rand = mt_rand(1,$keys_length-1);
    	$str.= $possible_keys[$rand];
    	$i++;
    }
    return $str;
}

EDIT: Bill Lizard dediği gibi, daha iyi sayaç çeşit eklemek istiyorum. Çok olası olsa da, aynı dize iki kez yaratılmış olabilir mümkündür.

7 karakter klasör adı sert ve hızlı bir kural (limit nedeni nedir) mi?

Ben YYYYMMDDHHMMSS kullanmak (ve kendinizi birçok çarpışmaları bulursanız milisaniye ekleyin).

Nerede

  • YYYY = dört basamaklı tarih
  • mm = iki haneli ay
  • DD = iki basamaklı gün
  • HH = iki basamaklı (24 saat) saat
  • MM = iki basamaklı dakika
  • SS = iki haneli ikinci

Ayrıca tekrar denemeden önce dizin zaten oluşturulmuş olup olmadığını görmek için test etmek ve daha sonra milisaniye rastgele bir sayı uyumak isteyebilirsiniz.

PHP-Kodu:

<?php
$dirName = date( 'YmdHis', time() );
@mkdir( $dirName )
?>

Eğer gerçekten rastgele olması gerekiyor?

If you need it to be unique I'd suggest creating a counter and converting the integer number to hex or even better base 36(26 chars + 10 digits). After creating the folder increase the counter and you're good to go.

php standart bir fonksiyon, tam olarak bunu yapıyor tmpnam vardır; (aslında dosyası oluşturur, ama silmek ve daha sonra klasör olarak kullanabileceğiniz benzersiz bir dosya adı oluşturur :)

benzersiz olması şartı ve 7 karakterleri ile ben muhtemelen tabanı 36 (0-9 ve az) kodlanmış bir sayı kullanmak istiyorum, bu şekilde sadece son klasör ne olduğunu görmek ve yeni bir tane oluşturmak için incrememnt edebilirsiniz.

"rh" . mt_rand(10000,99999)

Sonra bu eşsiz olmadığını görmek ve bu değilse yeniden kontrol edin. Daha az yanlış gidebilir çünkü bir şekilde bu, bir sayaç gibi, devlet tasarruf daha iyidir.

do {
  $f = "rh" . mt_rand(10000,99999);
} while (file_exists($f));