Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

8
Desarrollo Web en Entorno Servidor 1. Introducción. 2. Almacenando en columnas BLOB. 3. Guardando vínculos a los ficheros de imagen. 1 Tema 11: Imágenes en bases de datos

Transcript of Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

Page 1: Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

Desarrollo Web en Entorno Servidor

1. Introducción.

2. Almacenando en columnas BLOB.

3. Guardando vínculos a los ficheros de imagen.

1. Introducción.

2. Almacenando en columnas BLOB.

3. Guardando vínculos a los ficheros de imagen.

1

Tema 11: Imágenes en bases de datos

Page 2: Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

2

1.Introducción.

– La biblioteca GD.El manejo de imágenes dinámicas requiere que esté instalada la librería de PHP llamada php_gd2.dll.En la versión de PHP que estamos manejando se instala y activa por defecto. En nuestro caso se trata del archivo

php_gd2.dll que está en c:\xampp\php\ext. Para seguir adelante debemos comprobar que todo funciona correctamente para ello ejecutamos el fichero gdtest.php.

<?php

echo '<pre>';

print_r(gd_info());

echo '</pre>';

?>

Nos debe salir algo así:

– La biblioteca GD.El manejo de imágenes dinámicas requiere que esté instalada la librería de PHP llamada php_gd2.dll.En la versión de PHP que estamos manejando se instala y activa por defecto. En nuestro caso se trata del archivo

php_gd2.dll que está en c:\xampp\php\ext. Para seguir adelante debemos comprobar que todo funciona correctamente para ello ejecutamos el fichero gdtest.php.

<?php

echo '<pre>';

print_r(gd_info());

echo '</pre>';

?>

Nos debe salir algo así:

Page 3: Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

1.Introduccion

El anterior script no sólo sirve como prueba para asegurarnos de que GD y PHP están funcionando sino que además nos permite ver las opciones y limitaciones para el funcionamiento de GD en PHP, vemos la existencia de compatibilidad con JPG, GIF y PNG.

Existe un debate sobre si se pueden guardar o no de forma

eficiente imágenes en una base de datos utilizando el tipo de columna blob de MySQL.

Vamos a ver como realizarlo de las dos formas.

El anterior script no sólo sirve como prueba para asegurarnos de que GD y PHP están funcionando sino que además nos permite ver las opciones y limitaciones para el funcionamiento de GD en PHP, vemos la existencia de compatibilidad con JPG, GIF y PNG.

Existe un debate sobre si se pueden guardar o no de forma

eficiente imágenes en una base de datos utilizando el tipo de columna blob de MySQL.

Vamos a ver como realizarlo de las dos formas.

3

Page 4: Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

.

Se debe trabajar con la carpeta imagtablas que copiaremos en c:\xampp\htdocs. En esta carpeta tenemos los scripts:

– index.php Contiene enlaces a – Creartabla.php: Crea la tabla con la columna BLOB e introduce algunas filas en ella.– Verimagen.php: Recorre la tabla fotos y muestra las datos. Llama a ver.php

– Formulario.php Selecciona el fichero de imagen a subir . Recordemos que PHP guarda información de los archivos recien cargados en la matriz $_FILES, que tiene múltiples niveles y cuya primera clave es el nombre asignado al campo especificado en <INPUT type="file" name="foto"> Al pulsar Enviar llama a grabar_img.php. En este script la información del archivo subido estará disponible en$_FILES ['foto']. El siguiente nivel en la matriz $_FILES es información sobre el archivo cargado. Las claves posibles son: o name : Hace referencia al nombre del archivo tal y como estaba en el equipo local del usuarioo type: Guarda el tipo MIME tal y como lo proporciona el explorador.o size: El tamaño del archivo cargado en bytes.o tmp_name: Nombre del qrchivo cargado en el servidoro error: Código del error asociado a la transferencia del archivo . Se trata de un valor numérico. PHP tiene

constantes predefinidas para representar el valor y si utilizamos estas constantes nuestro código será más fácil de leeer y administrar. Estas constantes son las siguientes:

Se debe trabajar con la carpeta imagtablas que copiaremos en c:\xampp\htdocs. En esta carpeta tenemos los scripts:

– index.php Contiene enlaces a – Creartabla.php: Crea la tabla con la columna BLOB e introduce algunas filas en ella.– Verimagen.php: Recorre la tabla fotos y muestra las datos. Llama a ver.php

– Formulario.php Selecciona el fichero de imagen a subir . Recordemos que PHP guarda información de los archivos recien cargados en la matriz $_FILES, que tiene múltiples niveles y cuya primera clave es el nombre asignado al campo especificado en <INPUT type="file" name="foto"> Al pulsar Enviar llama a grabar_img.php. En este script la información del archivo subido estará disponible en$_FILES ['foto']. El siguiente nivel en la matriz $_FILES es información sobre el archivo cargado. Las claves posibles son: o name : Hace referencia al nombre del archivo tal y como estaba en el equipo local del usuarioo type: Guarda el tipo MIME tal y como lo proporciona el explorador.o size: El tamaño del archivo cargado en bytes.o tmp_name: Nombre del qrchivo cargado en el servidoro error: Código del error asociado a la transferencia del archivo . Se trata de un valor numérico. PHP tiene

constantes predefinidas para representar el valor y si utilizamos estas constantes nuestro código será más fácil de leeer y administrar. Estas constantes son las siguientes:

4

2.Almacenando en columnas BLOB.

Page 5: Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

2.Almacenando en columnas BLOB.

