Programación de pàginas web dinámicas con CGIs

Anuncio
Programación de páginas
web dinámicas con CGIs
Esquema
•
•
•
•
Webs estáticas o dinámicas.
CGIs: Que son y como funcionan
Formularios para enviar información
CGIs en perl
Webs estáticas o dinámicas


Una (página) web estática está formada por
elementos (html, imágenes, ...) que existen
independientemente de la navegación que se
realice por ella.
Una (página) web dinámica tiene componentes
que se crean (y destruyen) dinámicamente en
respuesta a acciones desencadenadas durante
la navegación.
Ejemplos
Web estática
Web dinámica
Sitio web con una página principal
desde dondes se accede a otras
páginas o enlaces.
Sistema para generar listados a partir
de una base de datos.
Cada nueva petición genera un nuevo
listado (nuevo=no existía la página
antes de pedirla)
Las páginas 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
Estática
4 estaciones
Dinámica
directori
Que son los CGIs
•
•
•
Common Gateway Interface.
Permiten la ejecución de programas a
través 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 envía información al
programa mediante un
formulario
Se ejecuta el programa y
retorna los resultados al
navegador.
Formularios y CGIs
•
•
La mayoría de scripts de CGI se
invocan desde un formulario (puede
también hacerse directamente desde
un enlace!)
Mediante los formularios
–
–
Se recopila información necesaria
(parámetros)
Se envía la información al script al pulsar
el botón “enviar”.
Envío de la información
<form method=“post”, action=“procesa.pl”>
…….
<input type=“submit” value=“Mandalo ya”>
</form>
- “method”: como se pasa la información
–
–
–
–
“post” : con la cabecera HTTP. Invisible
“get” : con la cadena de la URL: visible en la barra de
navegación
“action”: el programa a invocar
“input type=“submit”:
–
Boton de ejecución que invoca al programa descrito por
‘action’
POST y GET
•
POST
–
–
–
•
GET
–
–
–
•
EL programa obtiene la información de stdin (el
teclado, la variable generada por el formulario)
Puede enviarse tantos datos como se desee.
La información no es visible desde fuera
El programa CGI lee los datos de una variable de
entorno (QUERY_STRING)
Límite en la cantidad de datos que se puede enviar
(1,000 caracteres)
Los datos son visibles en la barra de navegación
En general se recomienda usar POST
CGIs en perl (1)
Un programa “no CGI”
#!/usr/bin/perl
use strict;
use warnings;
print "¿Cómo 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>
Invocación del programa vía 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: Creación de un CGI

Primera fase: programa sin parámetros 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: Creación 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-ejecución son
los adecuados)
perl /users/myusername/.public_html/cgi-bin/miprograma.cgi >
output
Resumen: Creación de un CGI (3)

Tercera fase: Crear y probar el formulario

Diseñar un formulario que llame a un cgi sin
parámetros

Por ejemplo un cgi que tan sólo 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

Debería aparecer una página “hola mundo”
Resumen: Creación de un CGI (4)

Cuarta fase: asegurarse de que el CGI en recibe bien los
parámetros


Crear una versión simplificada del CGI que se limite a
coger los parámetros y enviarlos al navegador.

Piede hacerse comentando todo el código que no sea
ésto
Quinta fase: Ensamblado final

Tras comprobar que el flujo de parámetros es adecuado
volvemos a la versión 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
 Debería 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 línea del archivo tienen que ser:
#!/usr/bin/perl
–
Antes incluso que otros componentes.

No debemos olvidarnos de inviocar la funión
“print header(92
–
Antes que cualquier llamada a print().

En algunos sistemas el archivo tiene que
llamarse .cgi no .pl
Enlaces interesantes
•
Introducción a la programación en perl
CGI y javascript
http://es.tldp.org/Tutoriales/PERL­CGI/perl­cgi­javascript/
•
CGI 101-Perl para la WWW
http://www.cgi101.com/class/
Descargar