Foros del Web » Programando para Internet » PHP »

Renombrar una imagen en PHP

Estas en el tema de Renombrar una imagen en PHP en el foro de PHP en Foros del Web. Buen día a todos. Tengo un problema al subir imágenes a mi base de datos, empezare explicando que en mi web la gente puede hacer ...
  #1 (permalink)  
Antiguo 23/10/2014, 02:00
 
Fecha de Ingreso: octubre-2014
Mensajes: 38
Antigüedad: 10 años, 1 mes
Puntos: 0
Renombrar una imagen en PHP

Buen día a todos.

Tengo un problema al subir imágenes a mi base de datos, empezare explicando que en mi web la gente puede hacer publicaciones y en ellas pueden colocar una imagen entonces quiero que el nombre de la imagen que seleccionen los usuarios para subirla se 'renombre' para evitar que hayan imágenes con el mismo nombre, es pos eso que me gustaría que se re nombraran con un mismo patrón y que fuera incrementando el numero por ejemplo: 001, 002, 003 etc. Les dejo el código que estoy ocupando para subir las imágenes.

Código PHP:
<?php

if(isset($_POST['submit'])) {


    
// Datos de conexión a configurar
    
$server "localhost";
    
$user "root";
    
$pass "0107";
    
$bbdd "hmdb";
 
    
// Ruta donde se guardarán las imágenes
    
$directorio $_SERVER['DOCUMENT_ROOT'].'/p/uploads/';
 
    
// Conecto a la BBDD
    
$dbh mysql_connect($server$user$pass);
    
$db mysql_select_db($bbdd);
 
    
// Recibo los datos de la imagen
    
$nombre $_FILES['imagen']['name'];
    
$tipo $_FILES['imagen']['type'];
    
$tamano $_FILES['imagen']['size'];
 
    
// Muevo la imagen desde su ubicación
    // temporal al directorio definitivo
    
move_uploaded_file($_FILES['imagen']['tmp_name'],$directorio.$nombre);
 
// Guardamos en la BBDD        
        
$link mysql_connect ($server$user$pass);
        
mysql_select_db($bbdd,$link);

//Nos Aseguramos de que no aya otra imagen con el mismo nombre        
        
$queEmp "SELECT nombre_archivo FROM tablaimagenes WHERE nombre_archivo='$nombre'";
        
$resEmp mysql_query($queEmp$link) or die(mysql_error());
        
$totEmp mysql_num_rows($resEmp);
        if(
$totEmp 0){
        echo 
"El Nombre De La Imagen No Esta Disponible. <a href='javascript:history.back();'>Regresar Y Cambiar El Nombre</a>";
        exit();
        }


    
$sql "INSERT into tablaimagenes (nombre_archivo) values ('$nombre')";
    
$resultado mysql_query($sql);
 
    
// Por si queremos la ID asignada a la imagen
    
$id mysql_insert_id();



        
// Ahora comprobaremos que todo ha ido correctamente
        
$my_error mysql_error($link);

        if(!empty(
$my_error)) {

            echo 
"Ha habido un error al insertar los valores. $my_error";

        } else {

            echo 
"Imagen introducida satisfactoriamente";

        }

    } else {

        echo 
"Error, Todavia NO Ha Selecionado Nada";

    }

?>
  #2 (permalink)  
Antiguo 23/10/2014, 03:04
 
Fecha de Ingreso: octubre-2013
Mensajes: 30
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: Renombrar una imagen en PHP

Buenas amigo, creo que esto es lo que necesitas http://php.net/manual/es/function.rename.php
Un abrazo!

Última edición por Charlie1; 23/10/2014 a las 03:34
  #3 (permalink)  
Antiguo 23/10/2014, 06:30
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Renombrar una imagen en PHP

Al nombre de la imagen le podrías concatenar algo así:

Código PHP:
<?php
    $helper 
round(microtime(1) * 100);
    
$name  $name.$helper;
?>
Con eso no vas a tener problemas.
Saludos :)
  #4 (permalink)  
