Ejecución de programas CGI.

Sistema operativo Windows/Linux
Fecha 22 de mayo de 2008
Autor Amadeo Acera
Descripción Esta página describe algunas claves para ejecutar un programa CGI en un servidor Web utilizando Perl.

Índice

  1. Introducción.
  2. Ejemplo práctico
  3. Fichero 'html'

1. Introducción.

Un programa CGI es un programa que reside en un servidor Web y que es ejecutado como petición de una página web. Normalmente este método es utilizado para crear páginas con contenido dinámico, es decir, donde la información que se envía al cliente depende de algún parámetro variable como la hora del día.

El proceso es sencillo: el cliente (un navegador web) solicita una página web. Esta página en algún punto tiene una petición a un programa CGI. El servidor detecta esta petición y ejecuta el programa CGI, cuya salida (resultado) es enviada de nuevo al servidor para que éste a su vez la envíe al cliente.

2. Ejemplo práctico.

Como ejemplo vamos a ver como insertar en una página web la fecha actual. El ejemplo mostrado es el que utilizo en mi página principal (la hora se muestra con otro CGI).

Fecha insertada mediante un CGI.

Veamos el programa CGI realizado en Perl.

#!/usr/local/bin/perl
$| = 1;

@month = qw(enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre);
@day = qw(Domingo Lunes Martes Miércoles Jueves Viernes Sábado);
@date = localtime();

$year = $date[5]+1900;

print "content-type: text/html\n\n";
print "$day[$date[6]], $date[3] de $month[$date[4]] de $year\n";
exit 0;

La primera línea indica dónde se encuentra el intérprete de Perl en el servidor. Este dato devería ser proporcionado por el administrador del sistema. La siguiente línea:

$| = 1;

indica al intérprete que no almacene temporalmente la salida sino que la envíe directamente al servidor según se va generando. Quizás en este caso dé igual, porque la salida es muy corta, pero es buena práctica indicarlo.

Seguidamente se inicializan unas variables '@month' y '@day' que nos ayudarán a generar la fecha en español. Seguidamente se obtiene la fecha del sistema:

@date = localtime();

localtime() es una función de Perl que cuando se asocia a un array almacena en cada elemento del array un dato de fecha o tiempo. Por ejemplo $date[4] almacenará el número del mes comenzando por 0, por este motivo:

$month[$date[4]] = 'junio' si $date[4]=5

La línea

$year = $date[5]+1900;

es necesaria ya que el año devuelto por localtime() comienza en 1900.

A continuación se utiliza la orden print para enviar la información al servidor. Normalmente print muestra la información por la salida estándar (la pantalla), pero al ser ejecutada en el entorno de un servidor Web lo que hace es enviarla al servidor.

Un punto muy importante a tener en cuenta es que la línea

print "content-type: text/html\n\n";

es necesaria, y además tiene que ser la primera información enviada al servidor. Se trata de una cabecera HTTP donde se indica al servidor el tipo de información que va a recibir.

Una vez escrito el código lo guardamos en un fichero con extensión cgi y lo almacenamos en el directorio adecuado en el servidor, que normalmente será un directorio llamado cgi-bin (pregunta al administrador del sistema).

3. Fichero 'html'

Ahora ya tenemos el CGI instalado en el servidor y el siguiente paso es ejecutarlo. Para ello tendremos que insertar en nuestra página web, en el lugar correspondiente, la orden adecuada. Esta orden tiene la forma:

<!-- exec cgi='cgi-bin/date.cgi' -->

Como vemos se trata de información contenida dentro de un comentario. La secuencia '<!-- exec cgi' indica al servidor que tiene que ejecutar el CGI indicado después del signo '='. Este tipo de secuencia pertenece a lo que se denomina Server Side Includes, o abreviadamente SSI, que incluye una serie de directivas que se ejecutan dentro del entorno de un servidor Web.

Con el fin de instruir al servidor Web que nuestra página tiene una directiva SSI y por consiguiente que pueda ejecutarla, el nombre de nuestra página tiene que tener la extensión 'shtml'.


AAN © Mayo 2008