| 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 |
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.
Veamos el programa CGI realizado en Perl.
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).

#!/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).
| <!-- 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 |