Antiguo 23/10/2014, 15:33
 
Fecha de Ingreso: octubre-2014
Mensajes: 38
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Renombrar una imagen en PHP

Cita:
Iniciado por GeekGirl Ver Mensaje
Al nombre de la imagen le podrías concatenar algo así:

Código PHP:
<?php
    $helper 
round(microtime(1) * 100);
    
$name  $name.$helper;
?>
Con eso no vas a tener problemas.
Saludos :)
Gracias por tu pronta respuesta @GeekGirl mi duda es ¿Que realiza ese código?
  #5 (permalink)  
Antiguo 23/10/2014, 16:10
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Renombrar una imagen en PHP

microtime() devuelve la fecha actual en formato Unix con milisegundos. round() lo redondea a un numero entero, y multiplicarla por 100 hace el rango más amplio y por lo tanto, menos "repetible".

Al concatenar a tu imagen ese número, es imposible que se repita el nombre del archivo. Te dejé links a la documentación de las funciones en cada una.
Saludos ^^
  #6 (permalink)  
Antiguo 23/10/2014, 23:40
 
Fecha de Ingreso: octubre-2014
Mensajes: 38
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Renombrar una imagen en PHP

Cita:
Iniciado por GeekGirl Ver Mensaje
[URL="http://php.net/manual/es/function.microtime.php"]microtime()[/URL] devuelve la fecha actual en formato Unix con milisegundos. [URL="http://php.net/manual/en/function.round.php"]round()[/URL] lo redondea a un numero entero, y multiplicarla por 100 hace el rango más amplio y por lo tanto, menos "repetible".

Al concatenar a tu imagen ese número, es imposible que se repita el nombre del archivo. Te dejé links a la documentación de las funciones en cada una.
Saludos ^^
¡Muchas gracis GeekGirl! Me ha servido de mucho y te lo agradezco pero de pura casualidad ¿hay forma de renombrarlas con un patrón en numero de forma ascendente (0001,0002,etc)?
  #7 (permalink)  
Antiguo 24/10/2014, 01:07
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Renombrar una imagen en PHP

Podrías guardar las imágenes con un nombre tipo "imagen_5.jpg", luego, cuando vayas a guardar otra, buscas el nombre de la última imagen guardada en la BD, tomas la parte numérica (la que está entre el guión bajo y el punto), le aumentas uno y lo asignas al nombre de la nueva imagen.

Código PHP:
Ver original
  1. $consulta = "SELECT
  2.                SUBSTRING_INDEX(
  3.                    SUBSTRING_INDEX(nombre_archivo, '_', -1), '.', 1
  4.                ) + 1 AS valor
  5.             FROM tablaimagenes ORDER BY id DESC LIMIT 1";
  6. $query = mysqli_query($conexion, $consulta) or exit ('Ocurrió un error');
  7. if (mysqli_num_rows($query)){
  8.     $row = mysqli_fetch_array($query);
  9.     $nombreFinal = $nombre . '_' . $row['valor'] . $tipo; //imagen_6.jpg
  10. }
  11. else{
  12.     $nombreFinal = $nombre . '_1' . $tipo; //imagen_1.jpg
  13. }

En la consulta, tomo la parte del nombre que va desde la derecha del guión bajo y de esta, tomo la parte que va desde la izquierda del punto, le sumo 1 y, a dicho valor, le asigno 'valor' como alias. Luego, si la consulta devuelve resultados (si ya se guardaron imágenes en la BD), concateno el nombre de la nueva imagen con un guión bajo, el valor incrementado en la consulta y el tipo de imagen, caso contrario, hago el mismo proceso, solo que el valor numérico será 1 puesto que, al no devolver resultados la consulta, quiere decir de que aún no se han guardado imágenes y esta sería la primera.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 24/10/2014 a las 02:37 Razón: Actualización

Etiquetas: mysql, renombrar, select, sql, tabla, usuarios
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:08.