Dernière mise à jour : 26/05/2016
Ecrivez un script qui affichera le contenu du répertoire passé en paramètre sous forme de page html. Chaque entrée du répertoire affichée le sera sous forme de lien. S'il s'agit d'un fichier normal, lorsque nous cliquons sur le lien, le contenu du fichier s'affiche. S'il s'agit d'un répertoire, le fait de cliquer sur le lien affiche le contenu du répertoire de la manière précédemment annoncée.
#!/usr/bin/perl ################################################################################ # (c) Sébastien ADAM - Mars ~ Avril 2000 # # Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - # # Partage dans les Mêmes Conditions 2.0 Belgique. # ################################################################################ #******************************************************************************# # Programme principal *********************************************************# #******************************************************************************# &initcolor; print "content-type: text/html\n\n"; if(!&ReadIn) { $dir = "/"; } $rdir = $ENV{'DOCUMENT_ROOT'}.$dir; chdir $rdir || &printerror("Directory not found"); &printdir; #******************************************************************************# # Fin du programme principal **************************************************# #******************************************************************************# #******************************************************************************# # Fonctions *******************************************************************# #******************************************************************************# # Affichage du contenu du répertoire ########################################### sub printdir { opendir(DIR, '.') || &printerror("Can't open directory $dir"); @dir = readdir(DIR); closedir(DIR); foreach (@dir) { next if /^\./; # supprime les éléments cachés $type = (lstat)[2] >> 12; if ($type == 4) { push(@rep,$_); } # prend les repertoires if ($type == 8) { push(@fich,$_); } # prend les fichiers ordinaires } @rep = sort {uc($a) cmp uc($b)} @rep; @fich = sort {uc($a) cmp uc($b)} @fich; &printpgdir; } sub printpgdir { print <<FINPRINT; <html> <head> <title>Content of $dir</title> <head> <body bgcolor="$couleur{'blanc'}"> <h1 align="left">Content of $dir :</H1> FINPRINT if($dir ne "/") { print <<FINPRINT; <p align="justify"><a href="/cgi-bin/ftp.pl?$dir/.."><img src="/icons/back.gif" border="0"> parent directory</a></p> FINPRINT } print <<FINPRINT; <table border="0"> <tr><td><font size="+1">Type</font><td><font size="+1">Name</font><td><font size="+1">Size</font><td><font size="+1">Date</font></tr> FINPRINT foreach(@rep) { $date = gmtime((stat)[8]); print <<FINPRINT; <tr> <td><a href="/cgi-bin/ftp.pl?$dir/$_"><img src="/icons/folder.gif" border="0"></a> <td><a href="/cgi-bin/ftp.pl?$dir/$_">$_</a> <td align="right"> <td align="right"> $date </tr> FINPRINT } foreach(@fich) { $size = (stat)[7]; $date = gmtime((stat)[8]); print <<FINPRINT; <tr> <td><a href="$dir/$_"><img src="/icons/text.gif" border="0"></a> <td><a href="$dir/$_">$_</a> <td align="right"> $size bytes <td align="right"> $date </tr> FINPRINT } print "</table>\n</body>\n</html>\n"; } # Fin affichage du contenu du répertoire ####################################### # Affichage d'un message d'erreur ############################################## sub printerror { print <<FINPRINT; <html> <head> <title>Content of $dir</title> <head> <body bgcolor="$couleur{'blanc'}"> <h1 align="left">Content of $dir :</H1> <img src="/icons/alert.red.gif"> <p align="justify">There was an error when opening directory $dir :<br> <font color="$couleur{'rouge'}">$_[0].</font></p> </body> </html> FINPRINT die($_[0]); } # Fin affichage message d'erreur ############################################### # Lecture des données entrées ################################################## sub ReadIn { if($ENV{'REQUEST_METHOD'} eq "GET") { $dir = $ENV{'QUERY_STRING'}; } else { $dir = "/"; } return $dir; } # Fin lecture des données entrées ############################################## # Initialisation des couleurs ################################################## sub initcolor { $couleur{'noir'} = "#000000"; $couleur{'bleu'} = "#0000FF"; $couleur{'vert'} = "#00FF00"; $couleur{'cyan'} = "#00FFFF"; $couleur{'rouge'} = "#FF0000"; $couleur{'mauve'} = "#FF00FF"; $couleur{'jaune'} = "#FFFF00"; $couleur{'blanc'} = "#FFFFFF"; } # Fin initialisation des couleurs ############################################## #******************************************************************************# # Fin des fonctions ***********************************************************# #******************************************************************************#
© Sébastien Adam 1996 ~ 2024 - https://www.sebastienadam.be/ - .