Interagir avec le serveur FTP

Formation

En Ligne

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En ligne

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Les matières

  • FTP

Le programme

Introduction du cours

Bonjour à tous. :)

Dans ce cours, vous allez apprendre à utiliser les fonctions FTP afin d'interagir avec un serveur FTP. Vous pourrez vous y connecter, envoyer des données (Upload) et en recevoir (Download), créer des dossiers, en supprimer et bien d'autres choses encore.

Que signifie « FTP » ?
À quoi ça sert ?

« FTP » signifie File Transfer Protocol (protocole de transfert de fichiers). Il sert à faire transiter des fichiers entre un serveur et un client. C'est un protocole (parmi tant d'autres) très utilisé qui est, en général, associé à un port : le port 21. Ça vous rappelle quelque chose, hein ? :p
En effet, lorsque vous utilisez votre client FTP, il y a en général un champ « Port » où vous entrez « 21 » la plupart du temps. Il s'agit du port auquel le protocole FTP va se connecter.
Il n'est donc pas utilisable seulement avec des logiciels. PHP propose notamment de puissants outils afin d'utiliser le protocole FTP en toute simplicité.

Prêts ? C'est parti. :)

Ouvrir et fermer la connexion

Pour commencer, il vous faut ouvrir une connexion avec votre serveur FTP. La fonction ftp_connect retourne une ressource FTP qui vous servira pour le maniement de vos fichiers. Elle s'utilise ainsi :

<?php $ftp = ftp_connect("hôte", "port"); ?> Un petit point sur le port

Si vous n'avez jamais compris ce qu'était le port, alors il est grand temps de faire un petit speech à ce sujet.
Lorsque l'on communique sur le réseau par le biais d'un protocole, l'ordinateur laisse plusieurs « passages » par lesquels un client et un serveur peuvent communiquer : c'est ce que l'on appelle les ports. Grosso modo, en vous connectant à un port, vous assurez un autre moyen de communication avec le serveur.
Un ordinateur laisse 65535 ports, dont les 1024 premiers sont souvent utilisés par les programmes « par défaut » ou « communs ». Par exemple, lorsque vous utilisez votre navigateur web, vous vous connectez au port 80 du serveur web afin d'afficher votre page web. Eh bien c'est pareil pour le FTP !
Bref, étant donné que la plupart des serveurs FTP écoutent le port 21, on n'a qu'à emprunter ce chemin. :)

Après ce résumé sur les ports, revenons à nos moutons.
Si je veux me connecter à un serveur FTP situé chez Free, étant donné que leur domaine FTP est ftpperso.free.fr, le code sera le suivant :

<?php $ftp = ftp_connect("ftpperso.free.fr", 21); ?>

Vous pouvez également utiliser or exit() juste après l'utilisation de cette fonction :

<?php $ftp = ftp_connect("ftpperso.free.fr", 21) or exit('Erreur : connexion au serveur FTP impossible.'); ?>

Vous pouvez omettre le second paramètre (qui est le port), mais par habitude et pour plus de lisibilité, je le renseigne.
Cette fonction retourne false si la connexion n'a pas été possible, mais une erreur est quand même écrite dans ce cas.

Ouvrir une connexion SSL

Hein ? Qu'est-ce que SSL ?

Citation : Securité Info

SSL (Secure Socket Layer) est un protocole de sécurisation des échanges, développé par Netscape. Il a été conçu pour assurer la sécurité des transactions sur Internet (notamment entre un client et un serveur) et il est intégré depuis 1994 dans les navigateurs.

Cela signifie donc qu'il permet de sécuriser les échanges entre le client et le serveur.
Seulement, lorsque l'on utilise une connexion SSL, on ne parle plus proprement de FTP mais de FTPS : File Transfer Protocol over SSL (tout est dit). Certes les manipulations restent les mêmes, mais il est bon de savoir dans quoi on marche. :)

Bref, pour se connecter, rien de plus simple, il suffit de procéder de la même manière que pour ftp_connect , seul le nom de la fonction est différente :

<?php $ftp = ftp_ssl_connect("hôte", "port"); ?>

Il n'y a rien d'autre à faire, tous les traitements se font automatiquement. :)

