You are on page 1of 21

Programacin de pginas

web dinmicas con CGIs

Esquema

Webs estticas o dinmicas.


CGIs: Que son y como funcionan
Formularios para enviar informacin
CGIs en perl

Webs estticas o dinmicas

Una (pgina) web esttica est formada por


elementos (html, imgenes, ...) que existen
independientemente de la navegacin que se
realice por ella.
Una (pgina) web dinmica tiene componentes
que se crean (y destruyen) dinmicamente en
respuesta a acciones desencadenadas durante
la navegacin.

Ejemplos
Web esttica

Web dinmica

Sitio web con una pgina principal


desde dondes se accede a otras
pginas o enlaces.

Sistema para generar listados a partir


de una base de datos.
Cada nueva peticin genera un nuevo
listado (nuevo=no exista la pgina
antes de pedirla)

Las pginas existen aunque


nunca se acceda a ellas.

4estacions.html
primavera.html

estiu.html

hivern.html

tardor.html

IMATGES(folder)

fig1.jpg

...

fign.jpg

Directorio.html

listado.html

Ejemplo
4est

pri

ver

dir

oto

Server,
Database

inv

list
IMAGES

Esttica
4 estaciones

Dinmica
directori

Que son los CGIs

Common Gateway Interface.


Permiten la ejecucin de programas a
travs de la web.
Pueden escribirse en cualquier lenguaje

Perl, R, Java, C, C++

Perl tiene una muy buena interfaz para


crear CGIs.

Como funcionan los CGIs?

Se crea un programa, se hace


ejecutable y se almacena en
el servidor.
Se enva informacin al
programa mediante un
formulario
Se ejecuta el programa y
retorna los resultados al
navegador.

Formularios y CGIs

La mayora de scripts de CGI se


invocan desde un formulario (puede
tambin hacerse directamente desde
un enlace!)
Mediante los formularios

Se recopila informacin necesaria


(parmetros)
Se enva la informacin al script al pulsar
el botn enviar.

Envo de la informacin
<form method=post, action=procesa.pl>
.
<input type=submit value=Mandalo ya>
</form>

- method: como se pasa la informacin

post : con la cabecera HTTP. Invisible


get : con la cadena de la URL: visible en la barra de
navegacin

action: el programa a invocar


input type=submit:

Boton de ejecucin que invoca al programa descrito por


action

POST y GET

POST

GET

EL programa obtiene la informacin de stdin (el


teclado, la variable generada por el formulario)
Puede enviarse tantos datos como se desee.
La informacin no es visible desde fuera
El programa CGI lee los datos de una variable de
entorno (QUERY_STRING)
Lmite en la cantidad de datos que se puede enviar
(1,000 caracteres)
Los datos son visibles en la barra de navegacin

En general se recomienda usar POST

CGIs en perl (1)


Un programa no CGI
#!/usr/bin/perl
use strict;
use warnings;
print "Cmo te llamas?";
my $username;
$username = <STDIN>;
chomp($username);
print "Hello, $username.\n";
getusername.pl

CGIs en perl (2)


Conversion en un programa CGI
#!/usr/bin/perl
getusernamePL.cgi
use strict;
use warnings;
use CGI qw(:standard);
# use the CGI library
# print "What is your username? ";
my $username;
# "declare" the variable
# $username = <STDIN>;
$username = param (username);
# read the username
# chomp($username);
print header();
# output <HTML>
print start_html(First CGI program);
# add a title
print "Hello, $username.\n";
print end_html(); # output </HTML>

Invocacin del programa va web


<html>
getusername.html
<head><title>Get Username</title></head>
<body bgcolor=white>
<FORM
ACTION="http://miservidor/~usuario/cgi-bin/getusernamePL.cgi"
METHOD="POST">
<h2>Form Example 1</h2>
Entra tu nombre de usuario:
<INPUT TYPE="text" SIZE="20" NAME="username">
<input type=submit value=Submit Query>
</FORM>
</body>
</html>

Aspecto del programa

Entramos MARIAdelasMERCEDES
Y pulsamos el boton Envia'l

Resumen: Creacin de un CGI

Primera fase: programa sin parmetros en el


servidor

Crear un programa que se ejecute desde linea de


comandos
Ponerlo en el directorio .public_html/cgi-bin
Asignar valores a las variables, p.ej: $username =

alex;
Grabar el resultado en un archivo,
perl myprog.cgi > output.html

Visualizar la salida por el navegador

Resumen: Creacin de un CGI (2)

Segunda fase: asegurando la visibilidad del


programa

Probar de llamar el cgi desde una cuenta distinta a la


usada para copiarlo en el servidor
(asegurarse de que los permisos de lectura-ejecucin son
los adecuados)
perl /users/myusername/.public_html/cgi-bin/miprograma.cgi >
output

Resumen: Creacin de un CGI (3)

Tercera fase: Crear y probar el formulario

Disear un formulario que llame a un cgi sin


parmetros

Por ejemplo un cgi que tan slo diga Hola


mundo

Copiar el formulario en el directorio designado en


el servidor para guardar los archivos .html, por
ejemplo .public_html

Abrir el archivo html en el navegador y apretar


enviar

Debera aparecer una pgina hola mundo

Resumen: Creacin de un CGI (4)

Cuarta fase: asegurarse de que el CGI en recibe bien los


parmetros

Crear una versin simplificada del CGI que se limite a


coger los parmetros y enviarlos al navegador.

Piede hacerse comentando todo el cdigo que no sea


sto

Quinta fase: Ensamblado final

Tras comprobar que el flujo de parmetros es adecuado


volvemos a la versin completa del programa y ya
podemos ejecutarlo

Problemas habituales en los


CGIs (1)

Las etapas sugeridas en el desarrollo del CGI muestran los posibles problemas:

Problemas de permisos
Los archivos o directorios no tienen los permisos adecuados.
Verificarlo mediante ls -l en los directorios
Debera ser drwxr-wr-x en ambos
chmod 755 para los directorios
Chmod 644 el programa perl
Verificarlo pidiendo a alguien (de otra cuenta) que ejecute el script
Problemas de acceso (por ejemplo se hace la llamada a un directorio
distinto al que contiene el script)
Probar con un cgi sencillo -que no pueda fallar- si el acceso est
garantizado
Formularios mal elaborados
Errores al producir el HTML desde el script
Probar de enviarlo directamente desde el script y visualizarlo en el
navegador

perl

miprograma.cgi > output.html

firefox output.html

Otros problemas comunes

La primera lnea del archivo tienen que ser:


#!/usr/bin/perl

Antes incluso que otros componentes.

No debemos olvidarnos de inviocar la funin


print header(92

Antes que cualquier llamada a print().

En algunos sistemas el archivo tiene que


llamarse .cgi no .pl

Enlaces interesantes

Introduccin a la programacin en perl


CGI y javascript

http://es.tldp.org/Tutoriales/PERLCGI/perlcgijavascript/

CGI 101-Perl para la WWW


http://www.cgi101.com/class/