Techniques de Programmation pour Internet Année
Transcription
Techniques de Programmation pour Internet Année
Techniques de Programmation pour Internet Année Spéciale Informatique ENSIMAG 1999 - 2000 James L. Crowley Séance 7 30 mars 2000 TD 3 - Affichage d'un agenda électronique. Dans cet exercice, vous allez réaliser un scripte "display-agenda.cgi" pour l'affichage de l'agenda d'aujourd’hui crée par "create-plan.cgi" dans votre répertoire ~/www/plan. L’agenda est composé d'un fichier .html par rendez-vous. Le nom de chaque fichier indiquera la date et l'heure du rendezvous. Par exemple, le nom du fichier pour un rendez-vous pour ce cours est : 2000.3.30.11.30.html. Le fichier contiendra 6 champs de texte : qui, quand, duree, sujet, lieu, description. Pour simplicité, il est important qu'il n'y a pas de blanc entre les mots clés et les ":" dans les fichiers de votre agenda. Il est également nécessaire que les heurs ne commence pas par un "0". Si vous n'avez pas complété la TD du séance 5, voici un fichier .html pour tester votre scripte. Content-type: text/html <HTML> <TITLE>Rendezvous avec Joelle</TITLE> <BODY> qui: Joelle<BR> quand: 14h00<BR> duree: 30<BR> lieu: Bt. B<BR> sujet: Planning des cours<BR> description: Ceci est un test<BR> </BODY> </HTML> 1) Allez au répertoire [votre-login]/www et utilisez votre éditeur de texte préféré afin de ajouter une "href" vers [votre-login]/cgi-bin/display-agenda.cgi. <A "HREF="/users/[votre-login]/cgi-bin/display-agenda.cgi">Agenda du jour </A> Année Spéciale ENSIMAG Techniques de Programmation pour Internet 2) Avec votre éditeur, créez un fichier nommé display-agenda.cgi dans votre répertoire cgi-bin. Entrez dans ce fichier les lignes suivantes ce fichier. #!/usr/local/bin/perl #display-agenda.cgi print "Content-type: text/html", "\n\n"; print "<HTML>" , "\n"; print "<TITLE>Votre Agenda du Jour</TITLE>" , "\n"; print "<BODY>" , "\n"; $today = "Jeudi"; #ecrire tableau print qq(<HR><TABLE BORDER><TR><TH></TH>); print qq(<TH>$today, $mday/$mon/$year</TH>); print qq(</TR>\n); for($i=8; $i<20;$i++) { print qq(<TR><TD>$i:00</TD>$meetings{$i}.</TD>\n); } print qq(</table>\n); print "</BODY>" , "\n"; print "</HTML>" , "\n"; exit(0); Changez ce fichier en "exécutable pour tous" avec la commande Unix : chmod a+x *.cgi Testez le scripte avec votre navigateur préféré. 3) On peut accéder à la date et a l'heur avec la fonction localtime(). Cette fonction rend un vecteur composé du 9 champs qui donne l'heur et la date. Dans ces valeurs, l'année est par rapport de l'année 1900, le mois est un entier entre 0 et 11, et le jour de la semaine est un entier entre 0 et 6. Entrez la code suivant dans votre scripte en place de la ligne $today = "Jeudi"; et testez le scripte avec votre navigateur préféré. ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); print qq($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst\n); 5-2 Année Spéciale ENSIMAG Techniques de Programmation pour Internet $year += 1900; $mon += 1; @days=("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"); $today = $days[$wday]; print qq(<H1> $today, $mday/$mon/$year</H1>\n); 4) La fonction "readdir()" permet de consulter la contenue d'un repertoire. La fonction "opendir()" permet changer le répertoire à ouvrir. Ajouter le code suivant à votre scripte avant la ligne #ecrire tableau et testez le scripte avec votre navigateur préféré. $dir="/users/[votre-login]/www/plan"; opendir PLAN, $dir; print "<br>directory is $dir<br>", "\n"; @allfiles = readdir PLAN; foreach $FILE (@allfiles) { print qq($FILE\n); } closedir PLAN; #ecrire tableau 5) La date et l'heure d'un rendez-vous sont obtenues par un split sur le nom du fichier. Pour chaque rendez-vous, créez un entré dans le tableau $meetings{} à la position de l'heur. Remplacer le ligne "print qq($FILE\n);" par le code suivant et testez le script avec votre navigateur préféré. ($fyear, $fmonth, $fday, $fhour, $fmin, $html) = split(/\./, $FILE); $meetings{$fhour} = qq(<A HREF="$FILE">$FILE</A>); print qq(Meetings{$fhour} is $meetings{$fhour}\n); 6) Le contenu du fichier est accessible par un "open()". Open pendre comme argument la composition de répertoire et le nom du fichier, composé par $dir."/".$FILE. Pour chaque fichier qui concerne aujourd'hui, on ouvre le fichier avec "open FILE". Les lignes d'une fichier sont lues par l'opérateur <FILE>. Cette opérateur rend NULL à la fin de la fichier. On détecte les lignes qui commencent par un mot clé avec la fonction "match" : $line =~ m/\:/; 5-3 Année Spéciale ENSIMAG Techniques de Programmation pour Internet On élimine le "\n" à la fin du ligne avec chop(). On obtient la clé et la valeur avec ($key, $value) = split (/:/, $line); On élimine la balise html à la fin de la ligne avec ($value,$tag) = split(/\</, $value); Ceci permet de composer une chaîne pour chaque rendez-vous indiquant la personne et la lieu. Ajouter la code suivante à votre scripte et testez le script avec votre navigateur préféré. if (($fyear eq $year) && ($fmonth eq $mon) && ($fday eq $mday)) { $FILE = $dir."/".$FILE; open FILE or die "Can't open $FILE: $!\n"; # print "file for $fhour is $FILE\n"; while ($line = <FILE>) { if ($line =~ m/\:/) { # print $line; chop($line); ($key, $value) = split (/:/, $line); ($value,$tag) = split(/\</, $value); $meeting{$key} = $value; # print "Setting meeting{$key} to $value\n" } } $meetings{$fhour} = qq(<A HREF="$FILE"> $meeting{"qui"} a $meeting{"lieu"}</A>); close FILE; } 5-4