Cita:
Iniciado por ocp001a Generar un aleatorio para evitar nombres irrepetibles tarde o temprano va a generar una colisión.
Yo hago algo muy simple.
Si la imagen está asociada a un registro, creo una carpeta con el id del registro, dentro de la carpeta almacenos las imágenes asociadas al registro y ni siquiera tengo que almacenar el nombre de las imágenes en la base de datos ya que cuando quier recuperar las imágenes sólo leo todo lo que hay en la carpeta.
Si la imagen no se asocia a un registro o bien si la carpeta donde se va a almacenar las imágenes es compartida, simplemente verifico si el nombre existe, y si existe hago un ciclo agregando un número hasta que ya no exista, por ejemplo:
suben la imagen patito.jpg si existe, agrego el número 1, si existe patito1.jpg, paso al 2, si existe patito2.jpg.... así hasta que no haya un archivo con el mismo nombre.
Eso va a hacerse pesado cuando vayas por el patito99999: para agregar otro patito vas a estar comprobando 99999 veces si existen patitos.
Si lees mi post donde doy los pasos a, b y c, veras que compruebo que no existe un nombre, pero a diferencia de tu modelo, no compruebo tantas veces si hay una colision.