Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cómo renombrar un archivo en un formulario de carga

Estas en el tema de Cómo renombrar un archivo en un formulario de carga en el foro de PHP en Foros del Web. Que tal amigos, mi pregunta es la siguiente, tengo este archivo que me procesa la carga de una imagen al servidor, pero me gustaría saber ...
  #1 (permalink)  
Antiguo 05/04/2016, 17:25
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 7 años, 11 meses
Puntos: 0
Pregunta Cómo renombrar un archivo en un formulario de carga

Que tal amigos, mi pregunta es la siguiente, tengo este archivo que me procesa la carga de una imagen al servidor, pero me gustaría saber cómo podría hacer para que al cargar la imagen el archivo se renombre generando un nombre aleatorio. Mi código es el siguiente:

Cita:
<?php session_start(); ?>
<?php
//conexion a la base de datos
mysql_connect("localhost", "root", "") or die(mysql_error()) ;
mysql_select_db("howllermain") or die(mysql_error()) ;

//comprobamos si ha ocurrido un error.
if ($_FILES["imagen"]["error"] > 0){
echo "ha ocurrido un error";
} else {
//ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
//y que el tamano del archivo no exceda los 100kb
$permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
$limite_kb = 3000;

if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 1024){
//esta es la ruta donde copiaremos la imagen
//recuerden que deben crear un directorio con este mismo nombre
//en el mismo lugar donde se encuentra el archivo subir.php
$ruta = "imagenes/" . $_FILES['imagen']['name'];
//comprobamos si este archivo existe para no volverlo a copiar.
//pero si quieren pueden obviar esto si no es necesario.
//o pueden darle otro nombre para que no sobreescriba el actual.
if (!file_exists($ruta)){
//aqui movemos el archivo desde la ruta temporal a nuestra ruta
//usamos la variable $resultado para almacenar el resultado del proceso de mover el archivo
//almacenara true o false
$resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);
if ($resultado){
$nombre = $_FILES['imagen']['name'];
//'$nombre'
@mysql_query("INSERT INTO pp (userid,filedir,date)
VALUES ('{$_SESSION['id_usuario']}','$nombre',NOW())");
echo "el archivo ha sido movido exitosamente";
header("Location:/user/profile.php?id=$_SESSION[id_usuario]");
} else {
echo "ocurrio un error al mover el archivo.";
}
} else {
echo $_FILES['imagen']['name'] . ", este archivo existe";
}
} else {
echo "archivo no permitido, es tipo de archivo prohibido o excede el tamano de $limite_kb Kilobytes";
}
}

?>
  #2 (permalink)  
Antiguo 05/04/2016, 17:54
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años
Puntos: 169
Respuesta: Cómo renombrar un archivo en un formulario de carga

eso lo asignas aqui:

Código PHP:
Ver original
  1. $ruta = "imagenes/" . $_FILES['imagen']['name'];

si quieres que se llame imagen01.jpg pones:

Código PHP:
Ver original
  1. $nombre_nuevo = "imagen01.jpg"
  2. $ruta = "imagenes/" . $nombre_nuevo;

con la variable que tendrias que jugar y componer el nombre como quieras es $nombre_nuevo
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #3 (permalink)  
Antiguo 05/04/2016, 18:05
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 7 años, 11 meses
Puntos: 0
Respuesta: Cómo renombrar un archivo en un formulario de carga

crees que alguna función tipo md5 o sha1 funcione?
  #4 (permalink)  
Antiguo 05/04/2016, 18:56
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 3 meses
Puntos: 39
Respuesta: Cómo renombrar un archivo en un formulario de carga

A ver, no te confundas. md5, sha1, sha2, son métodos de encriptación de datos, si bien su función es generar una cadena, existe la posibilidad de que si dos personas suben una imagen llamada "perfil.png" tenga el mismo nombre.

Te recomiendo crear una carpeta por cada usuario que se registre, donde almacenes su foto y otras imágenes o documentos que necesites. O en su defecto, colocar esa SESSION de usuario como algun componente del nombre, también puedes usar rand() para sacar un numero aleatorio o la fecha y hora actual.

Posibilidades hay muchas.

Código PHP:
Ver original
  1. <?php
  2.  
  3. $ruta = "imagenes/" .  date("YmdHis") . $_FILES['imagen']['name'];
  4.  
  5. ?>

Esto puede ser una forma por ejemplo.
  #5 (permalink)  
Antiguo 05/04/2016, 19:59
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 7 años, 11 meses
Puntos: 0
Respuesta: Cómo renombrar un archivo en un formulario de carga

Excelente, muchas gracias por el apoyo! y con este script, cómo puedo hacer para que cree la carpeta con el id del usuario?

suponiendo que la variable del usuario es $userid por poner un ejemplo.
  #6 (permalink)  
Antiguo 05/04/2016, 20:13
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 7 años, 11 meses
Puntos: 0
Respuesta: Cómo renombrar un archivo en un formulario de carga

se duplicó comentario por error del sistema, una disculpa.
  #7 (permalink)  
Antiguo 05/04/2016, 21:12
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 3 meses
Puntos: 39
Respuesta: Cómo renombrar un archivo en un formulario de carga

Existe la función mkdir, si googleas un poco la encontrarás fácil. Aquí te dejo la documentación.

mkdir()

Su uso es algo así.

Código PHP:
Ver original
  1. <?php
  2. mkdir("/ruta/a/mi/directorio/$userid", 0755); //el primer parametro es la ruta, el segundo los permisos
  3. ?>
  #8 (permalink)  
Antiguo 06/04/2016, 14:09
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 7 años, 11 meses
Puntos: 0
Respuesta: Cómo renombrar un archivo en un formulario de carga

Excelente, muchas gracias!

Etiquetas: mysql
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 23:39.