¿Pero qué es eso de los CGIs?

# Capítulo 2: ¿Pero qué es eso de los CGIs?

1. Las siglas incomprensibles
2. Principios básicos
3. ¿Dónde hay buenos CGIs?
4. Adaptando los CGIs a mi página web
5. Los Serve Side Includes
6. Traducción de los textos del CGI
7. La instalación en el servidor
8. La invocación del CGI

# 1. Las siglas incomprensibles

Las siglas CGI proceden del inglés Common Gateway Interface, cuya traducción a la lengua de Cervantes es un ejercicio imposible. Sin profundizar demasiado en el significado del acrónimo CGI, podemos decir que se trata de un mecanismo que permite que un servidor web invoque la ejecución de un programa en el propio servidor, y le pase ciertos parámetros de entrada obtenidos de una página HTML y contenidos en campos de un formulario.

Dicho así parece no significar nada, pero sin embargo hasta la definición del estándar CGI no era posible:

- Recoger información en la página y enviarla al servidor: por ejemplo, hacer una encuesta a nuestro visitante, o solicitar la introducción de un login y una palabra de paso para darle acceso a cierta parte el sitio.

- Presentar contenidos de forma dinámica en una página: almacenar contenidos en una base de datos y mostrarlos de forma dinámica, en función de ciertos datos introducidos por el visitante en un formulario.

Actualmente, el uso de los CGIs ha decaido con la llegada de nuevas tecnologías (como el lenguaje Java y los ASPs). Sin embargo, para determinados propósitos son todavía el modo más simple y práctico (ejemplos no faltan: contadores, libros de visitas, envío de datos de un formulario,...).

No vamos a desarrollar aquí como hacer CGIs (necesitaríamos unas 10.000 páginas y mucho, mucho tiempo). Nuestro propósito es aprender a utilizar los que tenemos a nuestra disposición en Internet (¡mucho más fácil!).

# 2. Principios básicos

En el fondo, un CGI es un programa que se ejecuta, normalmente, en el servidor que aloja nuestras páginas. Los lenguajes de programación más utilizados son el PERL y el C, aunque también hay CGIs en PHP y otros lenguajes de Internet.

Si queremos utilizar CGIs libres fácilmente, y tener la posibilidad de adaptarlos al diseño y funcionalidad de nuestras páginas, necesitamos poder editar su código fuente. Con el lenguaje C esto no es siempre posible, porque el código puede suministrarse compilado. Además, en el caso de que tengamos los fuentes, tendremos que recompilarlos una vez que hayamos realizado nuestros cambios, lo cual requiere un mínimo de conocimientos tanto de programación como de sistemas operativos.

Por otra parte, sólo podremos utilizar CGIs si el servidor que aloja nuestras páginas permite que introduzcamos y ejecutemos CGIs en nustra zona de usuario. Esto no es frecuente en proveedores de alojamiento gratuitos (comunidades virtuales, portales,...). Si pagas por el hosting de tus páginas es más probable que tengas esta posibilidad, pero no está garantizado.

La razón por la que no siempre se ofrece esta posibilidad es de peso (de mucho peso): la ejecución de un programa no controlado (por el propietario de la máquina) en un servidor puede llevar asociados problemas de estabilidad, rendimiento y seguridad (¿quién garantiza que el CGI es seguro, fiable y hace lo que teóricamente debe hacer?).

## Recomendación:

Debemos buscar CGIs escritos en PERL. Este es un lenguaje interpretado (no requiere compilación) lo que garantiza que disponemos del código fuente y no tenemos que compilarlo para ejecutarlo. Por sencillez y potencia es, sin duda, nuestro lenguaje ideal para la implementación de CGIs (aunque no es el lenguaje óptimo en cuanto a rendimiento y seguridad).

# 3. ¿Dónde hay buenos CGIs?

