Tutoriel FTP : interagir avec le serveur

Tutoriel FTP : interagir avec le serveur

Sur certains projets de développement, la nécessité d'interagir avec le serveur avec des commandes FTP requiert d'avoir une bonne connaissance de la documentation PHP pour y parvenir. Et encore, en lisant les demandes sur différents forums, je vois bien que certains ont du mal.

Les commandes FTP de base

Moi-même avant de gérer correctement ces actions, j'ai du lire à plusieurs reprise la documentation PHP. Pour les néophytes (ou pour ceux qui ont besoin d'un rappel sur le sujet), je vous propose un tutoriel avec quelques exemples simples à tester pour que vous compreniez bien le fonctionnement. C'est parti.

Avant toute manipulation sur le serveur FTP, il faut s'y connecter. Créez un fichier (serveur-ftp.php par exemple) pour ouvrir une connexion sur celui-ci :

<?php
// Identifiants de connexion
$ftp_serv = "adresse_ftp_du_serveur";
$ftp_user = "nom_utilisateur";
$ftp_pass = "mot_de_passe";
// Connexion au serveur FTP
$ftp_conn = ftp_connect($ftp_serv);
// Appel des identifiants
$ftp_log = ftp_login($ftp_conn, $ftp_user, $ftp_pass);

Si vos identifiants sont corrects, la connexion au serveur FTP est effective. Pour vous en assurer et avoir un message à l'écran en cas d'échec de la connexion, il faut ajouter les lignes suivantes :

// Vérification de la connexion
if (!$ftp_conn || !$ftp_log) {
    die("Impossible de se connecter au serveur ".$ftp_serv);
}

De même que vous pouvez spécifier quelques paramètres comme le port et le délai de connexion qui est réglé à 90 secondes par défaut. Modifiez comme suit :

// Connexion au serveur FTP
$ftp_conn = ftp_connect($ftp_serv, 21, 120);

La gestion des dossiers

Maintenant que nous sommes connectés au serveur FTP, nous allons pouvoir nous déplacer dans les dossiers et lister leur contenu afin d'effectuer tout un tas d'opérations très utiles. Nous allons partir du principe que le dossier sur lequel nous souhaitons travailler est celui qui contient les images.

Pour ouvrir le dossier contenant les images, il faut procéder comme suit :

// Ouverture d'un dossier
$dossier = ftp_chdir($ftp_conn, "/www/images");

Si vous avez besoin de créer un sous-dossier dans le dossier images, rien de plus simple :

// Création d'un dossier
$creation = ftp_mkdir($ftp_conn, "/www/images/dossier");

Si nécessaire, vous pouvez modifier les droits du dossier nouvellement créé :

// Modification des droits
$droit = ftp_chmod($ftp_conn, 0644, "/www/images/dossier");

Important : ne pas oublier de placer un dossier index.html vide dans le nouveau dossier pour interdire l'accès direct. Pour cela, il suffit de copier celui présent dans le dossier images comme suit :

// Copie d'un fichier
copy("index.html", "dossier/index.html);

De même qu'il est possible de renommer un fichier :

// Renommer un dossier
rename("dossier", "dossiers");

Et pour le supprimer, c'est toujours aussi simple avec la commande adéquate :

// Supprimer un dossier
$sup = ftp_rmdir($ftp_conn, "/www/images/dossier");

La gestion des fichiers

Gérer les fichiers sur le serveur est tout aussi simple. Il y a quelques fonctionnalités supplémentaires qui sont très intéressantes. Nous allons voir tout cela en détail.

Pour commencer, on va uploader un fichier sur le serveur :

$image = $_FILES['file']['name'];
// Uploader un fichier
$upload = ftp_put($ftp_conn, "/www/images/".$image, $image, FTP_ASCII);

Là aussi, il est possible de renommer le fichier ou bien de le supprimer du serveur :

// Renommer un fichier
$nom = ftp_rename($ftp_conn, "/www/images/ancien-nom.jpg", "/www/images/nouveau-nom.jpg");
// Supprimer un fichier
$sup = ftp_delete($ftp_conn, "/www/images/image.jpg");

Dans le cas d'un fichier, il peut être utile d'afficher la taille. A vous de voir comment vous formatez l'affichage en sortie :

// Afficher la taille
$taille = ftp_size($ftp_conn, "/www/images/image.jpg");
echo $taille;

Lister les fichiers dans un dossier

Vous savez à présent manipuler les dossiers et les fichiers sur votre serveur FTP. À présent, nous allons voir comment créer une liste des fichiers présents dans un dossier. Voici un exemple de mise en forme basique à l'aide d'une table de l'ensemble des fichiers présents dans un dossier.

Liste des fichiers FTP

Pour arriver à ce résultat, il est nécessaire de lister les fichiers d'un dossier :

// Liste des fichiers d'un dossier
$liste = ftp_rawlist($ftp_conn, "/www/images");

Grâce à cela, vous allez récupérer les informations comprenant 9 données par fichier. Elles vous serviront pour le traitement et l'affichage de votre liste :

  • Donnée 0 = chmod
  • Donnée 1 = numéro
  • Donnée 2 = propriétaire
  • Donnée 3 = groupe
  • Donnée 4 = taille
  • Donnée 5 = mois
  • Donnée 6 = jour
  • Donnée 7 = heure
  • Donnée 8 = nom

Nous allons créer une petite galerie d'images en nous servant de la donnée 8 pour récupérer le nom de l'image :

// Affichage des fichiers
foreach ($liste as $fichier) {
    $fic = preg_split("/ +/", $fichier, 9);
    $nom_image = $fic[8];
    // Vérification de l'extension pour n'afficher que les images
    $ext_image = explode(".", $nom_image);
    if ($ext_image[1] == "gif" || $ext_image[1] == jpg || $ext_image == "png") {
        echo "<ul>";
        echo "    <li><img src="http://www.site.com/images/".$nom_image."" alt="".$ext_image[0]."" />
        echo "</ul>";
    }
}

Avec un peu d'imagination (et de travail), vous pouvez obtenir une jolie mise en forme : Interroger la base de données pour savoir si l'image est utilisé dans un texte pour empêcher la suppression, créer des thumbs à la volée, etc.

Liste formatée des fichiers FTP

Le fonctionnement est identique avec les fichiers tels que des PDF ou des documents Office comme le montre l'image ci-dessous. Pour le visuel, j'affiche une image différente selon l'extension du fichier.

Liste des fichiers FTP

N'oubliez pas de fermer la connexion au FTP à la fin de votre fichier comme ceci :

// Fermeture de la connexion
ftp_close($ftp_conn);
?>

J'image que votre créativité vous permettra de créer des petits modules sympas pour vos scripts persos. Bon courage. ;)

Catégorie Tutoriels - Écrit par le 08/05/2014 - Article lu 1 458 fois - 0 commentaire

Les commentaires de ce billet sont fermés

Haut de page