Problema con imagenes

limay_22
08 de Febrero del 2009
Hola gente del Foro!! Les comento que soy un aprendiz y aficionado de la programación en PHP y estoy trabajando en mi primer proyecto que es una página de avisos clasificados donde los usuarios del sitio pueden añadir avisos con “Titulo”, “Descripción”, “datos de contacto”, “imágenes”.
- Las imágenes se guardan en el directorio “imágenes/subidas/”
- Los Thumbnail se guardan en el directorio “imágenes/Thumbs”
- Las rutas de las imágenes se guardan en la base de datos.

Por el momento va todo muy bien pero me encontré con el siguiente problema:
Ej.: Si un usuario publica un aviso con una imagen llamada “miaviso.jpg” y otro usuario o el mismo usuario publica otro aviso con una imagen también llamada “miaviso.jpg” estarían compartiendo la misma imagen. Y esto es de gran problema ya que las imágenes podrían tener el mismo nombre pero ser diferentes.

Quisiera saber si existe alguna manera da cambiar el nombre a las imagen al momento de subirlas al directorio o si alguien tiene alguna solución para ayudarme a resolver este problema.

A continuación les dejo el código que utilizó para subir las imágenes
[PHP]
<?php
$destino = 'imagenes/subidas' ; // destino de guardado de la imagen real
move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino . '/' . $_FILES [ 'file' ][ 'name' ]);

$ruta=$_FILES [ 'file' ][ 'name' ];
$thumbs="tn_".$_FILES [ 'file' ][ 'name' ];

function thumbjpeg($imagen,$anchura) {

// Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande".
$dir_thumb = "../thumbs/";

// Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg",
// el thumbnail se llamaría "tn_imagen1.jpg"
$fecha=date("d-m-Y");
$prefijo_thumb = "tn_";
$camino_nombre=explode("/",$imagen);

// Aquí tendremos el nombre de la imagen.
$nombre=end($camino_nombre);

// Aquí la ruta especificada para buscar la imagen.
$camino=substr($imagen,0,strlen($imagen)-strlen($nombre));

// Intentamos crear el directorio de thumbnails, si no existiera previamente.
if (!file_exists($camino.$dir_thumb))
mkdir ($camino.$dir_thumb, 0777); // or die("No se ha podido crear el directorio $dir_thumb");

// Aquí comprovamos que la imagen que queremos crear no exista previamente
if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
//echo $camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>";
$img = imagecreatefromjpeg($camino.$nombre); // or die("No se encuentra la imagen $camino$nombre<br>n");
// miramos el tamaño de la imagen original...
$datos = getimagesize($camino.$nombre); // or die("Problemas con $camino$nombre<br>");

// intentamos escalar la imagen original a la medida que nos interesa
$ratio = ($datos[0] / $anchura);
$altura = round($datos[1] / $ratio);

// esta será la nueva imagen reescalada
$thumb = imagecreatetruecolor($anchura,$altura);

// con esta función la reescalamos
imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);

// voilà la salvamos con el nombre y en el lugar que nos interesa.
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
}

return "ok";
}

$imagen= $destino . '/' . $_FILES [ 'file' ][ 'name' ];

$proceso1= thumbjpeg($imagen, 125);

if($proceso1=="ok"){

//conectamos a la base
include('../include/config.php');

$result = mysql_query("INSERT INTO `imagenes` ( `id` , `ruta` , `thumbs` ) VALUES ('', '$ruta', '$thumbs')");
mysql_close($db);

if($result!=0){
echo "Se ha subido correctamente la imagen y se ha creado correctamente el Thumbnail !";
}
else{
echo "Ha ocurrido un error y no se ha podido subir la imagen, por favor, contacta a mariano ! :P";
}

}
?>
[/PHP]

Desde ya muchas gracias a todos

diemarc
08 de Febrero del 2009
Humm, podrias grabar con el nombre mas el id del anuncio, ej: mimagen1_[$id_anuncio].jpg o algo asi.