Foros del Web » Programando para Internet » PHP »

Incremento en el nombre de imagenes

Estas en el tema de Incremento en el nombre de imagenes en el foro de PHP en Foros del Web. Buenas... Tengo ese problema, no se como hacer para almacenar las imagenes en la base de datos y que todas tengan un nombre diferente y ...
  #1 (permalink)  
Antiguo 14/05/2009, 15:34
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Incremento en el nombre de imagenes

Buenas...

Tengo ese problema, no se como hacer para almacenar las imagenes en la base de datos y que todas tengan un nombre diferente y que a su vez se incremente.

O sea, 1.jpg, 2.jpg, 3jpg... etc....
El problema es que si es un sitio de visitas masivas, y obtengo el COUNT por una consulta, en el lapso de tiempo del SELECT y el INSERT puede que otro usuario este subiendo la foto, y se encimen los archivos.

Pense en utilizar carpetas por usuarios y "albumes", pero quiero saber si se puede hacer de otra manera sin recurrir a carpetas divisorias.

Gracias de ante mano por las ideas
  #2 (permalink)  
Antiguo 14/05/2009, 15:57
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 11 años, 11 meses
Puntos: 14
Respuesta: Incremento en el nombre de imagenes

La solución es una función recursiva y el uso de file_exists()

La idea sería esta:
Código PHP:
function nombreImg$num=) {
if ( 
file_exists"directorio/{$num}.jpg" ) ) {
$ret $num;
} else {
$ret nombreImg$num+);
}
return 
$ret;

Esto te devolvería el primero número que no haya sido asignado. Eso sí, lo he simplificado mucho, supongo que querrás completarla para contemplar otros posibles tipos de imagen como gif o png.
  #3 (permalink)  
Antiguo 14/05/2009, 15:59
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 11 años, 7 meses
Puntos: 416
Respuesta: Incremento en el nombre de imagenes

Pero sigue estando el problema de que si varios usuarios suben imagenes a la misma vez, se mezclen. Porque obtienes el numero de la ultima imagen, pero eso no se hace al mismo tiempo que la mueves desde /tmp hasta el directorio actual.
Yo digo que le des un nombre totalmente al azar, que no sean consecutivos. Talvez una mezcla de numeros y letras.
  #4 (permalink)  
Antiguo 14/05/2009, 16:00
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 11 años, 8 meses
Puntos: 35
Respuesta: Incremento en el nombre de imagenes

Si las imagenes pertenecen a un usuario, puedes utilizar el id_Usuario y agregarselo al principio de la imagen que ellos suban.
UsuarioID= 19
imagenQueSuben=foto1.jpg
nombreImagen=19_foto1.jpg
  #5 (permalink)  
Antiguo 14/05/2009, 16:02
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 11 años, 11 meses
Puntos: 14
Respuesta: Incremento en el nombre de imagenes

Opino igual, y es que no había leído la parte en la que dices que lo usa mucha gente a la vez. Yo he usado un código parecido al que he puesto, pero en un panel de administración, no en un lugar donde muchos usuarios puedan usarlo a la vez.
  #6 (permalink)  
Antiguo 14/05/2009, 16:03
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 12 años, 1 mes
Puntos: 9
Respuesta: Incremento en el nombre de imagenes

yo tenia una rutina para guardar imagenes y generarles el nombre que yo queria... pero es un poquito larga. Con el motivo de reducir mi codigo me guie de las FAQs y obtuve una rutina mas pequeña que te genera números random como nombre ... supongo yo que no creo que se repita ya que los numeros al azar son muchos (por eso no estoy muy seguro de esta rutina ... por ahora).

Basandonos en el principio de que es mas facil guardar el nombre del archivo en un campo de datos y el archivo fisico en una carpeta, ahi te va el codigo:

Código PHP:
<?php

ini_set 
"memory_limit""24M");
//***********************SUBIR IMAGEN NORMAL ********************************************/
if (is_uploaded_file($_FILES['imagen']['tmp_name'])  )
{
//recojo la imagen
$imagen $_FILES['imagen']['name'];
//Obtengo el nombre de la imagen y la extensión de la foto
$imagen1 explode(".",$imagen);
//Genero un nombre aleatorio con números y se asigno la extensión obtenido anteriormente
$imagen2 rand(0,9).rand(100,9999).rand(100,9999).".".$imagen1[1];
//Coloco la iamgen del usuario en la carpeta correspondiente con el nuevo nombre
move_uploaded_file($_FILES['imagen']['tmp_name'], "images/productos/".$imagen2);
//Asigno a la foto permisos
$ruta="images/productos/".$imagen2;
chmod($ruta,0777);
echo 
"Tu nueva imagen ha sido subida. ";
}
?>
__________________
Quitenme la vida pero no la bebida.
  #7 (permalink)  
Antiguo 14/05/2009, 16:30
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Incremento en el nombre de imagenes

