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:
- ftp_get pour obtenir un fichier.
- ftp_put pour l'envoyer.
- ftp_chdir, ftp_mkdir permettent de changer de répertoire ou en créer un.
- ftp_size: Pour aussi obtenir la taille d'un fichier.
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.
Démonstrations
- Télécharger par FTP en PHP. Avec un programme d'upload et de download.
Scripts
- PHP FTP Synchronizer. Mise à jour d'un site Web à partir d'un répertoire local.
- FTP Check. Teste la connexion avec un serveur.
- FTP Download. Script complet pour télécharger un fichier.
- Comparaison entre FTP et SFTP. Les caractéristiques des deux protocoles ainsi que SCP.
- Mode actif et mode passif. Comparaison très technique.
- La liste des commandes FTP. Avec un lien sur les commandes du logiciel ftp de Windows.