Almacenar imágenes en base de datos con PHP

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Almacenar imágenes en el servidor de producción con PHP es muy sencillo. Basta subir un fichero y, tras unas comprobaciones rutinarias, almacenarlo en el directorio deseado con move_uploaded_file(). Si nunca has usado esta técnica, puedes revisar este post.

En este artículo veremos cómo almacenar una imagen en forma de datos binarios en una tabla de una base de datos de MySQL.

LA BASE DE DATOS

Lo primero que debemos tener es, por supuesto, una base de datos con una tabla para almacenar las imágenes. Para este post yo he creado una muy simple con los campos mínimos necesarios, aunque tu base de datos puede tener las tablas y campos que necesites. La base de datos se llama imagenes y la tabla que he creado (alarde de creatividad), tiene el mismo nombre:

En lo que debemos fijarnos es en el campo llamado imagen, que es de tipo BLOB, lo que permite almacenar datos de hasta 65535 bytes. Si tus imágenes van a tener mayor tamaño, una vez convertidas a datos binarios, deberías usar un campo mayor, cómo LONGBLOB, que te permite imágenes de hasta 4 Gb. No obstante, piénsatelo. Si no es imprescindible, es aumentar innecesariamente el tamaño de tu base de datos. Si tienes un elevado número de registros, podrías llegar a experimentar ralentizaciones muy molestas.

ALMACENANDO LA IMAGEN

Lo primero es. cómo no, enviar la imagen al servidor. Vamos a hacerlo con un código muy simple que nos sirve, únicamente, para ilustrar el funcionamiento de esto. Se llama subir.php:

El script que recibe la imagen se llama grabar.php:

Cómo puedes ver, lo que hacemos es convertir el fichero subido a una cadena codificada en base 64, que luego es la que almacenamos en la base de datos. Podríamos haber incluido un filtro, para comprobar, por ejemplo, que el tipo MIME del archivo subido corresponda a una imagen, pero eso lo damos, en este ejemplo, por sentado.

LEER LA IMAGEN

Bien. Ya tenemos una imagen almacenada como datos, en nuestra tabla. Ahora viene el momento de leerla y poder enviarla como imagen al navegador, de modo que sea visible para el usuario.

Lo primero es leer los datos y descodificarlos en base 64, para recuperar el original. Esto lo hacemos mediante un script al que hemos llamado leer.php:

Por último, usamos el retorno de este script en mostrar.php, para que se renderice la imagen original en el navegador:

Y ya está. Cómo ves, fácil y rápido.

     

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *