Scripts FTP

Le protocole FTP a été établi dans le but de faciliter l'échange de données entre ordinateurs. FTP permet d'échanger des données entre deux serveurs, ou un serveur et des clients et presque tous les serveurs supportent ce protocole.
Les outils FTP sont le plus souvent utilisés par les webmaster pour transférer des fichiers sur le serveur, et les internautes pour les télécharger. Des commandes de gestion de répertoire permettent la mise à jour d'un site Web.

FTP et HTTP ont un même modèle

HTTP (HyperText Transfer Protocol) est le protocole de transfert de données sur le Web (World Wide Web), tandis que FTP (File Transfer Protocole) est un protocole d'échange de données entre ordinateurs.
HTTP fonctionne aussi sur le mode client serveur, mais le client s'appelle ici agent utilisateur (user agent) et est un navigateur ou autre outil d'accès au Web, comme Chromeless de Mozilla par exemple qui permet de faire apparaître les applications Web sur le bureau de son ordinateur.
Les connexions sont établies en HTTP comme en FTP par une requête de l'agent utilisateur selon le protocole TCP (Transmission Control Protocol).
HTTP utilise des méthodes propres (GET, POST, HEAD) tandis que FTP utilise des commandes, et le premier a ses codes d'erreur propre comme le code 404 (accès impossible) que les internautes connaissent bien!

Description du modèle d'accès au serveur

FTP propose un ensemble des commandes nécessaires pour le transfert et la gestion des fichiers:
- Télécharger, dans un sens ou dans l'autre.
- Afficher le contenu des répertoires.
- Renommer ou supprimer des fichiers, changer les permissions.

FTP est basé sur le protocole TCP/IP qui est aussi celui d'Internet ou celui des intranets.
Le protocole est indépendant sur système d'exploitation du serveur ou du client.
Il y a une connexion pour les commandes et une autre pour les données.
- Les connexions sont établies dans les deux sens, entre deux ordinateurs qui sont tous deux serveurs ou clients. Mais on peut se connecter comme client seul.
- La connexion de données n'est pas permanente. L'envoi de données est simultané dans les deux sens.
Toute opération débute par une connexion du client, votre ordinateur par exemple, sur le serveur, qui vous demande généralement un login ou un mot de passe.
Mais la connexion anonyme est aussi possible. Ce mode est utilisé par exemple par Sourceforge pour l'envoi de fichiers qui sont placés sur une zone de stockage avec d'être vérifiés et intégrés au site.

La connexion peut opérer en mode actif ou passif. Dans le mode actif, c'est le serveur qui ouvre une connexion sur le client pour envoyer des données (même si c'est le client qui passe les commandes), tandis que dans le mode passif, c'est le client qui commande le transfert.
Le mode actif peut se heurter au firewall (pare-feu) qui protège l'ordinateur contre les intrusions externes, à tort dans le cas présent.

FTP et PHP

Le langage PHP propose une liste de commandes assez complète pour gérer le contenu d'un site par FTP ce qui a permis de réaliser les logiciels présents sur ce site.
Outre les commandes de connexion et déconnexion, les principales fonctions sont:

Certaines fonctions ou paramètres dépendent de la compatibilité avec le serveur et cela rend la réalisation de logiciels universels difficile.

Télécharger par FTP en PHP

L'accès à ftp débute par une connexion au site Web sur le serveur, selon son adresse de la forme: ftp.nomdomaine.tld.

int x = ftp_connect("ftp.scriptol.fr")

Cette fonction demande un petit délai, et retourne un numéro qui sera utilisé pour toutes les fonctions ftp ultérieures.
Ainsi, pour terminer la session on fera:

ftp_close(x)

Une fois connecté, on donne un login et un mot de passe:

boolean res = ftp_login(x, login, motdepasse)

Si l'utilisateur est reconnu, le fonction retourne true (vrai) et l'on peut effectuer les opérations désirées.
Pour l'envoi d'un fichier au serveur:

ftp_put(x, nomfichier, nomlocal, mode)

Pour la récupération d'un fichier sur le serveur:

ftp_get(x, nomfichier, nomlocal, mode)

Le mode est FTP_ASCII pour un fichier de texte et FTP_BINARY pour un fichier binaire, une image par exemple.

Archive du code source en bas de page.

Modes binaire et ASCII

Comme on le voit lorsqu'on utilise les fonctions PHP, le mode de transfert peut être soit textuel, au format ASCII, ou binaire. Dans le premier cas, les fichiers sont enregistrés au format du système d'exploitation cible. On peut ainsi envoyer de son ordinateur sous Windows un fichier texte, il sera stocké au format Unix si le serveur est sous Unix.
Au contraire en mode binaire les fichiers sont stockés tels quels, ce qui convient pour les images.
Si l'on utilise un logiciel FTP, il ne saura pas adapter le mode de transfert à chaque fichier et utilisera pour tous les fichiers le mode binaire, par conséquent le format des textes ne sera pas converti. C'est crucial pour le fichier .htaccess. Utiliser un éditeur qui permet de choisir le format selon le système d'exploitation.

La sécurité requiert un protocole renforcé

Le mode FTP n'est pas sûr car le mot de passe qui n'est pas codé peut être intercepté par des logiciels espions. D'une manière générale, les transferts ne sont pas crypté et peuvent donc être interceptés.
Pour éviter cet inconvénient, le protocole SFTP (SSH File Transfer Protocol), à été mis au point. Il est différent de FTP et nécessite ses outils propres. L'autre protocole sécurisé est FTPS, (FTP over SSL) qui ajoute un cryptage SSL.

Scripts

Démonstrations

Scripts

Documents et références