
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.
Es la parte de un servidor de Web que recoje las entradas y llamadas de otros programas para procesarlos. Estos programas son tipicamente llamados programas CGI o CGI scripts y pueden ser escritos en varios lenguajes de programación, como PERL o C. CGI es un estandar más viejo comparado con el más nuevo que es la tecnología ISAPI.
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.
CGI es un
estándar que nos sirve para comunicar aplicaciones externas con los servidores
de información, como, por ejemplo, los servidores http (web). Un documento en
HTML que importamos es estático: una especie de fichero de texto que no cambia.
Por el contrario, un programa CGI se ejecuta en tiempo real, de forma que se
genera una información dinámica y constantemente actualizada.
Vamos a
suponer, por ejemplo, que tenemos una base de datos en UNIX, sobre la
reproducción de la lagartija roquera... J , y que queremos engancharla al WWW
para que los millones de aficionados a los reptiles en el mundo puedan
consultarla. Básicamente, necesitaremos un programa CGI que el ‘demonio’ o
‘daemon’ (un programa robotizado) ejecutará para transmitir información al
gestor de la base de datos, recibir la notificación de éste y transmitírsela al
cliente. En este caso, el demon de WWW actuaría como pasarela (Gateway), y de
eso se trata precisamente en los programas CGI.
Los programas en
CGI añaden funcionalidad al servidor Web,
funcionalidad que podría abrir agujeros de seguridad en el servidor, ya que una
aplicación en CGI mal diseñada podría permitir acceso total o parcial al
servidor.
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".
Las aplicaciones y programas en CGI, suelen
distinguirse entre programas (programs) y guiones (scripts).
Los primeros se
consideran escritos en algún lenguaje compilado como C, VB, Pascal, Clipper,
etc, mientras que los segundos son los
escritos en un lenguaje interpretado como Perl, Shell de Unix, etc.
En general, es necesaria la presencia de dos
elementos, una página Web en formato
HTML con un formulario donde el usuario introduce sus datos, y un programa CGI en el servidor, que recibe
y procesa los datos del usuario.
Especificaciones
Un programa CGI es tan
ejecutable como un programa EXE o COM, lo cual trae aparejados una serie de
riesgos: si conectas tu PC como servidor a la WWW, utilizar un CGI equivale a
dejar que todo el mundo ejecute un programa en tu sistema, lo que no es lo más
seguro que se puede hacer. Para evitar el riesgo que implica el que una serie de
desconocidos anden ejecutando programas en tu ordenador, hay que tomar una
serie de precauciones antes de usar un programa CGI.
Para el
usuario normal del Web, la única diferencia aparente es que los programas CGI
necesitan estar almacenados en un directorio especial, de forma que el servidor
sepa que tiene que ejecutarlos, no simplemente mostrarlos en pantalla. Este
directorio suele estar bajo control directo del webmaster o servidor de
almacenamiento de la web, prohibiéndose al usuario normal crear programas CGI.
Para cualquier dato referente a scripts CGI, deberás conectarte con tu
servidor, que es el único que puede autorizarte a incluir CGI en su sistema
Un programa
CGI se puede escribir en cualquier lenguaje de programación que pueda ser
ejecutado por el sistema, por ejemplo, C, C++, Fortran, Perl, TCL, Visual
Basic, AppleScript, etc. En realidad, todo depende de lo que haya en el sistema
que lo va a hospedar.
Normalmente,
puedes ver el código fuente de algunos programas del directorio /cgi-bin (en el
que se almacenan los scripts CGI) abriendo el directorio /cgi-src, lo que te
permitirá saber que lenguajes acepta el servidor. Si utilizas Perl, TCL o un
shell de UNIX, no tienes que preocuparte por el lenguaje, ya que se trata de lo
que se llama ‘lenguajes interpretados’, es decir, que no están asociadoa a un
código fuente en concreto. Por este motivo, así como por el hecho de que son
más fáciles de depurar, modificar y mantener que los típicos programas que
precisan compilación (Visual Basic, C, C++), están apareciendo cada vez más
programas del tipo CGI, en lugar de los antiguos EXE y COM.
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.
En general podemos decir que una aplicación CGI
consta de tres fases:
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.
Los datos enviados con
GET se recibirán por líneas de comandos y la
variable de entorno QUERY_STRING.
El CGI lo recibe por medio de una
variable de entorno lo que significa una restriccion en el tamaño de los datos. El Browser envía los datos visiblemente
haciendo una llamada de la forma: .../cgi-bin/cgi.pl?campo=algo.
Es la forma como se llaman cgis desde fuera de un formulario, por ejemplo los
contadores de visitas son habitualmente llamados de la forma:
<img src="Count.cgi?df=cgimaster2">
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.
El CGI recibirá los datos enviados
con
POST leyendo la entrada estándar,
Las diferencias entre GET y POST son primordiales para adaptar una aplicación y hacerla
funcionar.
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.
¿Qué es el directorio /cgi-bin?
Se trata del
directorio en que se guardan los scripts, preparado especialmente para esta
función en el servidor de http. Por ello, el servidor sabe que el contenido de
este directorio contiene ejecutables y que, después de ejecutados, su resultado
deberá ser enviado al navegador del cliente. El directorio /cgi-bin no es un
directorio cualquiera que podamos crear por los métodos normales, sino que debe
ser cuidadosamente configurado por el administrador del sistema. Si no se
realizase esta configuración, el cliente vería simplemente los scripts como
documentos de texto.
Existen, no
obstante, servidores configurados de tal forma que todos los archivos de una
determinada extensión, generalmente .CGI, se consideran como si se encontrasen
en el directorio /cgi-bin, y se ejecutan automáticamente, aunque no se
encuentren realmente en él.
|
Capítulo 1:
Escribiendo nuestro primer CGI |
Capitulos del Tutorial:
Escribiendo nuestro primer CGI.
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.
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.
|
PRIVATECapítulo
2: Definiendo variables y ejemplo de su uso |
Capitulos del Tutorial:
Escribiendo nuestro primer CGI.
Definición y uso de
variables.
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.