Resimler için benzersiz, kısa dosya adları

5 Cevap

Ne benim kullanıcı yüklenen görüntüler oldukça kısa, ama eşsiz isimleri yeniden adlandırmak için en iyi yolu olurdu?

uniqid() ?

5 Cevap

uniqid () çalışacak.

Ama aynı zamanda gerçek görüntünün bir hash değeri yapmak için () md5 () veya SHA1 kullanabilirsiniz. Birisi iki kez bir görüntü yükler eğer gereksiz dosyaları azaltacaktır.

Size dosya adları muhtemelen kısa olmayacağını kabul etmek zorunda kalacak, ancak en iyi uygulama RFC 4122 ve hızlı PHP uygulamalarından biri şudur:

// Execution (1000 IDs) took 7.509 milliseconds
// Example uuid: f40bc6a1-3bce-4472-add8-bbbe500b7f72
function mimec_uuid()
{
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0fff ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) );
}

Şahsen olsa, ben Flickr gibi ölçekli gerek yoktu projeleri başarıyla aşağıdaki (daha hızlı ve daha kısa) algoritması kullanmışlardır:

// Execution (1000 IDs) took 5.097 milliseconds
// Example uuid: 2c2e4067d1c92109660b8deecae1be08
function xuuid()
{
    return md5(microtime() . mt_rand( 0, 0xffff ));
}

Çok basit bir yaklaşım, bazı benzersiz bir kullanıcı kimliği ve zaman damgası kullanmak için

$imgName = md5($userEmail.microtime());

Ben görüntüleri SEO amaçlar için, orijinal görüntü adı ile upload izin. Ben bozulmadan orijinal dosya tutmak, Google, ve diğerleri, Batman veya Eyfel Kulesi kullanıcıların görüntülerini bulacaksınız. Yani ben sadece ön mktime ekleyin ve sonra kaydedin.

$imagename = str_replace(' ','-',$imagename);
$imagename = str_replace('_','-',$imagename);
$target_path = $_SERVER['DOCUMENT_ROOT']."/uploads/".mktime()."-".$imagename;

Ne bir 32 haneli bir MD5 oluşturulan görüntü dosya ile yanlış? Çok uzun gerçekten.

If like Bryan, you're going to let them use their own filenames, make sure you strip any bad characters like: '". etc for safety sake.