Foros del Web » Programando para Internet » PHP »

mejorar codigo para renombrar archivos

Estas en el tema de mejorar codigo para renombrar archivos en el foro de PHP en Foros del Web. hola!! tengo este código que al subir un archivo se fija si ya existe, como? al hacer una consulta a la base de datos pregunto ...
  #1 (permalink)  
Antiguo 28/09/2012, 13:39
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
mejorar codigo para renombrar archivos

hola!!

tengo este código que al subir un archivo se fija si ya existe,
como? al hacer una consulta a la base de datos pregunto si el nombre del archivo ya esta guardado, si es así lo renombra y vuelve a hacer una consulta a la base y vuelve a preguntar si el nuevo nombre existe, si es así le suma al contador y vuelve a renombrar

Código PHP:
Ver original
  1. /**saber extension y nombre**/
  2. $extension = pathinfo($fileName, PATHINFO_EXTENSION);
  3. $nombre_base = basename($fileName, '.'.$extension);
  4.  
  5. /**si existe el archivo lo renombra**/
  6. $cont=1;
  7. $sql_query="select nombre_archivo from repositorio where nombre_archivo='$fileName'"; //pregunto en mi base de datos si ya existe ese nombre
  8. $res=mysql_query($sql_query) or die('Error en la consulta: '.mysql_error());
  9. while($row = mysql_fetch_array($res,MYSQL_ASSOC)){
  10.     if($row['nombre_archivo']==$fileName){ //si llega a haber coincidencia
  11.                $fileName=$nombre_base."(".$cont.").".$extension;
  12.         echo "si existe ".$fileName;
  13.         $sql_query2="select nombre_archivo from repositorio where nombre_archivo='$fileName'"; //pregunto en mi base de datos si el nuevo nombre ya existe
  14.         $res2=mysql_query($sql_query2) or die('Error en la consulta: '.mysql_error());
  15.         while($row2 = mysql_fetch_array($res2,MYSQL_ASSOC)){
  16.             if($row2['nombre_archivo']==$fileName){ //si llega a haber coincidencia
  17.                 $cont++;
  18.                 $fileName=$nombre_base."(".$cont.").".$extension;
  19.                 echo "si existe otra ves".$fileName;
  20.             }
  21.         }
  22.     }
  23. }

y funciona pero no es lo que necesito, me explico:

por ejemplo:

subo presentacion1.ppt -> lo guarda ok

subo otra vez presentacion1.ppt -> me muestra el echo1 y el nuevo nombre si existe presentacion1(1).ppt lo guarda ok

subo otra vez presentacion1.ppt -> me muestra el echo1 y echo 2 con el nuevo nombre si existe otra ves presentacion1(2).ppt lo guarda ok

ya tengo en la base:

presentacion1.ppt
presentacion1(1).ppt
presentacion1(2).ppt

ahora

subo otra vez presentacion1.ppt -> me muestra el echo1 y echo 2 con el nuevo nombre si existe otra ves presentacion1(2).ppt

y lo guardaria y tendría en la base:

presentacion1.ppt
presentacion1(1).ppt
presentacion1(2).ppt
presentacion1(2).ppt



se soluciona poniendo otra consulta a la base despues de re-renombrar el archivo, pero que pasa si se quiere guardar una y otra vez el mismo archivo? tendría que hacer consultas infinitamente o algo asi

como podría hacer para que se hiciera recursivo o iterativo???

es decir cada vez que renombre se haga la misma consulta a la base hasta que ya no encuentre coincidencias se salga del ciclo???

gracias
  #2 (permalink)  
Antiguo 28/09/2012, 13:50
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: mejorar codigo para renombrar archivos

No necesitas recursión, con iteración es suficiente. Yo en vez de guardar el nombre del archivo en la bd, guardo el archivo en una carpeta cuyo nombre es el id de registro. Digamos tenemos un ticket no. 345 con 8 imágenes asociadas a él, no tengo 8 imágenes almacenadas en la bd, creo una carpeta de nombre tickets/345 y dentro las imágenes que sean.

Pero regresando a tu caso, debes consultar más o menos así:
Código PHP:
Ver original
  1. $cont=1;
  2. while(mysql_num_rows(mysql_query("select nombre_archivo from repositorio where nombre_archivo='$fileName'"))){ //pregunto en mi base de datos si ya existe ese nombre, mientras me devuelva datos
  3.     $fileName=$nombre_base."(".$cont.").".$extension;
  4.     $cont++;
  5. }

En cuanto salga del while, el filename que quede estará libre.
  #3 (permalink)  
Antiguo 01/10/2012, 09:16
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: mejorar codigo para renombrar archivos

hola ocp001a

disculpa la tardanza de mi respuesta...

Probé tu código y funciona perfecto, te agradezco tu ayuda

Saludos!!

Etiquetas: mejorar, mysql, renombrar, sql
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 05:23.