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

Documents pareils