Ver Mensaje Individual
  #24 (permalink)  
Antiguo 07/09/2013, 10:38
ocp001a
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Nombre irrepetible para imágenes

Cita:
Iniciado por Onedy Ver Mensaje
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.
Esto sería si todos los usuarios subieran archivos con el mismo nombre (para el ejemplo patito.jpg)

ahora bien, si en los pasos abc te refieres a

Cita:
Do {
genero con mt_rand un entero entre 0 y maxint, le saco el hash con md5 y le concateno la extension.
}mientras(exista un archivo con este nombre);
El caso es casi igual: entre más archivos haya con el mismo nombre, más veces se tendrá que comprobar, con el añadido de tener que crear el aleatorio y luego el hash.

La única ventaja sería si hay pocos archivos, pongamos por ejemplo un rango de 0 a 100, y ya se han subido 5 archivos.

Con mi método se tendría que comprobar 5 veces para que ya no se repitiera el nombre (patito 6).
Con tu método, es posible (de hecho muy probable) que a la primera nos diera un nombre diferente.

Pero ahora supongamos para el mismo rango de 0 a 100 nombres, que ya se han ocupado 80.

Con mi método, se harán 80 comprobaciones.
Con tu método, tanto es posible que nos de un número libre a la primera como es posible que nos de números ocupados muchas veces, ya que sólo tiene el 20 por ciento de posibilidades de acertar a un número libre, con lo que es posible que se hagan más de 80 comprobaciones. Y entre menos números libres queden la cantidad de comprobaciones aumentará.

Si haces una simulación a obtener números libres en estas condiciones lo verás.

Por otro lado, el método que yo propuse es para pocos archivos y sin depender de llevar un registro, si se va a almacenar muchos archivos en la misma carpeta y se sabe que va a haber repetidos, se puede hacer simplemente guardando el último nombre, digamos que llegamos a patito999, el siguiente secuencia será patito1000 y ya está.

Supongamos la prima vez que se guarda la imagen patito.jpg

Almacenamos sólo el nombre en algún lugar "patito/0"

si suben otro patito.jpg, comprobamos que ya existe, por lo tanto aumentamos el índice y lo almacenamos "patito/1";