o UPLOAD_ERR_OK : El archvo de ha cargado correctamente y no hay ningún error.

o UPLOAD_ERR_INI: El tamaño del archivo excede el permitido por la directiva upload_max_filesize establecida en php.ini.

o UPLOAD_ERR_FORM_SIZE: El tamaño del archivo cargado excede el permitido por la directiva MAX_FILE_SIZE establecida en el formulario HTML.

o UPLOAD_ERR_PARTIAL: El archivo se ha cargado parcialmente y su descarga no se ha completado.

o UPLOAD_ERR_NO_FILE: El usuario no ha cargado ningún archivo.

o UPLOAD_ERR_NO_TMP_DIR: No se encuentra el directorio temporal del servidor en el que se ha cargado el archivo inicialmente.

o UPLOAD_ERR_CANT_WRITE: el directorio temporal existe en el servisor pero PHP no puede escribir en él.

o UPLOAD_ERR_EXTENSION: La carga del archivo se ha detenido por una extensión PHP.

Una vez subida alguna imagen a la b.d. podemos usar la opción verimagen para comprobarlo.

Page 6: Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

3.Guardando vínculos a los ficheros de imagen• Se debe trabajar con la carpeta imagcarpeta que copiaremos en c:\xampp\htdocs.

• En primer lugar ejecutaremos el script crearbdmovies.php que creará la base de datos con la que trabajaremos en esta parte del tema.

• Tenemos el script upload_image.html con la funcionalidad habitual de los ya vistos de subida de archivos. Para el tratamiento de la imagen transferida disponemos del script check_image0.php. Después de comprobar que la carga del archivo ha sido satisfactoria, utilizamos la función getimagesize() para recuperar información sobre él y devuelve un array con 5 elementos:

o 0 : Anchura de la imagen medida en pixeles.o 1: Altura de la imagen medida en pixeles.o 2: Un valor numérico que identifica l tipo de imagen del archivo.o 3: Una cadena como height=“YYY” width=“XXX” que se puede utilizar para incluir una etiqueta img de

HTML.o 4: Una cadena correspondiente al tipo MIME de la imagen.

• PHP ofrece constantes predefinidas que se corresponden con el valor numérico que identifica el tipo de imagen del archivo devuelto por el índice 2. Algunas de dichas constantes son las siguientes:

o IMAGETYPE_GIF : Para imágenes GIF (TIPO MIME image/gif)o IMAGETYPE_JPG : Para imágenes JPG (TIPO MIME image/jpeg).o IMAGETYPE_PNG : Para imágenes PNG (TIPO MIME image/png.)o IMAGETYPE_BMP : Para imágenes GIF (TIPO MIME image/bmp)o .…………………...

Page 7: Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

3.Guardando vínculos a los ficheros de imagen

• Una vez determinado el tipo de imagen cargado, lee el archivo en memoria. La función imageccreatefrom*() abre un archivo de imagen y devuelve un controlador de recurso para trabajar con él. Recordemos que primero el archivo se guarda en una ubicación temporal y después tendremos que moverlo a una ubicación más permanente antes de perderlo para siempre. Normalmente utilizaremos la función move_uploaded_file() . El primer parámetro es el nombre del archivo temporal y el segundo la ubicación permanente, como en el siguiente ejemplo:

move_uploaded_file ($_FILES[‘upload_file’][‘tmp_name’],

$dir.’/’.$_FILES[‘upload_file’][‘name’],

Normalmente esta acción es suficiente. Sin embargo hemos elegido cargar la imagen en memoria utilizando la función correcta y después volviendo a escribirla a un nuevo archivo en la ubicación de destino en el directorio images.Cada una de las funciones imagegif(), imagejpeg() e imagepng() guarda los datos de la imagen accesbles mediante el recurso para el nombre del archivo especificado. En el caso de la función imagejpeg() acepta un tercer parámetro opcional que afecta a la calidad del archivo debido a la comprensión (valor 100 calidad cien por cien)

Page 8: Desarrollo Web en Entorno Servidor 1 Tema 11: Imágenes en bases de datos.

3.Guardando vínculos a los ficheros de imagen• Como hemos visto hacemos dos operaciones INSERT y UPDATE. Sin embargo PHP puede utilizar GD

para convertir tipos de imagen de un formato a otro fácilmente. Lo que vamos a a hacer es permitir que se suban en los tres formatos pero las guardaremos en formato JPEG. De esta forma no necesitaremos la columna filename.

• En primer lugar ejecutaremos el script alterimages.php . Este script realiza el correspondiente ALTER TABLE sobre la tabla images.

• Hemos hecho algunas modificaciones en check_image0.php y lo hemos salvado con el nombre check_image1.php . Ya no necesitamos distinguir el tipo de archivo una vez cargada la imagen en memoria con la función imageccreatefrom*() apropiada, por lo que hemos eliminado el bloque switch crea la imagen y guarda la extension en $ext. A continuación se guarda la imagen como JPEG utilizando la función imagejpeg() , independientemente de qué tipo de formato válido se haya cargado.

EFECTOS ESPECIALESEl check_image2.php junto con image_effect.php permite al usuario aplicar un filtro a su imagen tras

haber sido cargada y obtener una vista previa del efecto antes de guardarlo de forma permanente.Se ha reestructurado el código con distintas instrucciones que comprueban el valor de

$_POST[‘submit’].

Hemos incluido cuatro efectos diferentes pero en realidad existen 11 filtros.

MINIATURASVer check_image3.php junto con gallery.php