Title: El Lenguaje C en CGI
1El Lenguaje C en CGI
- El ANSI C, uno de los lenguajes de
programación más conocidos, utiliza la función
getenv(),definida en el archivo de cabecera
stdlib.h, para recoger una variable de entorno.
El prototipo de la función es - char getenv(char nombre_variable)
-
- La función getenv() recibe el nombre de una
variable de entorno, y devuelve una cadena (char
) correspondiente al valor almacenado en dicha
variable. - Ilustremos esta función almacenando en la
variable nombre_navegador el contenido de la
variable de entorno HTTP_USER_AGENT.
2El lenguaje C en CGI II
- void main(void)
- char nombre_navegador
-
- nombre_navegadorgetenv(HTTP_USER_AGENT)
- .....
- ....
-
- Las líneas punteadas sugieren que en lo que
respecta del programa se debe utilizar la
variable nombre_navegador.
3El lenguaje PERL en CGI
- Una alternativa al uso del ANSI C, es el
lenguaje PERL este lenguaje es ideal para la
creación de aplicaciones CGI debido a su poderoso
manejo de cadenas, y a que tiene todos los
elementos propios de un lenguaje estándar de
programación. - En PERL se define una matriz (ENV) en la que
se almacenan todas las variables de entorno. La
instrucción que permite capturar el contenido de
entorno HTTP_USER_AGENT es la siguiente - ENVHTTP_USER_AGENT
4Codificación de los Datos
- Recordemos que el método POST permite enviar
los datos de los campos del formulario como parte
del mensaje, utilizando el canal estándar de
entrada. El método GET por el contrario, almacena
la respuesta dentro de la variable de entorno
QUERY_STRING. - Sin importar si se utiliza el método POST o
el método GET, los datos del formulario se
codifican de acuerdo a un estándar denominado
URLencoding. En este sistema de codificación se
siguen las siguientes reglas - El nombre de la variable y su valor asociado se
separan mediante el signo (). - Las parejas de datos están separadas mediante el
símbolo de ampersand ().
5Codificación de los Datos
- Los espacios en blanco se sustituyen por el
símbolo suma (). - Los restantes caracteres alfanuméricos no
sufren ninguna variación. Sin embargo, los
caracteres no alfanuméricos, como el tabulador,
los símbolos de puntuación, etc. Se codifican
así - se sustituye el carácter alfanumerico por el
simbolo del tanto porciento ()., y a
continuación se agrega el código ASCII
equivalente en base hexadecimal. Un ejemplo
simple - apellidoAntonioPE9rezempresaACCIONLTDA
correoempid_at_diansa.com.co
6Codificación de los Datos
- Observaciones sobre el ejemplo.
- En primer lugar el formulario contiene tres
elementos que han sido rellenados por el usuario
del navegador apellidos, empresa y correo. Estos
elementos pueden corresponder a cuadros de texto
para recibir los datos digitados en la página del
navegador. - Al frente de cada variable (campo), separado
con el símbolo igual (), se encuentra el
correspondiente contenido. Como puede observarse
cada uno de estos datos requiere la utilización
de símbolos especiales. - Las variables, incluyendo su contenido,
están separadas mediante el símbolo .
7Algunos códigos ASCII equivalentes
8Capturando los datos
- La primera acción del guión CGI es capturar
los datos enviados por el navegador. Si el método
utilizado para la captura de los datos es GET,
entonces los datos se encuentran en QUERY_STRING -
- includeltstdio.hgt
- includeltstdlib..hgt
- includeltmalloc..hgt
- void main(void)
- char cadena // guarda la variable de entorno
- cadena(char)malloc(sizeof(char)1000)
//reserva - cadenagetenv(QUERY_STRING)
-
9Programas utilizados para procesar formularios
- Para empezar, vamos a escribir un programa
que recoja los datos directamente del canal
estándar de entrada, asumiendo que se ha
utilizado el método POST. Los datos son
almacenados en la variable info, con capacidad de
hasta 1000 caracteres
10Programa 1
- includeltstdio.hgt
- includeltstdio.hgt
- void main(void)
- int i
- char info
- const char cadena
- double longitud
- info(char)malloc(sizeof(char)1000)
- cadenagetenv(CONTENT_LENGTH)
- longitudstrtod(cadena,NULL)
- for(i0iltlongitudi)
- fscanf(stdin,c,infoi)
-
- infolongitud\0
11PERL
Perl es un lenguaje interpretado. Esta
característica implica que su velocidad es menor
que la que brinda un lenguaje compilado, pero se
compensa esta ventaja al ofrecer algunas
características entre las que se incluye un hábil
manejo de información de tipo textual, y
facilidades para la construcción de sistemas
complejos como servidores FTP o servidores de
correo electrónico.
12PERL
- Perl fue desarrollado por Larry Wall para el
sistema operativo UNIX. El nombre Perl es un
acrónimo de Lenguaje Práctico para Extracción y
Reportes (Practical Extractionand Report
languaje), y como su nombre sugiere, su principal
campo de actividad se encuentra en el
procesamiento de texto y en el tratamiento de
formularios contenidos en las páginas Web.
13PERL
- Algunas de las ventajas del uso del lenguaje PERL
son las siguientes - Construcción de pequeños programas que pueden ser
usados como filtros para obtener información de
ficheros, realizar búsquedas, ... - Se puede utilizar en varios entornos, como puede
ser Windows 95, OS/2, ..., sin realizar cambios
de código, siendo únicamente necesario la
introducción del interprete PERL correspondiente
a cada sistema operativo. - El mantenimiento y depuración de un programa en
PERL es mucho más sencillo que la de cualquier
programa en C.
14Ejecuciones de guiones PERL
- Comenzaremos presentando un instrucción en
lenguaje Perl - print hola, mundo
- Para el desarrollo completo de un guion CGI
es necesario crear un archivo que contenga el
programa con una extensión válida como por
ejemplo hola.pl - El programa se ejecuta con la orden Perl
hola.pl
15Ejecuciones de guiones PERL
- Si utilizamos UNIX o LINUX, podemos ejecutar el
programa de la siguiente manera - perl hola.pl
- Otra forma de ejecutar el programa añadir en
la primera línea de hola lo siguiente - ! /usr/bin/perl
- Los caracteres ! sirven para denotar que
lo que viene a continuación hace referencia a un
interprete de comandos. - y ejecutamos el programa de la siguiente
manera - hola.pl
16Ejecuciones de guiones PERL
- Naturalmente las ordenes van a depender del
sistema operativo. Si este es UNIX o LINUX
debemos darle permiso de ejecución. Esto se
realiza de la siguiente manera - chmod ux hola.pl
- El Perl scripts en UNIX quedaría
- ! /usr/bin/perl
- print "HOLA MUNDO\n"
17Elementos del Lenguaje
- símbolos
- Las líneas de comentarios comienzan con el
símbolo . - Las instrucciones terminan con el símbolo
- La primera línea de un programa escrito en Perl
se debe iniciar con un comentario especial que
identifica la ubicación del interprete Perl por
ejemplo - !/usr/local/bin/perl
18Tipos de datos en Perl
- En Perl no se requiere que las variables
sean declaradas antes de usarlas, e incluso el
tipo de las mismas puede cambiar a lo largo de la
ejecución del guión que las contiene. En general,
vamos a emplear tres tipos básicos escalares,
arreglos y arreglos asociativos. - Escalares
- Estos datos se corresponden con caracteres,
números y cadenas. Se reconocen porque comienzan
con el carácter (por ejemplo, código). - Los datos de tipo escalar son lo más
utilizados en la programación Perl. - Para almacenar números
- numeros 10 esta variable contiene el
valor numérico 10 - Para almacenar caracteres
- palabra 'perros'
19Tipos de datos en Perl
- Escalares
-
- Para almacenar números
- numeros 10 esta variable contiene el
valor numérico 10 - Para almacenar caracteres
- apellido gutierrez'
- Para almacenar caracteres especiales, se
utiliza - apellido " gutierrez \n"
- También es posible almacenar varias
variables al mismo tiempo. - (nombre,apellido1,apellido2)
(claudio,gutierrez",soto")
20Tipos de datos en Perl
- Arreglos
- Este tipo corresponde a lista de
caracteres, listas de números o lista de cadenas.
En particular Perl admite que las listas
contengan mezclas de caracteres, números y
cadenas. - Un arreglo se reconoce porque el
identificador que lo maneja empieza con el
símbolo _at_ (por ejemplo, _at_salarios). - Los elementos individuales son
referenciados mediante un subíndice, como por
ejemplo _at_salariosn. - Los arreglos empiezan con el componente
cero (por ejemplo, _at_salarios0).
21Tipos de datos en Perl
- Arreglos
- También es posible definir los arreglos de
la siguiente manera - _at_Alumnos (Luis",Jacqueline",Claudia )
- Es posible obtener el numero de elementos que
conforman el arreglo de los escalares. Esto es
posible utilizando los símbolos . Sin embargo
este nos devuelve el numero de elementos menos 1. - numero_alumnos Alumnos1
22Tipos de datos en Perl
- Arreglos
- También podemos acceder a varios elementos
de un array de la forma _at_nom_variableindice1,...,
indicen, por ejemplo - print _at_Alumnos0,1
- imprimirá el primer y segundo elemento del
array _at_Alumnos. - Otra forma de acceder a los elementos de
un array es usando el operador rango .. , si
quisiéramos imprimir todos los valores desde un
índice i hasta un indice j deberíamos utilizar el
siguiente formato _at_nom_variablei..j, por
ejemplo -
print _at_Alumnos0..2
23Tipos de datos en Perl
- Arreglos Asociativos
- Los arreglos asociativos se indexan
mediante cadenas. Cada uno de los elementos del
arreglo asociativo maneja la combinación
elemento/valor, por ejemplo, - mes(enero,31, febrero,28)
- Los arreglos asociativos se reconocen porque
comienzan con el símbolo ( por ejemplo, mes). - Se tiene acceso a los elementos individuales
utilizando cadenas especificas encerradas entre
llaves y con el uso del símbolo _at_