Fua.. cuantas respuestas o.O

Podria usar las 2 al mismo tiempo, el ID y el rand por si acaso, yo soy muy mufa y si dependo solo del rand... algo va a pasar xD

Nunca subi una pagina a un host ya que empece hace poco con programacion web, alguien sabe si hay problema con la creacion de MUCHAS carpetas? o puedo recurrir a ese metodo sin problemas?

Gracias gente por las ideas :)
  #8 (permalink)  
Antiguo 14/05/2009, 16:41
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 11 años, 8 meses
Puntos: 35
Respuesta: Incremento en el nombre de imagenes

Calculo que no hay problema en crear x carpetas, pero crear x carpetas para x usuarios no es lo recomendable.
  #9 (permalink)  
Antiguo 14/05/2009, 16:49
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Incremento en el nombre de imagenes

Cita:
Iniciado por doylelives Ver Mensaje
Calculo que no hay problema en crear x carpetas, pero crear x carpetas para x usuarios no es lo recomendable.
Por?
  #10 (permalink)  
Antiguo 14/05/2009, 16:56
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 11 años, 8 meses
Puntos: 35
Respuesta: Incremento en el nombre de imagenes

Yo haria lo siguiente guardar todo en una carpeta images , luego para verlas bsucar aquellas que empiezan con el id de usuario determinado.
Si son de x temas, alli si te conviene crear por carpetas dentro images
  #11 (permalink)  
Antiguo 14/05/2009, 17:21
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Incremento en el nombre de imagenes

Pero por que decis que no es recomendable tantas carpetas? No ocupan espacio las carpetas vacias
  #12 (permalink)  
Antiguo 14/05/2009, 18:10
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 12 años, 1 mes
Puntos: 9
Respuesta: Incremento en el nombre de imagenes

Si un solo usuario va a tener varias imagenes (en ese caso) , quizas sea buena idea ordenarlas por carpetas, asi cuando elimines al usuario solo busca su carpeta, eliminas eso y su contenido.
__________________
Quitenme la vida pero no la bebida.
  #13 (permalink)  
Antiguo 14/05/2009, 18:55
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 11 años, 7 meses
Puntos: 416
Respuesta: Incremento en el nombre de imagenes

Cita:
Iniciado por Fernand0 Ver Mensaje
Pero por que decis que no es recomendable tantas carpetas? No ocupan espacio las carpetas vacias
¿Y si tienes 2,000 estudiantes?
¿Vas a tener 2,000 carpetas?
  #14 (permalink)  
Antiguo 14/05/2009, 21:44
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Incremento en el nombre de imagenes

Cual es el problema de tener 2.000 carpetas? No ocupan espacio las carpetas en si, es lo mismo sin carpetas que con carpetas
  #15 (permalink)  
Antiguo 15/05/2009, 15:07
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 11 años, 8 meses
Puntos: 35
Respuesta: Incremento en el nombre de imagenes

Ok utiliza 1 carpeta para cada usuario. Si tienes 2000 usuarios crearás 2000 carpetas.
Muy lindo, pero cuando creas cada carpeta que nombre le vas a poner a la carpeta?????
Es la historia del huevo y la gallina
Ademas tambien ten en cuenta que cuando desees mostrar las imagenes de x usuario deberas saber cual carpeta corresponde a ese usuario....
Se entiende por donde viene el problema?

Última edición por doylelives; 15/05/2009 a las 15:51
  #16 (permalink)  
Antiguo 15/05/2009, 15:49
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 11 años, 7 meses
Puntos: 416
Respuesta: Incremento en el nombre de imagenes

Cita:
Iniciado por Fernand0 Ver Mensaje
Cual es el problema de tener 2.000 carpetas? No ocupan espacio las carpetas en si, es lo mismo sin carpetas que con carpetas
Si tu crees eso xD Entonces adelante, estructura tu sitio asi.
  #17 (permalink)  
Antiguo 15/05/2009, 16:44
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Incremento en el nombre de imagenes

Cita:
Iniciado por doylelives Ver Mensaje
Ok utiliza 1 carpeta para cada usuario. Si tienes 2000 usuarios crearás 2000 carpetas.
Muy lindo, pero cuando creas cada carpeta que nombre le vas a poner a la carpeta?????
Es la historia del huevo y la gallina
Ademas tambien ten en cuenta que cuando desees mostrar las imagenes de x usuario deberas saber cual carpeta corresponde a ese usuario....
Se entiende por donde viene el problema?
Se le pone el nombre del usuario a la carpeta, total no hay mas de un usuario con el mismo nombre

Cita:
Iniciado por Ronruby Ver Mensaje
Si tu crees eso xD Entonces adelante, estructura tu sitio asi.
Estoy preguntando cual es el problema y nadie me dice, asi que no se porque decis "Si tu crees eso xD"....
En vez de decirme "bueno hace la web como el culo", decime bien cual es el problema :S