El primer paso es obtener el CGI adecuado a nuestras necesidades. Existen multitud de sitios con librerías de CGIs en diferentes lenguajes. A continuación incluimos algunos de los más interesantes (en inglés):

> http://www.cgi-resources.com/ (excelente en todos los sentidos, y con miles de CGIs verdaderamente útiles).

> http://www.perlindex.com/ (sólo CGIs en PERL, pero bien estructurado).

## Recomendación:

Para cada cosa que queramos hacer existen mil CGIs diferentes. Lo mejor es descargar varios y compararlos. No todos están bien documentados, ni son fáciles de configurar. También habrá diferencias en las funcionalidades, la codificación (que puede ser clara o un auténtico embrollo, ...). Comparando bien los candidatos, debemos quedarnos con el que cumpla nuestros requisitos y se más fácil de configurar.

# 4. Adaptando los CGIs a mi página web

La mayoría de los CGIs que descarguemos de Internet incluirán su pequeño manual de instrucciones, que nos guiará en los pasos a dar para adaptarlo a nuestras propias necesidades e instalarlo en el servidor donde tenemos alojadas nuestras páginas. Habitualmente, los ficheros de ayuda o instrucciones vienen con el nombre readme.txt o el nombre del propio CGI con extensión .txt.

La adaptación o configuración del CGI suele requerir la edición, en un editor ASCII (como el Note Pad de Windows), de uno o varios ficheros, entre los que puede estar el propio CGI. Normalmente, si está bien codificado, existirá una zona de datos y una zona de código claramente separadas. Nuestros cambios se realizarán casi exclusivamente en la zona de datos.

Si el CGI está en lenguaje PERL, hay que modificar la primera línea. En ella aparece la ruta física y el nombre del intérprete de PERL que ejecutará el programa. Suele ser algo así:

> #!/usr/bin/perl

Para saber cuál es esta ruta en el servidor que aloja nuestras páginas tenemos que consultar con el administrador del sistema. Si no es posible, se puede probar con rutas típicas, como la anterior, o #!/usr/local/bin/perl.

A parte de la línea anterior, lo único que es necesario editar son los valores de ciertas variables, relacionadas con rutas de ficheros y valores de configuración. Si has elegido un CGI en PERL, podrás identificar claramente las variables, porque van precedidas del caracter "$" (también pueden ir precedidas de "@", en cuyo caso son arrays). Por otra parte, los comentarios van precedidos del caracter "#".

Veamos un ejemplo:

> #Esta variable es la ruta del fichero de datos
> $DATA_FILE = '/opt/usr/datos.txt';

En este ejemplo tenemos una variable que le dice al CGI dónde está y cómo se llama el fichero de datos. Cuando copiemos el CGI en el servidor que aloja nuestras páginas, todas las rutas serán diferentes, y esto hay que reflejarlo en las variables. Para saber cuál es la ruta de tu zona de usuarios tienes que hablar con el administrador de la máquina donde están alojadas tus páginas.

# 5. Los Server Side Includes

Algunos CGIs necesitan que el servidor web soporte una tecnología de servidor denominada Server Side Includes. Los SSI son comandos que se le pasan al servidor web desde una página HTML, para que realice cierta acción en el momento de enviar la página al cliente. Por tanto, las páginas con SSIs, al igual que las que contienen ASPs, son interpretadas por el servidor, de modo que ciertos elementos de la página serán sustituidos por resultados de un procesamiento.

Veamos un ejemplo:

> <!--#exec cgi="/cgi-bin/count.pl" -->

Esta es la típica línea necesaria para incluir un contador en una página HTML. El contador aparecerá en el lugar en que se encuentre la líena anterior. El servidor web, al encontrar el código anterior sabe que debe ejecutar el CGI e incluir en la página el resultado de la ejecución (que serán las imágenes con la cuenta).

