Blog technique sur mes expériences de développeur.
11 août 2022
Au cours de ce chapitre, nous allons voir comment sont organisés les fichiers et les dossiers sur un serveur FTP, avant de nous intéresser à différentes commandes qui nous permettront de :
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.
pwd()
: savoir où l’on estLorsqu’on est sur un serveur FTP, il est parfois nécessaire de connaître l’endroit où l’on se trouve par rapport à la racine.
Pour cela, nous allons utiliser la méthode pwd()
de l’objet Net::FTP. Cette méthode retourne alors le chemin complet du dossier courant.
Pour information, pwd est l’acronyme de Present Working Directory.
Voyons tout de suite un exemple :
print $ftp->pwd();
Vous venez de vous connecter et que vous vous n’êtes pas déplacé sur le serveur, vous devriez avoir ceci qui s’affiche à l’écran :
/
Le /
signifie que vous êtes à la racine du serveur FTP. Pour les utilisateurs de Linux, vous n’aurez certainement pas de mal à comprendre. Pour les utilisateurs de Windows, c’est comme si vous étiez à l’emplacement C:
.
Si par exemple vous vous étiez déplacés dans le serveur, voici une exemple d’affichage que vous auriez pu avoir :
/img/all
Dans cet exemple, nous somme dans le répertoire all
qui est lui même un répertoire de img
se trouvant à la racine.
J’espère avoir été assez clair !
Il n’y a rien de plus à connaitre sur cette commande. Nous allons donc pouvoir passer à la suite.
ls()
et dir()
: lister les fichiers et dossiersLorsque l’on est sur un serveur FTP, il peut parfois être utile de connaître la liste des répertoires et des fichiers du dossier courant, où de n’importe quel dossier.
ls()
: lister au format courtCette méthode prend pour paramètre le chemin (relatif ou absolu) du dossier dont on souhaite lister le contenu. A noter que sans paramètre, cette fonction liste le contenu du répertoire courant.
Cette fonction retourne alors une référence vers un tableau dont chaque ligne représente un dossier ou un fichier du répertoire sur lequel on a exécuté la commande.
Voyons tout de suite un exemple :
my $ls = $ftp->ls()
or warn $ftp->message;
print 'Il y a '.@$ls.' élément(s) dans le dossier.'."\n";
foreach my $elt (@$ls) {
print $elt."\n";
}
Il y a 28 élément(s) dans le dossier.
.
..
logs
lightbox.css
style.css
style_admin.css
admin_connexion.php
admin_deconnexion.php
admin_index.php
captcha.php
contact.php
index.php
ks.php
monofont.ttf
controleur
img
js
modele
vue
.htaccess
design_sjuk
liens.php
admin_autres.php
autres.php
facebook
tc.php
admin_tc.php
design_sjuk_v3.0
Une fois de plus, les utilisateurs de Linux ne seront pas perturbés. Pour les utilisateurs de Windows, j’aimerais revenir sur les dossier .
et ..
.
Le dossier .
représente en fait le dossier actuel, alors que le dossier ..
représente le dossier parent au dossier .
.
A noter que les mots clef or warn
permettent de gérer les éventuelles exceptions sans quitter le programme. En effet, si ici l’utilisateur souhaite lister le contenu d’un répertoire qui n’existe pas, ce n’est pas une erreur critique, le programme peut continuer à fonctionner. Cependant, il conviendra de prévenir l’utilisateur de sa mauvaise manipulation.
Voyons maintenant un autre exemple où l’on passe une paramètre à notre fonction :
my $ls = $ftp->ls('/img/all')
or warn $ftp->message;
print 'Il y a '.@$ls.' élément(s) dans le dossier.'."\n";
foreach my $elt (@$ls) {
print $elt."\n";
}
Voici alors ce que j’obtiens :
Il y a 13 élément(s) dans le dossier.
/img/all/.
/img/all/..
/img/all/ajouter.png
/img/all/bg_body.jpg
/img/all/bg_corps.jpg
/img/all/bg_menu.jpg
/img/all/bg_menu_hover.jpg
/img/all/editer.png
/img/all/header.jpg
/img/all/header_admin.jpg
/img/all/recherche.png
/img/all/supprimer.png
/img/all/Thumbs.db
dir()
: lister au format longCette méthode prend pour paramètre le chemin (relatif ou absolu) du dossier dont on souhaite lister le contenu. A noter que sans paramètre, cette fonction liste le contenu du répertoire courant.
Cette fonction retourne alors une référence vers un tableau dont chaque ligne représente un dossier ou un fichier du répertoire sur lequel on a exécuté la commande.
Contrairement à la fonction ls()
qui ne donne que le nom des éléments, la fonction dir()
nous renvoie un nombre important d’informations.
Voyons tout de suite un exemple :
my $dir = $ftp->dir()
or warn $ftp->message;
print 'Il y a '.@$dir.' élément(s) dans le dossier.'."\n";
foreach my $elt (@$dir) {
print $elt."\n";
}
Il y a 28 élément(s) dans le dossier.
drwx---r-t 11 u**** ftpusers 4096 Feb 6 17:08 .
drwx---r-t 11 u**** ftpusers 4096 Feb 6 17:08 ..
-rw-r--r-- 1 u**** ftpusers 24 Sep 5 22:15 .htaccess
-rw-r--r-- 1 u**** ftpusers 3194 Nov 6 12:08 admin_autres.php
-rw-r--r-- 1 u**** ftpusers 122 Sep 5 21:03 admin_connexion.php
-rw-r--r-- 1 u**** ftpusers 124 Sep 5 21:03 admin_deconnexion.php
-rw-r--r-- 1 u**** ftpusers 241 Sep 5 21:03 admin_index.php
-rw-r--r-- 1 u**** ftpusers 714 Sep 18 18:06 admin_tc.php
-rw-r--r-- 1 u**** ftpusers 1049 Nov 6 12:08 autres.php
-rw-r--r-- 1 u**** ftpusers 2979 Sep 5 21:03 captcha.php
-rw-r--r-- 1 u**** ftpusers 226 Sep 5 21:03 contact.php
drwxr-xr-x 4 u**** ftpusers 31 Sep 5 21:03 controleur
drwxr-xr-x 2 u**** ftpusers 4096 Feb 6 17:09 design_sjuk
drwxr-xr-x 2 u**** ftpusers 4096 Jan 16 16:11 design_sjuk_v3.0
drwxr-xr-x 3 u**** ftpusers 51 Sep 13 22:31 facebook
drwxr-xr-x 13 u**** ftpusers 139 Nov 6 12:06 img
-rw-r--r-- 1 u**** ftpusers 106 Sep 5 21:03 index.php
drwxr-xr-x 8 u**** ftpusers 79 Oct 14 21:00 js
-rw-r--r-- 1 u**** ftpusers 169 Sep 5 21:03 ks.php
-rw-r--r-- 1 u**** ftpusers 105 Sep 11 12:17 liens.php
-rw-r--r-- 1 u**** ftpusers 1654 Sep 5 21:03 lightbox.css
drwxr-xr-x 3 u**** root 4096 Feb 7 13:32 logs
drwxr-xr-x 4 u**** ftpusers 57 Sep 5 21:11 modele
-rw-r--r-- 1 u**** ftpusers 15560 Sep 5 21:03 monofont.ttf
-rw-r--r-- 1 u**** ftpusers 3396 Sep 5 21:03 style.css
-rw-r--r-- 1 u**** ftpusers 3322 Sep 5 21:03 style_admin.css
-rw-r--r-- 1 u**** ftpusers 426 Sep 18 18:02 tc.php
drwxr-xr-x 4 u**** ftpusers 31 Sep 5 21:11 vue
Une fois de plus, les utilisateurs de Linux ne seront pas perturbés par toute ces informations. Pour les autres, voici quelques explications.
Considérons les lignes suivantes :
Le champs 1 représente les droits d’accès du fichier ainsi que son type (fichier, dossier, lien)
Je ne souhaite pas faire double emploi avec le tutoriel de M@teo21. C’est pourquoi je vous invite à lire cette partie de son tutoriel sur Linux afin d’en savoir plus sur le fonctionnement des droits.
Dans le cas d’un fichier, ce nombre sera toujours à 1.
Dans le cas d’un dossier, il s’agit en fait du nombre de fichiers et dossiers qu’il contient.
Ce champs nous permet de connaître l’utilisateur qui est le propriétaire du fichier.
Ce champs nous permet de connaître groupe qui propriétaire du fichier.
Ce champs nous permet de connaître la taille du fichier en octet.
Ce champs nous permet de connaître la date ainsi que l’heure de dernière modification du fichier.
Finalement, ce dernier champs nous permet de connaître le nom du fichier.
Voyons maintenant un autre exemple où l’on passe une paramètre à notre fonction :
my $dir = $ftp->dir('/img/all')
or warn $ftp->message;
print 'Il y a '.@$dir.' élément(s) dans le dossier.'."\n";
foreach my $elt (@$dir) {
print $elt."\n";
}
Voici alors ce que j’obtiens :
Il y a 13 élément(s) dans le dossier.
drwxr-xr-x 2 u**** ftpusers 4096 Sep 5 21:03 .
drwxr-xr-x 13 u**** ftpusers 139 Nov 6 12:06 ..
-rw-r--r-- 1 u**** ftpusers 22016 Sep 5 21:03 Thumbs.db
-rw-r--r-- 1 u**** ftpusers 4033 Sep 5 21:03 ajouter.png
-rw-r--r-- 1 u**** ftpusers 1912 Sep 5 21:03 bg_body.jpg
-rw-r--r-- 1 u**** ftpusers 1544 Sep 5 21:03 bg_corps.jpg
-rw-r--r-- 1 u**** ftpusers 1538 Sep 5 21:03 bg_menu.jpg
-rw-r--r-- 1 u**** ftpusers 1543 Sep 5 21:03 bg_menu_hover.jpg
-rw-r--r-- 1 u**** ftpusers 10414 Sep 5 21:03 editer.png
-rw-r--r-- 1 u**** ftpusers 34404 Sep 5 21:03 header.jpg
-rw-r--r-- 1 u**** ftpusers 84565 Sep 5 21:03 header_admin.jpg
-rw-r--r-- 1 u**** ftpusers 9078 Sep 5 21:03 recherche.png
-rw-r--r-- 1 u**** ftpusers 8202 Sep 5 21:03 supprimer.png
cwd()
et cdup()
: changer de dossierBien évidemment, lorsque l’on est sur un serveur FTP, il peut-être utile de se déplacer, de changer de dossier. C’est ce que nous allons voir au cours de cette dernière partie.
cwd()
: changer de dossierCette méthode prend pour paramètre le chemin (relatif ou absolu) du dossier auquel on souhaite accéder. A noter que sans paramètre, cette fonction nous déplace à la racine de notre serveur FTP.
Voyons tout de suite un exemple :
#On se déplace dans le dossier /img/all/
print 'cwd(\'/img/all/\') --> ';
$ftp->cwd('/img/all/')
or die "Cannot go : ".$ftp->message;
print $ftp->pwd()."\n";
#On retourne à la racine
print 'cwd() --> ';
$ftp->cwd()
or die "Cannot go : ".$ftp->message;
print $ftp->pwd()."\n";
Vous devriez alors avoir à l’écran :
cwd('/img/all/') --> /img/all
cwd() --> /
cdup()
: Aller au dossier parentCette méthode qui s’utilise sans paramètres, permet de retourner au dossier parent du dossier dans lequel on se trouve actuellement.
Si je reprends l’exemple que j’ai utilisé précédemment, le dossier parent de /img/all/
est /img
. Et le dossier parent de /img
est la racine, à savoir /
.
Voyons immédiatement un exemple :
#On se place dans /img/all/
print 'cwd(\'/img/all/\') --> ';
$ftp->cwd('/img/all/')
or die "Cannot go : ".$ftp->message;
print $ftp->pwd()."\n";
#On se place dans le dossier parent /img/
print 'cdup() --> ';
$ftp->cdup()
or die "Cannot go : ".$ftp->message;
print $ftp->pwd()."\n";
Vous devriez alors voir s’afficher ceci sur votre écran :
cwd('/img/all/') --> /img/all
cdup() --> /img
A noter que pour les habitués des systèmes Unix, la méthode cdup()
est équivalente à la méthode cwd('..')
.
Maintenant que nous savons nous repérer sur un serveur FTP, nous allons aborder les fonctions qui vont nous permettre de manipuler les fichiers présents sur notre serveur.