Foros del Web » Programando para Internet » PHP »

Renombrar archivos subidos

Estas en el tema de Renombrar archivos subidos en el foro de PHP en Foros del Web. Tengo el siguiente script, del cual quiería ver de que forma se podrían renombrar el nombre de los archivos, es decir, cambiar el nombre por ...
  #1 (permalink)  
Antiguo 01/01/2008, 08:46
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 18 años, 11 meses
Puntos: 0
Renombrar archivos subidos

Tengo el siguiente script, del cual quiería ver de que forma se podrían renombrar el nombre de los archivos, es decir, cambiar el nombre por ejemplo por el id de la tabla... o algun método que no duplique el nombre del archivo.

Código PHP:
<?php        

$extension 
explode(".",$archivo_name);
$num count($extension)-1;
if((
$extension[$num] == "jpg") OR ($extension[$num] == "gif") OR ($extension[$num] == "JPG") OR ($extension[$num] == "bmp") OR ($extension[$num] == "GIF")) 
{   
    if(
$archivo_size 70000000)   
    {  
       if(!
copy($archivo,"fotos_productos/".$archivo_name))  
           {  
             
           }   
           else  
           {  
           
$link=Conectarse();  
           
mysql_query("INSERT INTO productos (id, estilo, tipo, estado, foto_producto) VALUES ('','$estilo','$tipo','$estado', '$archivo_name')",$link); 
          
           }   
    }   
    else   
    {  
    
    }  
      
}   
else   
{     
  
}   
?>
  #2 (permalink)  
Antiguo 01/01/2008, 10:41
 
Fecha de Ingreso: noviembre-2007
Mensajes: 60
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Renombrar archivos subidos

Hola Raules!

Lo que puedes hacer es generar un string aleatorio o un numero. Para no sobreescribir o tener problemas a la hora del upload..

Por ejemplo, para hacerlo con un string puedes usar:

Código PHP:
<?php         

$extension 
explode(".",$archivo_name); 
$num count($extension)-1
if((
$extension[$num] == "jpg") OR ($extension[$num] == "gif") OR ($extension[$num] == "JPG") OR ($extension[$num] == "bmp") OR ($extension[$num] == "GIF"))  
{    
    if(
$archivo_size 70000000)    
    {   
       if(!
copy($archivo,"fotos_productos/".$archivo_name))   
           {   

$strings 'abcdefghijklmNopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';

$long 6// la longitud del string

$nuevo_string '';

// hacemos un loop para generar un string

for ($i=0$i <= $long$i++){
$rand rand(0strlen($strings));
$nuevo_string .= $strings[$rand];
}

$nuevo_name $archivo_name $nuevo_string;

rename ("fotos_productos/".$archivo_name,"fotos_productos/".$nuevo_name);
              
           }    
           else   
           {   
           
$link=Conectarse();   
           
mysql_query("INSERT INTO productos (id, estilo, tipo, estado, foto_producto) VALUES ('','$estilo','$tipo','$estado', '$archivo_name')",$link);  
           
           }    
    }    
    else    
    {   
     
    }   
       
}    
else    
{      
   
}    
?>
Y para poder hacerlo con numericos:
Código PHP:
<?php         

$extension 
explode(".",$archivo_name); 
$num count($extension)-1
if((
$extension[$num] == "jpg") OR ($extension[$num] == "gif") OR ($extension[$num] == "JPG") OR ($extension[$num] == "bmp") OR ($extension[$num] == "GIF"))  
{    
    if(
$archivo_size 70000000)    
    {   
       if(!
copy($archivo,"fotos_productos/".$archivo_name))   
           {   

$long 6// la longitud del rand

$nuevo_rand '';

for(
$i=0;$i<=$long;$i++){
$nuevo_rand .= rand(0,9);
}

$nuevo_name $archivo_name $nuevo_rand;

rename ("fotos_productos/".$archivo_name,"fotos_productos/".$nuevo_name);
              
           }    
           else   
           {   
           
$link=Conectarse();   
           
mysql_query("INSERT INTO productos (id, estilo, tipo, estado, foto_producto) VALUES ('','$estilo','$tipo','$estado', '$archivo_name')",$link);  
           
           }    
    }    
    else    
    {   
     
    }   
       
}    
else    
{      
   
}    
?>
Si quieres, tambien puedes agregarlo al final el dia, fecha, hora, etc. Como para hacerlo mas dificil de tener dos o mas archivos iguales.

Saludos, mauro
  #3 (permalink)  
Antiguo 01/01/2008, 13:13
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
Re: Renombrar archivos subidos

yo que tu primero creo el registro en la tabla y luego copio la imagen a otra carpeta, asi evitas que haya imagenes muertas y ademas de esta manera puedes obtener la id con "mysql_insert_id();" y ponersela al nombre del archivo.
  #4 (permalink)  
Antiguo 01/01/2008, 15:27
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 18 años, 11 meses
Puntos: 0
Re: Renombrar archivos subidos

Entonces por lo que estoy viendo las imagenes renombradas van a otra carpeta..., pero si yo luego quiero ver la imagen correspondiente a tal id como lo tendría que hacer? porque en la BD se guardará el nombre de la imagen verdadero no?
  #5 (permalink)  
Antiguo 30/03/2008, 08:14
 
Fecha de Ingreso: noviembre-2007
Mensajes: 30
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Renombrar archivos subidos

os complicais demasiado. ya hay funciones que desordenan cadenas de caracteres.
he creado esta sencilla función que genera una cadena con numeros, letras mayusculas y minusculas.

Código PHP:
  function text_rand(){
  
$listacaracteres="abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  
$desordenadastr_shuffle($listacaracteres);
  
$hjk=rand(0,50);
$capada substr($desordenada,$hjk,10);
return 
$capada;
  } 
  #6 (permalink)  
Antiguo 30/03/2008, 10:29
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: Renombrar archivos subidos

mira yo estoy trabajando justamente en eso y ya lo tenia hecho :) ojala te sirva

Código PHP:
function random(){

            
$str "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz234567890";
            
$cad "";
            for(
$i=0;$i<10;$i++) {
                
$cad .= substr($str,rand(0,120),1);
            }

    return 
$cad;


luego lo usas cuando mueves el archivo subido... en este caso estoy dejando los archivos en la carpeta imagen
Código PHP:
//recuerda colocar el nombre de tu input file en lugar de ['archivo']

$nombre_archivo $_FILES['archivo']['name'];
$nombre_archivo=random().".jpg";

  if(
move_uploaded_file($_FILES['archivo']['tmp_name'], "imagenes/$nombre_archivo")){

                      
$msg.="El archivo ha sido cargado correctamente.<br>";
                   

          } 
y si estas subiendo archivos multiples debes agregar el indice a la matriz $_file

Código PHP:
$_FILES['archivo']['tmp_name']['$indice'
Eso, Saludos.
__________________
Nuevamente a las pistas ...
  #7 (permalink)  
Antiguo 18/04/2008, 01:01
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 18 años, 11 meses
Puntos: 0
Re: Renombrar archivos subidos

Perdonad tambien por esta pregunta, pero hay alguna forma de que me deje subir videos? o el porque no me deja subir archivos grandes?
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 11:22.