Si trabajas en un ambiente donde tienes limitada la escritura de archivos o el acceso FTP, estés experimentando o simplemente no quieres tener un montón de archivos de imágenes esparcidos por ahí, tienes la opción de almacenar las imágenes que suben tus usuarios directamente en una base de datos (MySql, PosgreSQL, SQLite, etc) como Strings, codificados usando Base 64.
Las principales desventajas de esta técnica son:
- El tamaño de la base de datos se incrementa significativamente
- Se consume gran parte de los recursos de procesamiento, debido a que es una operación muy intensiva, en especial en imágenes demasiado grandes.
Codificar:
// archivo_usuario es el nombre del control de tu formulario HTML $data = base64_encode(file_get_contents($_FILES['archivo_usuario']['tmp_name']));
Es una buena idea validar el archivo subido para verificar que realmente es una imagen. Si tienes la extensión GD habilitada, coloca lo siguiente antes de leer y codificar:
if (!getimagesize($_FILES['archivo_usuario']['tmp_name'])) { ... }
La función de arriba será falsa si GD piensa que el archivo subido no es realmente una imagen válida.
Decodificar:
// Debes saber el MIME type de la image // En este ejemplo usamos image/png echo '<img src="data:image/png;base64,"'.base64_decode($data).' alt="" />';
Tener en cuenta que la URI de data tiene soporte limitado en IE<=8, soportando solo imagenes de menos de 32 kb y solo en determinados elementos.
De todas maneras, es mas recomendable conectarte con un directorio usando las capacidades FTP de PHP.
No hay comentarios:
Publicar un comentario