Ludovic ROLAND

Blog technique sur mes expériences de développeur.

Intéragir avec un serveur FTP en Perl 5 (5/6) : Transférer les fichiers

12 août 2022

Il est maintenant temps de passer au dernier chapitre avant de nous attaquer au TP. Cette partie est peut-être l’une des plus importante puisque c’est ici que nous allons voir comment transférer des fichiers entre votre ordinateur et le serveur FTP.

Plan

put() : envoyer vos fichiers sur le serveur

Comme indiqué dans le titre, nous allons voir dans cette partie la fonction put() qui permet de transférer un fichier de votre ordinateur vers votre serveur ftp.

Cette fonction est extrêmement simple à utiliser et prend pour premier paramètre le nom du fichier que l’on souhaite transférer. Le deuxième paramètre étant le nom que le souhaite que le fichier ait une fois sur le serveur. Ce second paramètre est cependant facultatif. S’il n’est pas précisé, le fichier gardera son nom d’origine.

Voyons tout de suite un exemple :

$ftp->put('sdz.pl', 'test.pl') or die "Cannot put : ".$ftp->message;

Ici, je tente de transférer le fichier sdz.pl de mon ordinateur vers le serveur ftp. A noter qu’une fois sur le serveur, le fichier devrait alors porter le nom test.pl.

Si le mode Debug est activé, vous devriez alors avoir la trace suivante vous confirmant que le fichier a bien été transférer sous le nom test.pl :

Net::FTP>>> Net::FTP(2.77)
Net::FTP>>>   Exporter(5.64_01)
Net::FTP>>>   Net::Cmd(2.29)
Net::FTP>>>   IO::Socket::INET(1.31)
Net::FTP>>>     IO::Socket(1.31)
Net::FTP>>>       IO::Handle(1.28)
Net::FTP=GLOB(0x8e28b48)<<< 220 FTP Server ready.
Net::FTP=GLOB(0x8e28b48)>>> USER u59973164
Net::FTP=GLOB(0x8e28b48)<<< 331 Password required for u******
Net::FTP=GLOB(0x8e28b48)>>> PASS ....
Net::FTP=GLOB(0x8e28b48)<<< 230 User u****** logged in
Net::FTP=GLOB(0x8e28b48)>>> ALLO 548
Net::FTP=GLOB(0x8e28b48)<<< 200 ALLO command successful
Net::FTP=GLOB(0x8e28b48)>>> PORT 192,168,1,3,178,146
Net::FTP=GLOB(0x8e28b48)<<< 200 PORT command successful
Net::FTP=GLOB(0x8e28b48)>>> STOR test.pl
Net::FTP=GLOB(0x8e28b48)<<< 150 Opening ASCII mode data connection for test.pl
Net::FTP=GLOB(0x8e28b48)<<< 226 Transfer complete
Net::FTP=GLOB(0x8e28b48)>>> QUIT
Net::FTP=GLOB(0x8e28b48)<<< 221 Goodbye

Si jamais vous ne faites pas confiance à ce qui vient de s’afficher, vous pouvez lister la liste des fichiers via la fonction dir()ou ls() comme nous l’avons vu dans un des chapitres précédents.

C’est tout pour la méthode put(). Il est maintenant temps de passer à la suite à savoir la méthode get().

get() : télécharger vos fichiers depuis le serveur

Promis, après cette partie on passe au TP ! ;)

Nous allons maintenant attaquer le dernier chapitre de cette partie via l’étude de la fonction get(). Comme indiqué dans le titre, cette fonction permet de télécharger sur votre ordinateur un fichier se trouvant sur votre serveur FTP.

Tout comme la fonction put(), la fonctionget()est extrêmement simple à utiliser puisqu’elle marche de la même façon. En effet, le premier paramètre est le nom du fichier que l’on souhaite rapatrier, tandis que le deuxième paramètre est le nom que le souhaite que le fichier ait une fois sur l’ordinateur. Comme pour la fonction put(), ce dernier paramètre est facultatif. S’il n’est pas précisé, le fichier gardera son nom d’origine.

Voyons tout de suite un exemple où je tente de télécharger le fichier que nous avons uploader précédement :

$ftp->get('test.pl', 'ftp.pl') or die "Cannot get : ".$ftp->message;

Ici, je tente de récupérer le fichier test.pl du serveur ftp vers mon ordinateur sous le nom de ftp.pl.

Si le mode Debug est activé, vous devriez alors avoir la trace suivante vous confirmant que le fichier a bien été raptrié sous le nom ftp.pl :

Net::FTP>>> Net::FTP(2.77)
Net::FTP>>>   Exporter(5.64_01)
Net::FTP>>>   Net::Cmd(2.29)
Net::FTP>>>   IO::Socket::INET(1.31)
Net::FTP>>>     IO::Socket(1.31)
Net::FTP>>>       IO::Handle(1.28)
Net::FTP=GLOB(0x8aaabd0)<<< 220 FTP Server ready.
Net::FTP=GLOB(0x8aaabd0)>>> USER u******
Net::FTP=GLOB(0x8aaabd0)<<< 331 Password required for u******
Net::FTP=GLOB(0x8aaabd0)>>> PASS ....
Net::FTP=GLOB(0x8aaabd0)<<< 230 User u****** logged in
Net::FTP=GLOB(0x8aaabd0)>>> ALLO 923
Net::FTP=GLOB(0x8aaabd0)<<< 200 ALLO command successful
Net::FTP=GLOB(0x8aaabd0)>>> PORT 192,168,0,7,162,161
Net::FTP=GLOB(0x8aaabd0)<<< 200 PORT command successful
Net::FTP=GLOB(0x8aaabd0)>>> RETR test.pl
Net::FTP=GLOB(0x8aaabd0)<<< 150 Opening ASCII mode data connection for test.pl (923 bytes)
Net::FTP=GLOB(0x8aaabd0)<<< 226 Transfer complete
Net::FTP=GLOB(0x8aaabd0)>>> QUIT
Net::FTP=GLOB(0x8aaabd0)<<< 221 Goodbye.

Voila, vous avez normalement tous les outils afin d’interagir efficacement avec votre serveur FTP. Il est temps de vérifier vos connaissances à l’aide d’un TP ! ;)

Commentaires