Voilà, vous avez ouvert une connexion entre le serveur HTTP et le serveur FTP. En effet, vous ne vous connectez pas au serveur FTP mais vous demandez au serveur HTTP de le faire (d'ailleurs, il peut se connecter à plusieurs serveurs). Schématiquement, une utilisation des fonctions FTP sur une page web donnerait :
Utilisateur ? Connexion au serveur HTTP (exécution de la page) ? Demande de connexion au serveur FTP ? Interaction avec le serveur FTP ? Déconnexion du serveur FTP.

S'identifier

Maintenant que vous êtes connecté au serveur, il faut vous connecter à un compte FTP. En effet, lorsque, par exemple, vous utilisez un client FTP (comme FileZilla), vous entrez également un identifiant et un mot de passe. Pour cela, il faut utiliser la fonction ftp_login qui prend trois paramètres :

  • la ressource FTP ;

  • l'identifiant ;

  • le mot de passe.

<?php ftp_login($ftp, "login", "password"); ?>

La fonction renvoie true si la connexion a réussi, false en cas d'échec.

Il faut obligatoirement être identifié pour pouvoir interagir avec le serveur FTP, certains utilisateurs ayant des droits plus restreints que d'autres.

Fermer la connexion

Une fois vos manipulations finies, vous pouvez fermer votre connexion avec la fonction ftp_close , qui prend en paramètre la ressource FTP utilisée lors de la connexion.

<?php ftp_close($ftp); ?>

Justement, et si on commençait à le manipuler, ce serveur FTP ?

Lister, télécharger et envoyer des fichiers

Nous allons voir trois fonctions de base mais qui vous seront très utiles (voire indispensables) si vous voulez créer un WebFTP (comme chez les hébergeurs).

Lister les fichiers sur le serveur

Vous pouvez lister les fichiers (et dossiers) d'un dossier en utilisant la fonction ftp_nlist qui prend en paramètres la ressource FTP et le dossier dont il faut lister les fichiers.

<?php $fichiers = ftp_nlist($ftp, "."); // Le point signifie le dossier actuel ?>

Il retourne un tableau avec le nom de tous les fichiers. Voici donc un exemple de code complet pour lister les fichiers sur votre serveur FTP :

<?php if(($ftp = ftp_connect("ftpperso.free.fr", 21)) == false) { echo 'Erreur de connexion...'; } if(!ftp_login($ftp, "login", "password")) { echo 'L\'identification a échoué...'; } $liste_fichiers = ftp_nlist($ftp, '.'); foreach($liste_fichiers as $fichier) { echo $fichier. '<br/>'; } ?> Un petit problème d'envergure

Il arrive parfois que votre connexion sur le serveur FTP passe par un Firewall ou un NAT (chez le client, soit vous, évidemment). Dans ce cas, il faut activer le mode passif, car sinon vous aurez des problèmes lors de vos manipulations avec le serveur FTP (par exemple, pour la fonction ftp_nlist , puisqu'on est en plein dedans).

Pour activer le mode passif, il suffit simplement d'utiliser la fonction ftp_pasv . Elle retourne « true » si le changement de mode a bien été effectué.

<?php if(ftp_pasv($ftp, true)) // La valeur « true » signifie qu'on l'active, false qu'on le désactive { // Alors on peut commencer nos traitements } else { // Dans ce cas, pour une raison ou une autre, le changement de mode a échoué. } ?>

Prenez toujours le soin de passer en mode passif lorsque votre code est bon, mais que vous n'arrivez tout de même pas à interagir avec votre serveur FTP. Ça peut être très rageant de planter sur un bout de code toute une après-midi alors que l'erreur vient simplement du réseau lui-même.

Télécharger un fichier

Ah, enfin ! Comment faire pour télécharger un fichier ? Il faut utiliser la fonction ftp_get .

<?php ftp_get($ftp, "dossier où envoyer", "fichier à télécharger", "mode"); ?>

Expliquons tout ça :

  • le premier paramètre est la ressource FTP créée plus tôt ;

  • le second est le dossier où le fichier sera envoyé sur l'ordinateur du client ;

  • le troisième paramètre prend le nom du fichier à télécharger sur le serveur ;

  • le dernier paramètre est le mode de téléchargement : binaire ou ASCII. Il faut mettre « FTP_BINARY » ou « FTP_ASCII ». En général, on met « FTP_BINARY ».

Voici un exemple où les fonctions FTP deviennent réellement utiles :

<?php $ftp = ftp_connect("ftpperso.free.fr", 21); ftp_login($ftp, "blackis", "*****"); $liste_fichiers = ftp_nlist($ftp, '.'); foreach($liste_fichiers as $fichier) { echo '<a href="?filename=' .$fichier. '">' .$fichier. '</a><br/>'; } if(isset($_GET['filename'])) { $nom_fichier = $_GET['filename']; ftp_get($ftp, "C:/", $nom_fichier, FTP_BINARY); } ?>

C'est simple. Ce code liste les fichiers existant sur la racine avec ftp_nlist , et lors du clic, on télécharge ledit fichier dans le dossier lien local avec ftp_get .

Envoyer un fichier

La méthode ftp_put permet d'envoyer un fichier sur le serveur, et s'utilise de cette manière :

<?php ftp_put($ftp, "dossier où le fichier sera envoyé (serveur)", "Fichier local", type); ?>

Ici aussi, type est soit « FTP_ASCII », soit « FTP_BINARY », et on utilise généralement « FTP_BINARY ». La fonction renverra true si le fichier a bien été envoyé ou false dans le cas contraire.

Ainsi, si l'on fait :

<?php ftp_put($ftp, "images/superimage2.jpg", "C:/superimage.jpg", FTP_BINARY); ?>

Le fichier superimage.jpg sera envoyé dans le dossier images du serveur (en partant de la racine), sous le nom superimage2.jpg. (En effet, il faut également renseigner le nom que portera le fichier envoyé sur le serveur FTP, c'est donc tout bénef).

Quelques fonctionnalités intéressantesCréer un dossier : ftp_mkdir

Cette fonction est très connue dans la plupart des langages. Elle permet de créer un dossier (mk : make et dir : directory, soit « créer un dossier ») sur le serveur.
Elle s'utilise ainsi :

<?php $mon_dossier = ftp_mkdir($ftp, "superdossier"); ?>

Ainsi, ce code créera un dossier à la racine (on n'a pas précisé de dossier parent) portant le nom « superdossier ».
Par ailleurs, cette fonction retourne le nom du dossier créé ou false en cas d'échec.
Si l'on veut créer un dossier dans un autre dossier :

<?php $mon_dossier = ftp_mkdir($ftp, "site/image/design/superdossier"); ?>

Et voilà, le dossier superdossier a été créé à l'emplacement site/image/design.

Supprimer un dossier : ftp_rmdir

Également connue, la fonction ftp_rmdir (remove directory, soit « supprimer un dossier ») supprime un dossier sur le serveur FTP.
Elle prend comme paramètres la ressource FTP et le nom du dossier à supprimer, et retourne true si le dossier a bien été supprimé (false en cas d'échec).

<?php if(ftp_rmdir($ftp, "superdossier")) { echo 'Le dossier "superdossier" a bien été supprimé !'; } else { echo 'Suppression du dossier "superdossier" impossible.'; } ?> Se déplacer à travers les dossiers : ftp_chdir

La fonction ftp_chdir (soit change directory : « changer de dossier ») vous déplace dans un autre dossier. Elle prend en paramètres la ressource FTP et le dossier dans lequel on souhaite aller, et retourne true si l'on a bien pu se déplacer, false dans le cas contraire.

<?php if(ftp_chdir($ftp, "site")) { echo 'Déplacement dans le dossier "site" réussi !'; } else { echo 'Déplacement dans le dossier "site" <b>échoué</b> !'; } ?> Situer où l'on est : ftp_pwd

La fonction ftp_pwd (pwd : print working directory, soit « afficher le dossier dans lequel on travaille ») retourne (et n'affiche pas comme on pourrait le croire) le nom du dossier dans lequel on se situe. Elle prend en paramètre la ressource FTP seulement. En cas d'erreur, elle retourne false.

<?php $pwd = ftp_pwd($ftp); if(!$pwd) { echo 'Erreur !'; } else echo 'Dossier actuel : ' .$pwd. '.'; ?> Exécuter une commande FTP : ftp_exec

La fonction ftp_exec exécute ( :p ) la commande envoyée en second paramètre (le premier étant toujours la ressource FTP) et renvoie true (ainsi que la réponse 200 pour dire que tout a bien été fait correctement dans le meilleur des mondes) si la commande a réussi, false dans le cas contraire.

<?php if(ftp_exec($ftp, "rmdir superdossier")) { echo 'La commande a réussi !'; } else { echo 'La commande a échoué !'; } ?>

Voici une page qui liste toutes les actions FTP possibles. C'est plus poussé que les fonctions mais un petit peu plus compliqué. :-°

Modifier les droits : ftp_chmod

Qu'est-ce que le chmod ?

Chmod signifie change mode et sert à modifier les droits d'un fichier. En effet, chaque fichier transitant sur le web a trois droits différents :

  • les droits du propriétaire du fichier ;

  • les droits du groupe auquel le fichier appartient ;

  • les droits des autres utilisateurs.

En général, le propriétaire du fichier et le groupe auquel appartient le fichier ont tous les droits, du fait qu'ils sont censés faire « partie de l'administration...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Interagir avec le serveur FTP

Prix sur demande