
Cuando el World Wide
Web inició su funcionamiento como lo conocemos, empezando a
tomar popularidad aproximadamente en 1993, solo se podía
apreciar texto, imágenes y enlaces. La introducción de Plugins en los navegadores permitió
mayor interactividad entre el usuario y el cliente, aunque estaba
limitado por la velocidad y la necesidad de tener que bajar e
instalar cada plugin que se necesitara, por lo que estos se
desarrollaron mayormente en áreas de vídeo, audio y realidad
virtual.
El CGI (Por sus siglas en inglés "Common
Gateway Interface") cambio la forma de manipular
información en el web.
En sí, es un método para la transmisión de información hacia
un compilador instalado en el servidor. Su función principal es
la de añadir una mayor interacción a los documentos web que por
medio del HTML se presentan de forma estática.
El CGI es utilizado comúnmente para contadores, bases de datos, motores
de búsqueda,
formulários, generadores de email automático, foros
de discusión,
chats, comercio electrónico, rotadores y mapas de
imágenes, juegos en línea y otros.
Esta tecnología tiene la ventaja de correr en el servidor cuando
el usuario lo solicita por lo que es dependiente del servidor y
no de la computadora del usuario.
De acuerdo a la traducción de la NCSA: "Un documento HTML es estático, lo
que significa que existe en un estado constante; es un archivo de
texto que no cambia. Un script CGI por otro lado, es ejecutado en
tiempo real, lo que permite que regrese información dinámica.
Por ejemplo, digamos que quieres conectar tus bases de datos de
Unix al World Wide Web para permitir que las personas de todo el
mundo la manipulen. Básicamente, lo que debes hacer es crear un
script CGI que será ejecutado por el servidor para transmitir
información al motor de la base de datos, recibir los resultados
y mostrarselos al cliente. Este es un ejemplo sencillo que
muestra donde el CGI tiene sus origenes".
Los programas que maneja el CGI pueden estar compilados en
diferentes lenguajes de programación. El más popular para el
desarrollo de contenidos Web es el lenguaje Perl de distribución gratuita, aunque
también podemos mencionar: C, C++ y Java.
El funcionamiento de esta tecnología es muy sencillo. Los
scripts residen en el servidor, donde son llamados, ejecutados y
regresan información de vuelta al usuario.
Para
una mejor aclaración presentamos la siguiente gráfica:

Un ejemplo de un llamado a un script CGI puede ser:
http://www.maestrosdelweb.com/cgi-bin/ejemplo.cgi
Hay que tomar muy en cuenta que existen dos formas de enviar
información; siendo estas por medio de GET y POST.
El primero envía la información dentro del URL separando los
campos con signos de interrogación '?' antes de la información, como por
ejemplo:
http://www.maestrosdelweb.com/cgi-bin/ejemplo.cgi?nombre=Christian&cargo=Webmaster
Esta forma presenta varias desventajas, ya que no permite manejar
grandes cantidades de información y por ser una dirección, los
Caches de los navegadores pueden guardar los resultados, lo que
dificulta el poder acceder nuevamente a la aplicación, pero
simplifica el uso de los scripts con solo utilizar una dirección
URL.
La otra forma de enviar la información es por medio de POST,
el cual envía la información directamente al servidor,
haciendolo invisible en el URL y permitiendo cualquier cantidad
de información, como el envío de archivos.
Las diferencias entre GET y POST son primordiales
para adaptar una aplicación y hacerla funcionar.
Así, el siguiente paso
luego de de manejar el diseño de páginas web es aventurarse a
estas tecnologías que darán un nuevo concepto de interacción
en un sitio web.
Existe una grán cantidad de código gratuito disponible para
iniciar, pero es necesario contar con un servidor adecuado y que
soporte esta tecnología, asi como la modificación de permisos
dentro de sus directorios. La forma más facil de hacer pruebas
es con el compilador Perl que viene incluido en cualquier
plataforma Unix o derivada como es el caso de Linux. En otras plataformas de 32
bits como Windows puede ser instaldo el Perl32.
| Capítulo 1: Escribiendo nuestro primer CGI |
Capitulos del
Tutorial:
Escribiendo
nuestro primer CGI
Definición
y uso de variables
Bienvenidos al tutorial de CGI en español..
En este tutorial se cubrirán varios aspectos que te ayudaran a
empezar a programar aplicaciones CGI para el interprete Perl.
Si necesitas mayor información sobre CGI y Perl puedes ver el artículo
introductorio a CGI en este sitio y que además comprende
algunos enlaces interesantes.
Bueno, por donde empezamos?
Claro, para iniciar, este tutorial esta pretendido para programar
CGIs que funcionen por medio del interprete Perl en un sistema
UNIX. En caso de que no cuenten con un sistema Unix, también
pueden conseguir una copia de Perl32 en www.perl.com que funcionará en Windows NT.
El CGI, al igual que el HTML que necesita cierta estructura para
funcionar como por ejemplo, las tags <HTML> y <HEAD>
debe iniciar siempre en la primera línea con una declaración
donde se le indique la locación del intérprete Perl:
1. #!/usr/bin/perl
Para averiguar la dirección de Perl en el sistema, podemos ir a la línea de comando y escribir el comando:
which perl
luego de haber definido
esta línea, ya podemos iniciar a escribir código para la
aplicación.
En esta lección aprenderemos a escribir una página de respuesta
en HTML como resultado de una aplicación CGI.
El comando que se utiliza para escribir en CGI es print y para enviar al navegador una
página HTML, se debe iniciar así:
2. print "Content-type:text/html\n\n";
Esta línea de código
envía al navegador la instrucción de que el siguiente contenido
será escrito en texto HTML y se utiliza \n para dejar espacios verticales.
El contenido de el comando print, debe ser colocado entre comillas.
Siempre al terminar una declaración se utiliza ; para finalizar.
Para continuar y luego de está línea podemos seguir escribiendo
líneas de código HTML:
3. print
"<HTML>\n";
4. print
"<HEAD><TITLE>Mi primer
CGI</TITLE></HEAD>\n";
5. print "<BODY
BGCOLOR=\"#FFFFFF\"
TEXT=\"#000000\">\n";
6. print "<H1>Este es el
resultado de mi primer CGI</H1>\n";
7. print
"</BODY>\n";
8. print
"</HTML>\n";
Incluir HTML dentro de
una aplicación CGI es sencillo. En este ejemplo se puede
explicar otra cosa muy importante: Al utilizar el comando print se deben utilizar comillas,
pero también como parte del HTML se escriben comillas, como se
muestra en la línea 5. Para que esto no sea problema, es
necesario incluir una diagonal invertida \ antes de cualquier comilla que
incluya el HTML para evitar errores de sintaxis.
Existe también otra forma de escribir CGI sin escribir distintas
instrucciones y que entre otros, permite que utilicemos CGI sin
necesidad de modificarlo con diagonales invertidas:
3. print qq|
4. <HTML>
5. <HEAD><TITLE>Mi
primer CGI</TITLE></HEAD>
6. <BODY
BGCOLOR="#FFFFFF" TEXT="#000000">
7. <H1>Este es el resultado
de mi primer CGI</H1>
8. </BODY>
9. </HTML>
10. |;
Como se puede observar,
es más fácil de utilizar esta forma, pero hay que ser muy
cuidadosos, pues se pueden causar errores de sintaxis. Por
ejemplo, en la línea 10, está la instrucción que cierra la
línea de impresión. Esta instrucción debe estar tabulada igual
que el resto del código que aparece desde la línea 3 y no debe
existir espacios antes de ella o se producirá un error.
En resumen, el código completo para esta aplicación es el
siguiente:
1. #!/usr/bin/perl
2. print
"Content-type:text/html\n\n";
3. print
"<HTML>\n";
4. print
"<HEAD><TITLE>Mi primer
CGI</TITLE></HEAD>\n";
5. print "<BODY
BGCOLOR=\"#FFFFFF\"
TEXT=\"#000000\">\n";
6. print "<H1>Este es el
resultado de mi primer CGI</H1>\n";
7. print
"</BODY>\n";
8. print
"</HTML>\n";
Y bueno, con este
código ya es posible imprimir desde una aplicación CGI hacia
HTML en nuestro navegador. El código completo en forma de texto
se encuentra en el archivo ejemplo1.txt.
Si hay algún error al probarlo, hay una guía
para Solventar errores en aplicaciones CGI que te será de utilidad.
Cualquier comentario respecto al tutorial les será agradecido
para mejorar los próximos capitulos.
Ya aprendimos
anteriormente a imprimir una página web desde un documento. A
continuación veremos la aplicación y definición de las
variables en nuestros programas CGI.
Para iniciar diremos que una variable es un espacio donde puede
almacenarse información para utilizara durante la ejecución de
nuestro programa.
A diferencia de muchos lenguajes de programación, Perl es algo
desordenado. Para utilizar una variable basta con definirla en
cualquier parte de nuestro programa y no hay necesidad de
declarar si es numérica, alfanumérica, etc.
Se pueden utilizar 3 tipos de variables que son: scalars (escalares), arrays (conjuntos) y hashes (conjuntos definidos).
Las variables scalars (escalares) almacenan información de un
solo valor. Para definirlas utilizamos el signo de dólar ($) antes del nombre de la variable
que puede ser $variable1, $mw, $1, etc..
Estas variables se utilizan de la siguiente forma:
$variable1
= "Hola amigo";
$mw = 1999;
Para definir el valor que contine una variable se utilizan las comillas (" "), incluyendo entre comillas los contenidos alfanuméricos y los de valor numérico sin comillas. El valor de una variable puede cambiar según lo requiera el programa y podemos hacer que una variable numérica se convierta en una alfanumérica sin problema.
$ejemplo
= 1999;
$ejemplo = "Sabías que estamos en el año $ejemplo";
Para explicar mejor el funcionamiento de un las variables escalares tenemos el siguiente ejemplo
1. #!/usr/bin/perl
2. $Titulo = "Mi primer
ejemplo de variables";
3. $Numero = 78;
4. print
"Content-type:text/html\n\n";
5. print
"<HTML>\n";
6. print
"<HEAD><TITLE>$Titulo</TITLE></HEAD>\n";
7. print "<BODY
BGCOLOR=\"#FFFFFF\"
TEXT=\"#000000\">\n";
8. print
"<H1>$Titulo</H1>\n";
9. print "<H2>Mi número
de la suerte es el $Numero</H2>\n";
10. print
"</BODY></HTML>\n";
Como pudimos apreciar,
al correr este programa, las variables que definimos al principio
son incrustadas en el código que se imprime. Además, las
variables pueden ser utilizadas todas las veces que lo
necesitemos..
El código del programa anterior puede ser tomado del archivo ejemplo2a.txt para un mejor manejo.
Continuando con el segundo tipo de variables, nos encontramos con
las arrays (conjuntos) que como lo indica su nombre, sirven
para almacenar un conjunto de valores, a diferencia de las scalars que almacenan un solo valor.
Para definir este tipo de variables se utiliza el signo de arroba
(@) antes del nombre de la variable
y se utilizan de la siguiente manera:
@dias = ("lunes","martes","miercoles","jueves","viernes","sabado","domingo");
Una vez definida la variable de tipo de tipo array, para utilizar los valores se utilizan variables de tipo scalar, ya que serán manejados individualmente. Asi, para seleccionar el segundo valor de @dias utilizamos el comando $dias[1]. Hay que tomar en cuanta que la númeración inicia desde 0, por lo que para utilizar el primer valor utilizariamos $dias[0]. A continuación ejemplificaremos el uso de estas variables:
1. #!/usr/bin/perl
2. $Titulo = "Mi segundo
ejemplo de variables";
3. @habiles =
("lunes","martes","miercoles","jueves","viernes");
4. print
"Content-type:text/html\n\n";
5. print
"<HTML><HEAD><TITLE>$Titulo</TITLE></HEAD>\n";
6. print "<BODY
BGCOLOR=\"#FFFFFF\"
TEXT=\"#000000\">\n";
7. print "<H3>Mis días
habiles son:</H3>\n";
8. print
"<H4>$habiles[0],</H4>\n";
9. print
"<H4>$habiles[1],</H4>\n";
10. print
"<H4>$habiles[2],</H4>\n";
11. print
"<H4>$habiles[3],</H4>\n";
12. print
"<H4>$habiles[4],</H4>\n";
13. print
"</BODY></HTML>\n";
y mejor aún, podemos simplificar este proceso con el comando foreach que por medio de un ciclo, nos facilita el trabajo, quedando el código así:
1. #!/usr/bin/perl
2. $Titulo = "Mi segundo
ejemplo de variables";
3. @habiles =
("lunes","martes","miercoles","jueves","viernes");
4. print
"Content-type:text/html\n\n";
5. print
"<HTML><HEAD><TITLE>$Titulo</TITLE></HEAD>\n";
6. print "<BODY
BGCOLOR=\"#FFFFFF\"
TEXT=\"#000000\">\n";
7. print "<H3>Mis días
habiles son:</H3>\n";
8. foreach $variable (@habiles) {
9. print
"<H4>$variable,</H4>\n";
10. }
11. print
"</BODY></HTML>\n";
Como apreciamos, el
comando foreach repite el proceso que se le indica entre
las {
}, lo cual es muy
efectivo al manejar procesos que tienen una secuencia.
El código del programa anterior puede ser tomado del archivo ejemplo2b.txt para un mejor manejo.
Como las arrays son conjuntos de elementos, Perl tiene algunos
comandos que nos permite manipular los valores que estos tienen:
@meses
= ("enero","febrero","marzo");
sort(@meses); Ordena los valores alfabéticamente
reverse(@meses);
Invierte
los valores
$ultimo
= pop(@meses); Muestra el último valor (marzo)
$primero
= shift(@meses); Muestra el primer valor (enero)
push(@meses,"abril");
Incluye
el valor (abril) al final de el array @meses
$#meses
Muestra
el tamaño del array @meses
Finalizando con los tipos de variables, nos toca hablar de las del tipo hashes (conjuntos definidos) y que son como las arrays pues funcionan como conjuntos pero con valores relacionados. Así, podemos decir que los hashes se componen de una definición y su información. Para definirlas se utiliza el signo de porcentaje (%) y se utilizan de las siguiente forma:
%emails
= ( "carlos" =>
"carlos\@maestrosdelweb.com",
"pedro" => "pedro\@maestrosdelweb.com",
"mario" => "mario\@maestrosdelweb.com",
"tomas" => "tomas\@maestrosdelweb.com");
Como observamos, a cada
nombre se le asigna un valor que representa su email. Así es
como funcionan los hashes, definiendo un valor para cada
definición.
Otra cosa que aprendemos en este ejemplo es que antes de escribir
el signo de arroba (@) cuando es parte de un valor, debe de
tener anteriormente la diagonal invertida (\) para que el programa no lo
confunda con una array.
Ahora, para tomar el valor de cada uno de las definiciones que
hay en las hashes, se utiliza un sistema muy similar al
que utilizamos anteriormente con los arrays. Por ejemplo, para tomar el valor del
email de mario, utilizaríamos $emails{'mario'} Para ejemplificar el uso que
podemos darles a los hashes se presenta el siguiente ejemplo:
1. #!/usr/bin/perl
2. $Titulo = "Mi tercer
ejemplo de variables";
3. %emails = ( "carlos"
=> "carlos\@maestrosdelweb.com",
4. "pedro" =>
"pedro\@maestrosdelweb.com",
5. "mario" =>
"mario\@maestrosdelweb.com",
6. "tomas" =>
"tomas\@maestrosdelweb.com");
7. print
"Content-type:text/html\n\n";
8. print
"<HTML><HEAD><TITLE>$Titulo</TITLE></HEAD>\n";
9. print "<BODY
BGCOLOR=\"#FFFFFF\"
TEXT=\"#000000\">\n";
10. print "<H3>Los emails
de mis amigos:</H3>\n";
11. foreach $nombre (keys %emails) {
12. print "<H4><A
HREF=\"mailto:$emails{$nombre}\">$nombre</A></H4>\n";
13. }
14. print
"</BODY></HTML>\n";
Las hashes entonces le
adhieren más funciones a la variables. Podemos diseñar con esto
en mente un directorio de emails o de enlaces, fácilmente
administrable y que podemos cambiar sin mucho esfuerzo.
El código del programa anterior puede ser tomado del archivo ejemplo2c.txt para un mejor manejo.
Recuerden que si alguno de sus programas CGI les causa algún
error, pueden consultar la guía para Solventar errores en
aplicaciones CGI
de este sitio.
Con esto finalizamos la explicación de los tipos de variables
que podemos manejar en Perl.
Para el próximo capítulo de este tutorial veremos una pequeña
reseña de manejo de formas y envió de email desde un programa
CGI.
Cualquier comentario respecto al tutorial les será agradecido
para poder mejorar en los próximos capítulos.
Para mayor información ir a este link.
http://www.maestrosdelweb.org/editorial/tecnologias/cgi.asp
| Para extender la información
introductoria, pueden visitar el tutorial de CGI enfocado en el
compilador Perl que se está desarrollando en el sitio. También en los enlaces temáticos de este sitio hay una sección especializada cubriendo el tema del CGI con los sitios más interesantes, tutoriales y referencia que merece revisar. |
Christian Van Der Henst
S.
[email protected]