Saludos y gracias
  #18 (permalink)  
Antiguo 15/05/2009, 16:50
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 11 años, 8 meses
Puntos: 35
Respuesta: Incremento en el nombre de imagenes

Se puede pero no se debe. Si eres programador ¿sabes para que se crea una funcion?
Para ser eficiente, no eficaz.
Suerte mas adelante me cuentas!
pd: no te ofendas!!
  #19 (permalink)  
Antiguo 15/05/2009, 17:53
 
Fecha de Ingreso: febrero-2009
Ubicación: cancun!
Mensajes: 898
Antigüedad: 11 años
Puntos: 15
Respuesta: Incremento en el nombre de imagenes

yo de metiche y si se hace una tabla donde se suban las rutas de las imagenes relacionando el ID del usuario q lo subio asi evitas muchas carpetas y sabes donde estan las imagenes de cada uno
am sugerencisa saludines!!!
__________________
WHERE IS MY BLUE SUNNY SKY??
pd: todos los karmas son bienvenidos :D
  #20 (permalink)  
Antiguo 16/05/2009, 15:02
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Incremento en el nombre de imagenes

Gracias a todos por las ideas. Me decidi por usar directorios, me parece lo mas organizado, y puedo recurrir a ellos facilmente si los organizo bien.

De paso ya que estoy, hago la ultima pregunta..

Supongamos que subo 30 imagenes, son 30 INSERTs, todo bien hasta ahi, pero al mismo tiempo, le quiero poner nombre a la imagen y un comentario, por tanto, eso lo haria despues del INSERT, o sea, un UPDATE, pero serian otros 30 UPDATEs.... por tanto serian 60 consultas por persona(a mi criterio una locura)....

Pense en simplemente leer los nombres de los archivos de X carpeta(X album) y simplemente pegar las imagenes por el nombre de los archivos, y una vez que se pase al PASO Nº2... donde se le pone la info a las imagenes, recien ahi hacer los 30 INSERTs, y me ahorro los 30 UPDATEs, ahora bien hay que considerar que por ahi el usuario se saltee el PASO Nº2, y las imagenes queden sin guardarse en la base de datos(en este caso si haria los INSERTs sin el resto de la data), que tanto le haria al servidor leer un directorio de 30 imagenes?

Esto es una idea, por ahi es una locura, pero yo no tengo idea acerca del consumo de los diferentes metodos, por eso pregunto que es mejor, hacer 60 consultas o leer un directorio y en todo caso se haran los 30 INSERTs con la data en otra sesion?

  #21 (permalink)  
Antiguo 16/05/2009, 17:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 9 meses
Puntos: 2135
Respuesta: Incremento en el nombre de imagenes

El tema de las carpetas más que por si ocupan o no espacio es porque es más fácil para ti darle mantenimiento si tienes solamente una carpeta de uploads, donde nombres cada foto con el ID de foto que tengan o un string aleatorio, imaginate un dia que quieras respaldar o mover de sitio, vas a tener que estar bajando y subiendo carpetas.

Si ya tienes los comentarios y las fotos ¿porque no en el mismo INSERT insertas los datos de la foto y el comentario? Así te ahorras el otro paso y haces todo desde un mismo proceso.

Saludos.
  #22 (permalink)  
Antiguo 16/05/2009, 19:06
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Incremento en el nombre de imagenes

Teniendo esto.. /Images/GatorV/Album1/img1.jpg.. se podria respaldar/mover la carpeta Images directamente... no?(supongo yo que se deberia de poder..)

Porque lo estaria haciendo por Flash el upload, por tanto no podria obtener los datos al mismo tiempo que el upload, lo haria por pasos separados, a menos que no se, pida los datos en el Flash antes de que se inicie el upload de dicha imagen y luego paso la data del .swf al upload.php.... pero no me convence seria molesto esperar y estar mirando el monitor y llenar 60 inputs mientras se espera k se suban las imagenes

Tambien podria hacer el "PASO Nº2" primero, pero no tengo los conocimientos suficientes como para hacerlo en flash, por eso pregunto sobre ese metodo

Consume recursos la lectura del directorio como para abstenerse con visitas masivas? Total no estaria leyendo los archivos en si, sino sus nombres para luego usarlos

Saludos y gracias!
  #23 (permalink)  
Antiguo 16/05/2009, 21:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 9 meses
Puntos: 2135
Respuesta: Incremento en el nombre de imagenes

Pues sí pero es más tedioso pero sí así lo quieres hacer adelante , en ese caso sí no te queda de otra más que procesar primero las fotos, subirlas y luego agregar los comentarios (como lo hace Facebook por ejemplo).

Saludos.
  #24 (permalink)  
Antiguo 16/05/2009, 21:53
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Incremento en el nombre de imagenes

Bueno... espero que los UPDATEs no consuman demasiado, cualquier cosa lo cambio y ya

Muchas gracias GatorV

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:54.