- Un servicio web con Apache, PHP y MySQL

A la hora de desarrollar una aplicación distribuida, una de las alternativas más utilizadas en la actualidad son los servicios web. A lo largo de este apartado y el siguiente aprenderás cómo crear tus propios servicios web e instalarlos en un servidor web. Como no podría ser de otra manera, el ejemplo seleccionado es el mismo que ya hemos implementado en varias ocasiones: un almacén de las mejores puntuaciones de Asteroides.

No resultaría demasiado complicado rescribir el ejemplo del servidor de ECHO descrito en un apartado anterior para crear nuestro propio servidor web. No obstante, si estamos trabajando en un entorno empresarial, esta alternativa no sería la más adecuada. En este entorno es mucho más recomendable utilizar un servidor web de uso comercial, como Apache.Esta solución resulta mucho más segura y escalable.

En el siguiente apartado aprenderemos a crear un servicio web usando la combinación Apache, Tomcat y Axis2. Esta opción tiene varias ventajas: toda la programación la hacemos con un mismo lenguaje (Java), el código que tenemos que escribir es muy limpio y permite publicar el servicio con estilo REST o SOAP.

En este apartado estudiaremos otra alternativa, que consiste en usar el trinomio Apache, PHP y MySQL. Tiene sus inconvenientes, como la necesidad de usar un nuevo lenguaje (PHP), y el código a usar es más rudimentario. Sin embargo, presenta importantes ventajas: se trata de la solución más extendida. La mayoría de las empresas ya disponen de un servidor web basado en Apache, PHP y MySQL. Siempre será conveniente montar el servicio web usando la misma tecnología que la que usamos en el sitio web. Por otra parte, la mayoría de los servidores de hosting comerciales trabajan con PHP y MySQL.

 

Ejercicio: Instalación de Apache, PHP y MySQL

En este ejercicio vamos a instalar en nuestro propio ordenador el servidor web Apache con su extensión para poder ejecutar código PHP. Además del servidor de bases de datos MySQL. Este proceso puede realizarse de forma muy sencilla y rápida utilizando el paquete de software XAMPP. Además incorpora algunas herramientas para poder administrar estos servidores muy fácilmente. No obstante, usar un servidor de hosting comercial puede ser una alternativa más sencilla y segura. Si no estás interesado en instalar tu propio servidor web, puedes saltarte este ejercicio y realizar el ejercicio que encontrarás más adelante.

1.    Descarga la última versión de XAMPP de la siguiente web:

http://www.apachefriends.org/en/xampp.html

 

Encontrarás versiones para Linux, Windows y Mac. En este ejercicio hemos instalado la versión 1.8.2 para Windows usando el ejecutable.

2.     Inicia el proceso de instalación según tu SO. Los componentes mínimos necesarios para este ejercicio se indican a continuación:

3.    Una vez instalado ejecuta XAMPP Control Panel:

4.     Pulsa los botones Start, tanto para Apache como para MySQL.

5.     Para verificar que el servidor web está en marcha, abre un navegador y desde la barra de direcciones accede a http://localhost. Se mostrará una página con información sobre XAMPP.

Ejercicio: Configuración de Apache

En este ejercicio veremos una visión superficial sobre la configuración del servidor web Apache.

1.     Verifica que el servidor está arrancado accediendo a la dirección http://localhost. Se utiliza para referirte a tu propia dirección IP. Es equivalente a escribir http://127.0.0.1.

2.     Dentro de la carpeta donde hayas instalado XAMPP (por ejemplo, C:/xampp) abre la carpeta htdocs. Dentro encontrarás todos los ficheros que publica el servidor.

