Blog technique sur mes expériences de développeur.
12 août 2022
Nous en avons donc fini avec le protocole FTP !
Je vous propose un petit exercice de synthèse qui va vous permettre de vérifier vos connaissances sur le module Net::FTP.
Ce cours était originalement publié sur la plateforme OpenClassrooms. La plateforme OpenClassrooms ayant supprimée ce tutoriel en 2020 et le tutoriel étant sous licence CC BY-SA 4.0, je vous propose de le (re)découvrir ici.
Le but de ce TP est de créer un client FTP ultra simplifié répondant au nom de zFTP.
Notre zFTP fonctionne suivant les étapes suivantes :
Afin de faire simple, voici les fonctionnalités que notre client FTP devra implémenter :
Toutes les fonctions à utiliser ont été décrites dans les chapitres précédents ! Si vous avez des doutes, n’hésitez pas à y jeter un coup d’œil !
Je vous fais part de ma solution. Bien évidemment, il ne s’agit pas de LA solution !
#!/usr/bin/perl -w
use strict;
use warnings;
use Term::ReadPassword;
use Net::FTP;
use Switch;
my $cmd;
my $arg;
#Saisie de l'hôte
print 'Hôte : ';
chomp(my $host = <STDIN>);
#Connexion au serveur
my $ftp = Net::FTP->new($host, Passive => 1) or die 'Impossible de se connecter à l\'hôte : '.$host;
#Saisie du login
print 'Login : ';
chomp(my $login = <STDIN>);
#Saisie du mot de passe
my $pwd = read_password('Password : ');
#Identification
$ftp->login($login, $pwd) or die 'Impossible de s\'identifier auprès du serveur';
do {
print 'zFTP > ';
chomp( $cmd = <STDIN>);
switch($cmd) {
#ls
case 'ls' {
if(my $ls = $ftp->ls()) {
print 'Le dossier contient '.@$ls.' élément(s) :'."\n";
foreach my $elt (@$ls) {
print $elt."\n";
}
}
else {
warn 'Impossible de lister le contenu du dossier'."\n";
}
}
#pwd
case 'pwd' {
if(my $pwd = $ftp->pwd()) {
print $pwd."\n";
}
else {
warn 'Impossible de savoir où vous vous trouvez'."\n";
}
}
#cwd
case 'cwd' {
#Saisie de l'argument
print 'cwd > ';
chomp($arg = <STDIN>);
#affichage du contenu
if($ftp->cwd($arg)) {
print 'Déplacement fait avec succès'."\n";
}
else {
warn 'Impossible d\'accéder au dossier '.$arg."\n";
}
}
#get
case 'get' {
#Saisie de l'argument
print 'get > ';
chomp($arg = <STDIN>);
#affichage du contenu
if($ftp->get($arg)) {
print 'Téléchargement terminé avec succès'."\n";
}
else {
warn 'Impossible de télécharger le fichier '.$arg."\n";
}
}
#put
case 'put' {
#Saisie de l'argument
print 'put > ';
chomp($arg = <STDIN>);
#affichage du contenu
if($ftp->put($arg)) {
print 'Chargement terminé avec succès'."\n";
}
else {
warn 'Impossible de charger le fichier '.$arg."\n";
}
}
#qui
case 'quit' {
if($ftp->quit()) {
print 'Deconnexion terminée avec succès'."\n";
}
else {
die 'Deconnexion impossible.'."\n";
}
}
#Autre
else { print 'Commande inconnue...'."\n"; }
}
}while($cmd ne 'quit');
Le script est assez simple et commenté, je ne vais donc pas revenir en détail dessus. Tous les éléments utilisés ont été vu lors des chapitres précédents.
Si vous avez des problèmes, des doutes ou des questions, je vous encourage fortement à les poser sur le forum de ce site !
Comme toujours le programme précédent peut-être amélioré. Voici quelques idées d’améliorations :
get()
et put()
;