Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/08/2011, 09:51
chilecr4
 
Fecha de Ingreso: julio-2010
Mensajes: 18
Antigüedad: 13 años, 9 meses
Puntos: 0
Uso de imagenes BLOB, de forma dinámica en PHP

Hola,

¿Me gustaría saber cuál es la forma correcta de trabajar con imágenes almacenadas en base de datos, cuando estas son cargadas de forma dinámica?

Les pongo un ejemplo para que me entiendan. Supongamos que estamos desarrollando un catálogo de productos. La página será siempre la misma para todos los productos: "producto.php". Lo que cambia es que por parámetro recibe el id del producto: "producto.php?id=23". Entonces las imágenes que cargue, serán dependientes de dicho id.

Ahora, supongamos que con una consulta a Base de Datos, cargamos la información del producto: nombre, descripción, foto (BLOB), etc, etc. El archivo de la foto, es subido, mediante un panel administrativo, por otro usuario y puede ser jpg, png, etc. Lo que pensé es que mediante fwrite escribo el binario recibido en un archivo, con una extension "tonta" (por las diferentes extensiones) y agregar esta extensión al apache para que sea tratada como imagen por el navegador.

Mi idea inicial era tener un archivo "tonto" para cada una de las imágenes en pantalla, en el cual cargo el BLOB y muestro la imagen. El problema es que si dos personas están viendo la página "producto.php" al mismo tiempo, pero con ids distintos, puede que la ejecución de "persona 2" sobre-escriba la información de la imagen "img001" antes de que el navegador de "persona 1" cargue la imagen, en este caso cargando la imagen incorrecta.

Pensé dinámicamente crear un archivo en la carpeta de sesión, pero no se encuentra dentro del dominio de archivos públicos, por razones obvias. Otras soluciones, como la típica de realizar la consulta a base de datos en un archivo "file.php" al que se le modifica el header, no me gusta mucho, ya que estoy trabajando PHP por Objetos y se supone que el objeto "Producto" de donde tomo la información para la página, ya contiene todos los datos que se necesitan: Producto->getNombre(), fwrite($file, Producto->getImagen()).

La idea es que las imágenes sean creadas dinámicamente, para evitar tener un montón de archivos en el servidor y no tener que preocuparme por borrarlas cuando se elimine un item.

Saludos y gracias,