Ludovic ROLAND

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

Intéragir avec un serveur FTP en Perl 5 (4/6) : Manipuler les fichiers et les dossiers

12 août 2022

Au cours du chapitre précédent, nous avons vu différentes méthodes nous permettant de nous repérer et de nous déplacer sur notre serveur FTP.

Il est maintenant temps de voir quelques méthodes qui vont nous permettre de manipuler des fichiers présents sur notre serveur.

Plan

stor() et mkdir() : créer des fichiers et des dossiers

Maintenant que nous savons naviguer dans l’arborescence de notre serveur FTP, il peut être intéressant de la modifier. Cette modification peut se faire en créant des fichiers et des dossier. C’est justement ce que nous allons voir au cours de cette partie !

stor() : créer un nouveau fichier

Il n’y a pas grand chose à dire sur cette fonction si ce n’est qu’elle prend pour paramètre le nom du fichier que vous voulez créer sur votre serveur FTP.

Voyons tout de suite un exemple :

$ftp->stor('test.txt') or warn $ftp->message;

Si vous exécutez le script, rien ne devrait s’afficher à l’écran. Cependant, si vous mettez le mode debug, vous devriez avoir l’enchainement suivant, preuve que la commande est bien appelée :

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(0x985cafc)<<< 220 FTP Server ready.
Net::FTP=GLOB(0x985cafc)>>> USER u****
Net::FTP=GLOB(0x985cafc)<<< 331 Password required for u****
Net::FTP=GLOB(0x985cafc)>>> PASS ....
Net::FTP=GLOB(0x985cafc)<<< 230 User u**** logged in
Net::FTP=GLOB(0x985cafc)>>> STOR test.txt
Net::FTP=GLOB(0x985cafc)<<< 150 Opening ASCII mode data connection for test.txt
Net::FTP=GLOB(0x985cafc)>>> QUIT
Net::FTP=GLOB(0x985cafc)<<< 221 Goodbye.

Vous pouvez également vérifier l’existence de votre fichier soit en passant par un client FTP comme FileZilla ou en listant la liste des fichiers comme nous l’avons vu dans le chapitre précédent.

mkdir() : créer un nouveau dossier

Cette fonction marche exactement de la même façon que la fonctionstor(). Elle prend donc pour paramètre le nom du dossier que vous voulez créer sur votre serveur FTP.

Voyons tout de suite un exemple :

$ftp->mkdir('test') or warn $ftp->message;

Encore une fois, si vous exécutez le script, rien ne devrait s’afficher à l’écran. Cependant, si vous mettez le mode debug, vous devriez alors avoir l’enchainement suivant, preuve que la commande est bien appelée :

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(0x9909af4)<<< 220 FTP Server ready.
Net::FTP=GLOB(0x9909af4)>>> USER u****
Net::FTP=GLOB(0x9909af4)<<< 331 Password required for u****
Net::FTP=GLOB(0x9909af4)>>> PASS ....
Net::FTP=GLOB(0x9909af4)<<< 230 User u**** logged in
Net::FTP=GLOB(0x9909af4)>>> MKD test
Net::FTP=GLOB(0x9909af4)<<< 257 "/img/all/test" - Directory successfully created
Net::FTP=GLOB(0x9909af4)>>> QUIT
Net::FTP=GLOB(0x9909af4)<<< 221 Goodbye.

Une nouvelle fois, vous pouvez vérifier l’existence de votre fichier soit en passant par un client FTP comme FileZilla ou en listant la liste des fichiers comme nous l’avons vu dans le chapitre précédent.

rename() : renommer un fichier ou un dossier

On continue notre tour des fonctions qui permettent de manipuler les fichiers de notre serveur FTP.

Comme son nom l’indique, la fonction rename() permet de renommer un fichier ou un dossier présent sur le serveur.

Cette fonction prend deux paramètres. Le premier est le nom actuel du fichier ou du dossier, tandis que le second paramètre est le nouveau nom que l’on souhaite donner.

Encore une fois, il n’y a rien de compliqué dans l’utilisation de cette fonction, c’est pourquoi nous allons voir immédiatement un exemple :