3.     El fichero que toma por defecto en esta carpeta es index.php (o index.html si no lo encuentra). Edita este fichero y estudia su estructura. Modifica este fichero y recarga en el navegador para observar los cambios (http://localhost).

4.     Ejecuta XAMPP Control Panel y pulsa el botón Config de Apache. Selecciona Apache (httpd.conf). Se editará el fichero xampp/apache/conf/httpd.conf. Es un fichero bastante largo, aunque normalmente solo tendrás que modificar los siguientes parámetros:

  • Listen 80 - Indica que el servidor escucha el puerto 80. Es frecuente cambiar este valor por 8080 o 888. Para aceptar conexiones solo de este host, cambia la línea por Listen 127.0.0.1:80.
  • ServerAdmin postmaster@localhost - Correo electrónico del administrador del servidor.
  • ServerName localhost:80 - Nombre del servidor, indicando nombre de dominio y puerto. Si no se indica, trata de obtenerlo automáticamente.
  • DocumentRoot "C:/xampp/htdocs" - El directorio donde se encuentran los documentos servidos por el servidor.
  •  DirectoryIndex index.php index.pl … index.html - Establece el archivo que Apache ofrece cuando se solicita un directorio sin indicar un archivo concreto. De encontrar varios se escoge el que esté antes en esta lista.

Si modificas algún valor, recuerda guardar el fichero y reinicializar Apache para que se carguen los nuevos valores.

5.     Vamos a probar si el servidor web es accesible desde otros dispositivos conectados a tu red de área local. Utiliza el comando ipconfig (Windows) o ifconfig (Linux/Mac) para averiguar la dirección IP de tu ordenador.

6.     Abre un navegador desde otro dispositivo y accede a la dirección que acabas de obtener. Si lo haces desde un móvil, has de acceder a través de Wi-Fi. Si tienes problemas, es posible que sea culpa del cortafuegos. En este caso tendrás que desactivarlo.

Ejercicio: Un servicio web con PHP y MySQL

En este ejercicio comenzamos creando una base de datos y luego escribiremos un par de ficheros PHP que implementarán las dos acciones del servicio web puntuaciones.

1.    Ejecuta XAMPP Control Panel y asegúrate de que tanto Apache como MySQL están arrancados.

2.     Pulsa el botón Admin de MySQL que encontrarás en XAMPP Control Panel. De esta forma accedemos a la herramienta de administración del servidor de bases de datos phpMyAdmin.

3.     Selecciona la lengüeta SQL e introduce las siguiente instrucciones en el cuadro de texto:

CREATE DATABASE IF NOT EXISTS puntuaciones;
USE puntuaciones;

CREATE TABLE puntuaciones (
  _id INTEGER PRIMARY KEY AUTO_INCREMENT,
  puntos INTEGER, nombre TEXT, fecha BIGINT);

INSERT INTO puntuaciones (puntos, nombre, fecha) VALUES
  (10000, 'Pedro', 0),
  (20000, 'Rosa', 0);

4.     Pulsa el botón OK para ejecutar estas sentencias.

5.     En el marco de la izquierda, pulsa el botón verde con forma de recargar. Observa como en la lista de bases de datos aparece puntuaciones. Si pulsas en el botón + de su izquierda se mostrarán sus tablas.

6.     Selecciona la tabla puntuaciones para examinar su contenido.

Como puedes observar, disponemos de diferentes herramientas para editar los valores de la tabla. Por ejemplo, podemos utiliza la lengüeta Insertar para añadir una nueva fila a la tabla.

7.     Explora otras utilidades que nos ofrece phpMyAdmin para trabajar con bases de datos.

8.     Dentro de la carpeta donde hayas instalado XAMPP (por ejemplo, C:/xampp), abre la carpeta htdocs. Crea dentro la carpeta puntuaciones.

9.    Dentro de esta carpeta crea el fichero lista.php con el siguiente contenido:

<?php
   $con = new mysqli('localhost', 'root', '', 'puntuaciones');
   if ($con->connect_errno) {
      echo 'Error al conectar base de datos: ', $con->connect_error;
      exit();
   }

   $sql = 'SELECT puntos, nombre FROM puntuaciones ORDER BY fecha DESC';

   if (isset($_GET['max'])) {
      $sql .= ' LIMIT ?';
   }

   $cursor = $con->stmt_init();
   if ($cursor->prepare($sql)) {
      if (isset($_GET['max'])) {
         $cursor->bind_param("s",$_GET['max']);
      }       
      $cursor->execute();
      $cursor->bind_result($puntos, $nombre);
      while($cursor->fetch()) {
         echo $puntos.' '.$nombre."\n";
      }
      echo "\n";
      $cursor->close();
   }
   $con->close();
?>

El código PHP suele estar entremezclado entre el código HTML. Para diferenciarlo de este, hay que introducirlo entre los caracteres <?php y ?>. La primera sentencia establece una conexión a una base de datos situada en un servidor MySQL. Necesita cuatro parámetros: primero, la dirección IP donde está el servidor (cuando se indica localhost nos referimos a nuestra propia IP); luego, usuario y contraseña usados en la conexión (en el ejemplo, usuario root y sin contraseña; sería muy conveniente introducir otros valores en un caso real); finalmente, el nombre de la base de datos a utilizar. La conexión se guarda en el objeto $con. Observa como las variables en PHP siempre comienzan con el carácter $, además no han de declararse.

En la siguiente línea se accede a una propiedad del objeto $con para verificar si ha habido algún error. Observa como para aceder a las propiedades de un objeto en PHP se utilizan los caracteres -> en lugar del carácter . usado en Java. Luego se configura la codificación de caracteres y se inicializa la variable $sql con la consulta a realizar. Solo nos interesa puntos y nombre de la tabla puntuaciones ordenados por fecha. Para concatenar dos cadenas en PHP se utiliza el carácter punto (.).

En el siguiente if verificamos si nos han pasado el parámetro max a través de la URL. Por ejemplo:

http://localhost/puntuaciones/lista.php?max=10

En caso de que el array $_GET[ ] contenga este parámetro, añadimos a la consulta SQL una restricción en el número de parámetros devueltos.

A continuación preparamos y ejecutamos la consulta SQL que se recogerá en la variable $cursor. Utilizando el método bind_result() asociamos los dos campos indicados en la cláusula SELECT con dos variables PHP. Luego recorremos todos los elementos de $cursor y por cada uno devolvemos una línea de texto plano con los puntos, el nombre y un salto de línea. Más adelante intentaremos devolverlo en un formato XML. Terminamos cerrando el cursor y la conexión.

10.     Abre un navegador web y escribe la siguiente dirección:

http://localhost/puntuaciones/lista.php?max=10

11.      Es posible que el resultado se muestre en una sola línea. El navegador espera como resultado de la consulta una página HTML, y no hemos introducido en el resultados la etiqueta <br/> tras cada línea. Selecciona la opción Ver código fuente de la página para ver el resultado correctamente.

12.      Crea el fichero nueva.php en la misma carpeta con el siguiente código:

 <?php
   $con = new mysqli('localhost', 'root', '', 'puntuaciones');
   if ($con->connect_errno) {
      echo 'Error al conectar base de datos: ', $con->connect_error;
      exit();
   }
   $puntos = $_GET['puntos'];
   $nombre = htmlspecialchars($_GET['nombre']);
   $fecha  = $_GET['fecha'];   
   $sql = $con->prepare('INSERT INTO puntuaciones VALUES (null,?, ?, ?)');
   $sql->bind_param('isi', $puntos, $nombre, $fecha);
   $sql->execute();
   echo 'OK\n';
   $con->close();
?>

 

13.     Puedes comprobar su funcionamiento accediendo a la siguiente dirección:

http://localhost/puntuaciones/nueva.php?puntos=3000&nombre=María&fecha=20

14.      Verifica que el nuevo elemento ha sido añadido. Puedes usar la URL:

http://localhost/puntuaciones/lista.php?max=10