Techbull.com est hébergé chez Hébergement-web-québec.com
|
|||
|
Échange de bannières Québécoises
Mais avant de vous aventurer sur le développement en PERL sous UNIX, il est peut-être encore question de faire machine arrière, en lisant la première section.
En positionant la valeur mailto: suivie de votre adresse en regard de la méthode POST, vous évitez l'écriture d'une procédure CGI sur le serveur puisque vous recevrez un courrier contenant toutes les valeurs entrées dans les différents champs.
Ainsi l'exemple suivant :
dont le code HTML est :<FORM METHOD="POST" ACTION="mailto:nom@adresse.fr"> <P> Nom <INPUT NAME="Nom" VALUE="" > <BR> Prénom <INPUT NAME="Prenom" VALUE="" ><BR> Adresse Email <INPUT NAME="Email" VALUE="" > <BR> <INPUT TYPE="SUBMIT" VALUE="Envoyer"> </FORM>
Nom=Maire&Prenom=Gilles&Email=Gilles.Maire@imaginet.fr
Un certain nombre de transformations seront appliquées quant à l'expédition de ce courrier:
#on sépare les champs délimités par & @champs= split(/&/,$buffer); # pour chacun des champs foreach (@champs){ # On convertit les plus en espaces s/\+/ /g; # On sépare chaque champ en une clé et sa valeur (séparés par =). ($key, $val) = split(/=/); # On convertit les %XX de leur valeur hexadécimale en alphanumerique $key =~ s/%(..)/pack("c",hex($1))/ge; $val =~ s/%(..)/pack("c",hex($1))/ge; # $champs{$key} .= "\0" if (defined($service{$key})); $champs{$key} .= $val ; }
Cette subroutine n'est autre qu'un ordre :
print "Content-type: text/html\n\n" ;
Il est très important de respecter les deux caractères \n\n.
Une autre directive est la directive Location:
Cette directive permet d'appeler une page HTML existante à partir d'une procédure CGI. C'est comme cela que le programme URoulette fonctionne.
print "Content-type: text/html\n\n" ; print "<UL>" ; foreach ( keys (%ENV)) #la procedure keys donne tous les indices du tableau associatif %ENV { print "<LI><B>$_ </B> :<BR> $ENV{$_}\n" ; #On imprime simplement chaque nom de variable d'environnement et sa valeur. } print "</UL>";
On voit qu'il est, par exemple, facile de savoir la marque de votre lecteur de Web, par la variable $ENV{HTTP_USER-AGENT}.
Ils ont été mis en oeuvre pour permettre quelques fonctions dynamiques aux pages Webs. Ainsi sans aller aussi loin que le langage Java, ils permettent d'animer vos pages Webs, notamment par des séquences d'images.
La fonction Serveur Push laisse la connexion ouverte, ce qui a pour effet de montrer au lecteur une page HTML jamais chargée à 100%. Cette directive nécessite un serveur HTTP et l'emploi de procédure CGI.
La fonction Client Pull provoque la réouverture de la connexion par le client. Cette directive peut être utilisée même dans des pages locales, c'est à dire qu'elle est purement orientée client.
<META HTTP-EQUIV="Refresh" CONTENT="x; URL=http://..">
Regardons l'exemple suivant :
<META HTTP-EQUIV="Refresh" CONTENT=3> <TITLE>Exemple Pull Client</TITLE> <h1>Exemple Pull Client</h1> Ceci est une page qui est réactivée toutes les 3 secondes<P>
Puisque nous sommes dans le chapitre trucs et astuces donnons les idées suivantes :
N'oubliez pas non plus de mettre dans votre page personnelle un générateur automatique d'adresse URL, à l'instar d'Uroulette, en donnant l'URL : URouLette [kuhttp.cc.ukans.edu/cwis/organizations/kucia/uroulette/uroulette.html])
Ceci naturellement consomme des ressources CPU sur le serveur httpd et il n'est pas évident que votre ingénieur système vous autorisera à mettre en place la directive Serveur Push.
Pour actionner un mécanisme Serveur Push il faut envoyer avec la page HTML une directive qui n'est plus text/html, mais la suivante :
Content-type: multipart/mixed;boundary=ThisRandomString --ThisRandomString Content-type: text/plain Les données du premier document --ThisRandomString Content-type: text/plain Les données du deuxième document --ThisRandomString--
Ce sont les deux tirets (--) après le dernier ThisRandomString qui indiquent que le document est terminé. Il est possible d'utiliser une deuxième syntaxe encore expérimentale:
"multipart/x-mixed-replace"
multipart/mixed
Si la procédure CGI effectue une boucle sans fin, l'image pourra être animée de façon continue.
On peut agrémenter la procédure CGI d'une attente de quelques secondes.
Aucun caractère blanc n'est autorisé dans une directive Serveur Push
Enfin regardons le sympathique programme suivant de Rob McCool,
/* * doit.c: Quick hack to play a sequence of GIF files. * * Rob McCool * * This code is released into the public domain. Do whatever * you want with it. * */ #include <sys/types.h> #include <sys/mman.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <stdio.h> #define LASTCHAR 'j' #define HEADER \ "Content-type: multipart/x-mixed-replace;boundary=ThisRandomString\n" \ #define RANDOMSTRING "\n--ThisRandomString\n" #define ENDSTRING "\n--ThisRandomString--\n" #define CTSTRING "Content-type: image/gif\n\n" int main(int argc, char *argv[]) { struct stat fi; char fn[32]; caddr_t fp; unsigned char x; int fd; if(write(STDOUT_FILENO, HEADER, strlen(HEADER)) == -1) exit(0); if(write(STDOUT_FILENO, RANDOMSTRING, strlen(RANDOMSTRING)) == -1) exit(0); x = 'a'; while(1) { sleep(1); if(write(STDOUT_FILENO, CTSTRING, strlen(CTSTRING)) == -1) exit(0); sprintf(fn, "images/A%c.gif", (char) x); if( (fd = open(fn, O_RDONLY)) == -1) continue; fstat(fd, &fi); fp = mmap(NULL, fi.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if(fp == (caddr_t) -1) exit(0); if(write(STDOUT_FILENO, (void *) fp, fi.st_size) == -1) exit(0); munmap(fp, fi.st_size); close(fd); if(write(STDOUT_FILENO, RANDOMSTRING, strlen(RANDOMSTRING)) == -1) exit(0); if(x == LASTCHAR) goto thats_it; else ++x; } /* This goto is Marc's fault. Marc digs goto. */ thats_it: exit (0); }
Mais ces exemples ont été supplantés aujourd'hui par les programmes de création d'images animées du style de GifConf.
Accueil - Techbull.com? - Nous contacter - Ajouter Un bon lien(s) |
Copyright © 2000 Les Technologies Bulldog |