$ftp->rename('test', 'test2') or warn $ftp->message;

Ici, je renomme le dossier test en test2.

Une nouvelle fois, il faudra activer le mode debug afin d’avoir une preuve du bon fonctionnement de notre script. Vous devriez alors avoir le texte suivant à l’écran :

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(0xa2f8b10)<<< 220 FTP Server ready.
Net::FTP=GLOB(0xa2f8b10)>>> USER u****
Net::FTP=GLOB(0xa2f8b10)<<< 331 Password required for u****
Net::FTP=GLOB(0xa2f8b10)>>> PASS ....
Net::FTP=GLOB(0xa2f8b10)<<< 230 User u**** logged in
Net::FTP=GLOB(0xa2f8b10)>>> RNFR test
Net::FTP=GLOB(0xa2f8b10)<<< 350 File or directory exists, ready for destination name
Net::FTP=GLOB(0xa2f8b10)>>> RNTO test2
Net::FTP=GLOB(0xa2f8b10)<<< 250 Rename successful
Net::FTP=GLOB(0xa2f8b10)>>> QUIT
Net::FTP=GLOB(0xa2f8b10)<<< 221 Goodbye

delete() et rmdir() : supprimer des fichiers et des dossiers

Il est maintenant temps de passer à la dernière partie de ce chapitre ! Cette partie va nous permettre de supprimer les fichiers et dossiers de test que nous avons créer au cours de la première partie de ce chapitre.

delete() : supprimer un fichier

La fonction delete() permet de supprimer un fichier présent sur le serveur FTP. Tout comme c’était le cas pour la création, cette méthode prend comme paramètre le nom du fichier à supprimer.

Voyons tout de suite un exemple où nous supprimons le fichier test.txt créé précédemment :

$ftp->delete('test.txt') or warn $ftp->message;

Une nouvelle fois, il faudra activer le mode debug pour vérifier le bon fonctionnement de la commande :

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(0x910dafc)<<< 220 FTP Server ready.
Net::FTP=GLOB(0x910dafc)>>> USER u****
Net::FTP=GLOB(0x910dafc)<<< 331 Password required for u****
Net::FTP=GLOB(0x910dafc)>>> PASS ....
Net::FTP=GLOB(0x910dafc)<<< 230 User u**** logged in
Net::FTP=GLOB(0x910dafc)>>> DELE test.txt
Net::FTP=GLOB(0x910dafc)<<< 250 DELE command successful
Net::FTP=GLOB(0x910dafc)>>> QUIT
Net::FTP=GLOB(0x910dafc)<<< 221 Goodbye.

rmdir() : supprimer un dossier

Pour conclure ce chapitre, nous allons jeter un coup d’œil à la fonction rmdir(). Cette fonction permet de supprimer un dossier présent sur le serveur FTP. Une nouvelle fois, cette fonction prend comme paramètre le nom du dossier à supprimer.

Voyons tout de suite un exemple. Ici, nous supprimons le dossier test2 créé puis renommé précédemment :

$ftp->rmdir('test') or warn $ftp->message;

Encore une fois, nous pouvons nous tourner vers l’affichage du mode debug pour vérifier le bon fonctionnement de notre méthode :

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(0x910dafc)<<< 220 FTP Server ready.
Net::FTP=GLOB(0x910dafc)>>> USER u****
Net::FTP=GLOB(0x910dafc)<<< 331 Password required for u****
Net::FTP=GLOB(0x910dafc)>>> PASS ....
Net::FTP=GLOB(0x910dafc)<<< 230 User u**** logged in
Net::FTP=GLOB(0x910dafc)>>> RMD test2
Net::FTP=GLOB(0x910dafc)<<< 250 RMD command successful
Net::FTP=GLOB(0x910dafc)>>> QUIT
Net::FTP=GLOB(0x910dafc)<<< 221 Goodbye.

Maintenant que vous êtes familiers avec votre serveur FTP, il est grand temps de voir comment transférer des fichiers depuis votre ordinateur vers votre serveur, puis du serveur vers votre machine.

Commentaires