El problema de los SSIs es, como de costumbre, un problema de seguridad. Esta es la razón por la que algunos proveedores de alojamiento no los habilitan en sus servidores web. En otros casos, están habilitados, pero para no afectar al rendimiento global del sistema, las páginas que incluyan SSIs deberán tener extensión .shtml (así el servidor no tiene que interpretar todas las páginas enviadas al cliente).

# 6. Traducción de los textos del CGI

Desgraciadamente, la mayoría de recursos en Internet suelen estar en inglés (estamos trabajando para que esto cambie). Si tu CGI está en este idioma querrás seguramente traducir las cadenas que aparecen en las páginas que muestra. Esto puede hacerse, pero requiere de mucha paciencia, y cierta habilidad.

Las cadenas de texto aparecen normalmente entre comillas dobles o simples. Los CGIs dan como salida una página HTML, lo que hace que, normalmente, las cadenas de texto sean realmente cadenas de código HTML. Si conoces HTML te será muy fácil localizarlas y traducirlas.

Existe también la posiblidad de que el CGI utilice plantillas HTML para construir las páginas de salida. Este tipo de CGIs son preferibles, ya que puedes cambiar totalmente el aspecto de la página que muestra el CGI editanto la plantilla en un editor HTML. Sin embargo, hay que tener cuidado, porque la plantilla puede contener marcas o etiquetas para el CGI, que deben tener un formato fijo y que un editor WYSIWYG podría mover, cambiar o simplemente eliminar. Por ello, siempre es mejor utilizar editores ASCII (como el Note Pad).

# 7. La instalación en el servidor

Este paso es de capital importancia. Las intrucciones del CGI indicarán los ficheros que es necesario copiar en el servidor y dónde deben ser copiados (estructura de archivos).

Lo normal es que el CGI se copie en una carpeta de nombre cgi-bin. Si no tienes una carpeta con ese nombre en tu zona de usuario es muy probable que no puedas ejecutar CGIs.

Descargar por FTP el fichero con el programa CGI no es suficiente. Los sistemas operativos de los servidores tienen una política de seguridad basada en la asignación de propietarios y permisos a los ficheros. Los permisos se clasifican en permisos de lectura, de escritura y de ejecución. Además estos permisos se pueden aplicar al propietario del fichero, al grupo al cual pertenece o al resto.

De quien es el propietario del fichero no debes preocuparte: si quien te proporciona el hosting tiene bien configurado el FTP, tu fichero tendrá el propietario adecuado.

Ahora bien, cuando descargues el CGI, éste no tendrá los permisos de ejcución necesarios. Para cambiar los permisos del CGI necesitas un cliente FTP que implemente esta funcionalidad, como por ejemplo el CUTE FTP (existen otros que la tienen). Como mínimo, tendrás que habilitar el permiso de ejcución para el propietario (owner) del fichero.

Adicionalmente, si el CGI escribe en algún fichero (un fichero de base de datos, una página,...) necesitas que este fichero pueda ser escrito. Por tanto, tendrás que habilitar el premiso de escritura para el propietario en todos aquellos ficheros que deban ser escritos por el CGI.

Aunque esto parece algo críptico, usando programas como el CUTE FTP no cuesta nada modificar los permisos de los ficheros. Si no sabes qué permisos dar, puedes habilitarlos todos y para todos (propietario, grupo y resto del mundo). Esto no es muy seguro, pero garantiza el funcionamiento.

# 8. La invocación del CGI

El último paso que tenemos que dar antes de ver en acción nuestro CGI es editar una página HtML que lo invoque adecuadamente.

Normalmente, los CGIs son invocados desde el parámetro action de la etiqueta <form> de un formulario. Este parámetro debe contener la ruta y el nombre de nuestro CGI. La ruta es, normalmente, /cgi-bin/.

Adicionalmente, el CGI puede requerir el paso de parámetros, que van siempre a la derecha del nombre del CGI y separados de éste por el carácter "?".

Todo esto debe ir especificado en el fichero de ayuda del CGI.