Práctica 6 - PHP + MySQL

1. Objetivos

En esta práctica vamos a ver unas aplicaciones avanzadas de scripts PHP. Veremos cómo acceder a un servidor de base de datos MySQL desde scripts PHP. Para ello en la primera práctica compilamos el módulo de PHP para Apache con soporte de MySQL.

En caso de dudas sobre cómo emplear la base de datos MySQL la documentación del mismo incluye un breve tutorial: http://dev.mysql.com/doc/refman/5.0/es/tutorial.html

Y el tutorial de PHP trae en la sección LXIII la documentación sobre las funciones para acceder al servidor de base de datos: http://www.php.net/manual/es/ref.mysql.php

2. Instalación y configuración del PHPMyAdmin

phpMyAdmin es un conjunto de páginas HTML (en realidad scripts PHP) que permiten gestionar una base de datos MySQL directamente por la web con un interfaz gráfico. Si bien generalmente aprenderemos a realizar la gestión de nuestro servidor de base de datos a través del cliente mysql una vez que tengamos los conceptos claros resultará más cómodo realizaar algunas tareas con un interfaz como este.

A. Instalando

Lo primero es descomprimir el tarball al interior del directorio principal desde donde nuestro servidor Web sirve páginas (DocumentRoot):

[1]%> cp /opt3/lir/ficheros/phpMyAdmin-2.11.0-all-languages.tar.gz /opt3/lir/lirXY/www/
[2]%> cd /opt3/lir/lirXY/www/
[3]%> tar xzvf phpMyAdmin-2.11.0-all-languages.tar.gz

A continuación le cambiamos el nombre a algo más cómodo:

[4]%> mv phpMyAdmin-2.11.0-all-languages sqladmin

B. Configurando

Y ahora editamos el fichero de configuración de phpMyAdmin para que funcione con nuestro servidor. Dicho fichero es /opt3/lir/lirXY/www/htdocs/sqladmin/config.inc.php.

Este fichero no existe, pero existe uno de pruebas (config.sample.inc.php) que nos sirve, renombrarlo. Debemos modificar al menos dos líneas. Primero en la línea que pone:

$cfg['Servers'][$i]['auth_type'] = 'cookie';

debemos de cambiar el modo de autentificación a 'http', con lo que cada vez que accedamos nos solicita el usuario y password:

$cfg['Servers'][$i]['auth_type'] = 'http';

Y cambiamos el modo de acceso para que se acceda mediante TCP en vez del socket UNIX. Para ello cambien:

$cfg['Servers'][$i]['host'] = 'localhost';

por

$cfg['Servers'][$i]['host'] = '127.0.0.1';

C. Probando

Ahora podemos probar estas páginas accediendo al índice de las mismas http://localhost:8080/~lirXY/sqladmin/

3. Registro en base de datos de accesos a páginas web

Vamos a crear un script de PHP que inserte en una tabla de una base de datos información sobre cada acceso que se realiza a ciertas páginas web.

Emplearemos en esta práctica la base de datos test

A continuación crearemos la tabla que vamos a emplear en este caso. La tabla se llamará logs y contendrá al menos la siguiente información:

  • Un campo de tipo DATE y nombre fecha que guardará el instante de tiempo en que se produjo un acceso a cada página web
  • Un campo de nombre direccion que guardará la dirección IP en formato dotted-decimal de la máquina que solicitó esa página (ejemplo: 130.206.160.215). Nota: no hay ningún tipo de dato MySQL dotted-decimal, usen el tipo de datos de texto más adecuado para este tipo de cadenas.
  • Un campo de nombre path con el path del documento que se solicitó

Ahora creen un script PHP que se conecte a la base de datos e inserte una nueva línea en esa tabla con la fecha actual, la dirección IP del que está pidiendo este documento y el URL de este documento. El primer valor lo sabe introducir el servidor MySQL mediante la función NOW() y el segundo y el tercero se pueden obtener de variables de entorno que ha creado el servidor Web.

Adapten el script anterior para que pueda ser empleado desde cualquier página sin más que entrar en modo PHP e incluirlo (include). Prueben a crear diferentes documentos que incluyan el script y vean cómo se van registrando los accesos en la base de datos (por ejemplo empleen las páginas que crearon en la práctica sobre HTML).

Checkpoint 1
Muestren al profesor de prácticas que se introducen las entradas en la tabla a medida que navegan

4. Estadísticas obtenidas del log

Creen un nuevo script PHP que acceda a la tabla creada en el apartado anterior y muestre las siguientes estadísticas:

  • El número total de accesos
  • Una tabla HTML con el número de accesos que han tenido cada uno de los documentos que aparecen referenciados en el log, independientemente del cliente que solicitara el documento
  • El número total de direcciones IP que han solicitado documentos del servidor (de los controlados con el log)
  • Una tabla HTML con el número de documentos diferentes que se han solicitado desde cada dirección IP

Por ejemplo, si la tabla es:

+------------+-----------------+-----------------------------------------+
| Fecha | direccion | path |
+------------+-----------------+-----------------------------------------+
| 2003-11-12 | 130.206.160.215 | /usr/local/htdocs/practica.html |
| 2003-11-13 | 127.0.0.1 | /Volumes/Users/daniel/examen.php |
| 2003-11-13 | 127.0.0.1 | /Volumes/Users/daniel/examen.php |
| 2003-11-14 | 127.0.0.1 | /Volumes/Users/daniel/ejercicios/16.php |
+------------+-----------------+-----------------------------------------+

El resultado será algo como:

Total: 4 accesos

2 direcciones diferentes han accedido a nuestros documentos

URL Accesos
/Volumes/Users/daniel/examen.php 2
/Volumes/Users/daniel/ejercicios/16.php 1
/usr/local/htdocs/practica.html 1

Dirección Páginas diferentes accedidas
127.0.0.1 2
130.206.160.215 1

Checkpoint 2
Muestren al profesor de prácticas que les funciona el script de mostrar la estadística de accesos

5. Conclusiones

Hemos visto cómo crear scripts PHP que mantengan el estado de unos a otros, añadiendo así gran funcionalidad a páginas web básicas.

Última modificación: miércoles, 3 de octubre de 2007, 11:18