Foros del Web » Programando para Internet » PHP »

rename nombre?

Estas en el tema de rename nombre? en el foro de PHP en Foros del Web. Hola, yo tengo echo un codigo para subir archivos, pero quisiera que cuando suban se reemplaze el nombre del archivo por uno al azar y ...
  #1 (permalink)  
Antiguo 20/10/2004, 23:37
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 14 años, 6 meses
Puntos: 0
rename nombre?

Hola, yo tengo echo un codigo para subir archivos, pero quisiera que cuando suban se reemplaze el nombre del archivo por uno al azar y si ese numero que crea ya esta (digamos que en el directorio ya hay un archivo con ese nombre) siga creando hasta encontrar alguno que no este, yo tengo:

//estas son las variables que manejo en mi codigo:
$upload_dir (carpeta/)
$filename (archivo.exe)

esto es lo que puse para q' me tire el error cuando el archivo ya esta:
Código PHP:
if(file_exists($upload_dir.$filename)){
echo 
"<hr size='1' width='60%'><br>El nombre del archivo $filename ya existe.";
?> 
Pero no se como hacer para que me de una variable nueva ($new_file) con el nombre cambiado.

por ejemplo, si mi archivo se llama "hola.exe" que cree otros nombres, como "0001534.exe" y si ese nombre ya esta en mi carpeta "carpeta/" que cree otro nombre arbitrario "31232.exe"

Me explico? como puedo hacerlo?


Saludos.
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.

Última edición por Sebastian1046; 20/10/2004 a las 23:38
  #2 (permalink)  
Antiguo 21/10/2004, 07:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. puedes tener ese "if() con tu file_exists() en una función ... y otro código que elija aleatório el nombre del archivo en caso de que exista. Para esto te vendría bien usar algo de "recursividad".

Algo tipo:

Código PHP:
<?
function existe_archivo($archivo,$i=0){
   if(
file_exists($archivo)){
      
$i++; 
      
$archivo=$archivo."_".$i;
      
existe_archivo($archivo,$i);
   } else {
        return 
$archivo;
   }
}

echo 
"Nombre archivo que quedó: ".existe_archivo($upload_dir.$filename);
?>
No lo he probado .. pero debería ir si no me falla la recursividad. El ejemplo genera un nombre secuencial tipo:

nombrearchivo_n° desde 1 a N. si es que se va encontrando algo tipo nombrearchivo_1 .. genera nombrearchivo_2 .. etc ...

Un saludo,
  #3 (permalink)  
Antiguo 25/10/2004, 16:11
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 14 años, 6 meses
Puntos: 0
no, no me funciona.

en la misma carpeta puse estos archivos:

avatar_06.gif
rename.php


y en "rename.php" puse:

Código PHP:
<? 

$archivo 
"avatar_06.gif";

function 
existe_archivo($archivo,$i=0){ 
   if(
file_exists($archivo)){ 
      
$i++; 
      
$archivo=$archivo."_".$i
      
existe_archivo($archivo,$i); 
   } else { 
        return 
$archivo
   } 


echo 
"Nombre archivo que quedó: ".existe_archivo($archivo); 
?>
cuando yo ingreso a "rename.php", tendria que cambiar el nombre del archivo (por que ya esta) y decirme como quedo el nombre nuevo del archivo, pero no funciona, saben por que?
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.

Última edición por Sebastian1046; 25/10/2004 a las 16:12
  #4 (permalink)  
Antiguo 25/10/2004, 16:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues parece que me falló la recursividad ...

Me faltó un

return $archivo;

bajo el existe_archivo($archivo,$i); (antes del } else ....

Y otro detalle, el _n° se añade al final de nombe.php_1 .. nombre.php_2 .. etc .. eso puedes solventarlo tomando la extensión del archivo.

Un saludo,
  #5 (permalink)  
Antiguo 25/10/2004, 16:44
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 14 años, 6 meses
Puntos: 0
Ahora SI! muchas gracias.
Ahora voy a investigar como soluciono el detalle "nombe.php_1" para que quede asi nombe_1.php.

Saludos
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.
  #6 (permalink)  
Antiguo 26/10/2004, 11:02
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 14 años, 6 meses
Puntos: 0
Hay esta, separe la extención, pero tengo un problema, el codigo me funciona si lo pongo en la carpeta de las imagenes, pero no puedo hacerlo funcionar si lo pongo afuera y decir que las imagenes estan en "images/", hago lo que hago me sigue buscando en la misma carpeta, ayuda?

Código PHP:
<? 
$filename01 
"avatar_06.gif";
$upload_dir "images/"

function ++;
    }
    
// return new filename
    
return $new_filename $filename_noExt $copy $filename_extension// ohne basefolder!
}

echo 
"Nombre archivo que quedó: ".autoRename($filename01); 
?>
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.

Última edición por Sebastian1046; 27/10/2004 a las 15:16
  #7 (permalink)  
Antiguo 26/10/2004, 14:15
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 14 años, 6 meses
Puntos: 0
up ..........
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.
  #8 (permalink)  
Antiguo 26/10/2004, 14:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sebastian .. parece que usastes otro código al final .. (perfectamente válido .. un bucle while() ...)

Podrías revisar que devuelve todo esto en en tu bucle while() (al interior) haciendo un echo:

$filename_noExt . $copy . $filename_extension

ahí observa que es lo que se está generando y compara con lo que tengas en tu directorio ..

Un saludo,
  #9 (permalink)  
Antiguo 26/10/2004, 15:06
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 14 años, 6 meses
Puntos: 0
Cita:
Iniciado por Cluster
Sebastian .. parece que usastes otro código al final .. (perfectamente válido .. un bucle while() ...)

Podrías revisar que devuelve todo esto en en tu bucle while() (al interior) haciendo un echo:

$filename_noExt . $copy . $filename_extension

ahí observa que es lo que se está generando y compara con lo que tengas en tu directorio ..

Un saludo,
Si, eso ya lo había probado, puse:

Código PHP:
while(file_exists($upload_dir $filename_noExt $copy $filename_extension)) { 
Y así no me busca el archivo dentro de la carpeta
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.

Última edición por Sebastian1046; 26/10/2004 a las 15:07
  #10 (permalink)  
Antiguo 26/10/2004, 15:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te decía de hacer un

echo $esas variables ...

a ver que valor van tomando para que compruebes si es lo que esperas ..

Un saludo,
  #11 (permalink)  
Antiguo 26/10/2004, 16:12
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 14 años, 6 meses
Puntos: 0
ah, perdon entendi mal.

SE!!! funciona, con la ayuda de los echo's lo pude arreglar, el problema era que "$upload_dir" tenia que estar dentro de la funcion:

Código PHP:
function autoRename($filename01) {
    
$filename01 "avatar_06.gif";
    
$upload_dir "images/"
    
$path pathinfo($filename01); 
despues agregue dentro del while el "$upload_dir".
Código PHP:
while(file_exists($upload_dir $filename_noExt $copy $filename_extension)) { 
Muchisimas gracias y perdona por molestar tanto

Saludos y no me canso de decir muchisimas gracias por la ayuda!
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.

Última edición por Sebastian1046; 26/10/2004 a las 16:15
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 14:19.