Consiglierei di usare solo md5 o qualcosa di concettualmente equivalente.
Rinominando i file digerendone i contenuti non solo garantisci l'unicità (sempre le immagini della cache il più a lungo possibile, e con la ridenominazione basata sul contenuto, beh, con quella corretta, puoi memorizzare le immagini praticamente per sempre).
Inoltre, non è un grosso problema, ma tuttavia non è un caso puramente ipotetico quando diversi utenti caricano esattamente la stessa immagine. Avrai subito una piccola ottimizzazione per l'archiviazione dei dati.
Come per qualsiasi altra cosa proposta: per quanto mi riguarda, sono un strong oppositore di mantenere qualsiasi tipo di informazione ausiliaria in un nome di file. Quando ero molto più giovane (e un po 'più magro :), ero uno sviluppatore di Perl e avevo l'abitudine dubbia di memorizzare tante informazioni ausiliarie nel nome del file come mi ha permesso il buon senso, dal momento che le caratteristiche del pattern di stringa Perl sono fantastiche. E sono giunto alla conclusione che, parlando di sviluppo web, è sempre una scelta migliore per mantenere i dati associati al file separatamente dal nome del file.
Tenere presente che al giorno d'oggi, quando le interfacce mobili sono dominanti, il nome del file effettivo è una cosa meno importante di 5, 10 anni fa. Ma anche se questo sarà cruciale nel contesto della tua applicazione, puoi sempre coinvolgere qualche magia vecchia scuola con coinvolgendo Content-Disposition: attachment; filename="pretty_file_name.jpg"
intestazione HTTP, costruendo qualsiasi nome di file rilevante che desideri. Inoltre, i browser moderni stanno aprendo la strada al nuovo attributo HTML5, download . Non credo che vedere il nome dell'immagine "leggibile" sia una cosa a cui dovresti pensare nella maggior parte dei casi.
UPD: È possibile apportare una modifica per non avere troppi file in una directory: basta prendere le prime 3 lettere e creare dir.