Gestionnaire de fichiers en PHP

Bonjour à tous, dans un précédent article, je vous ai appris à uploader des fichiers dans un dossier.
Maintenant, il serait bon de pouvoir voir les fichiers contenus dans le dossier en question et éventuellement de pouvoir les supprimer !

Commentez Donner une note à l'article (0)

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

1. Préface

Bonjour à vous ! Ici je vous propose un modeste cour qui a pour but de vous apprendre à créer un mini gestionnaire de fichiers pour par exemple le dossier d'upload de votre site.
Attention ! Rien de bien compliqué là dedans...
Celui-ci vous permettra de générer la liste des fichiers du dossier et de les supprimer si nécessaire (on ne sait jamais ).
Bonne lecture et bon courage !

2. Le but !

Bon alors voilà...
Notre but est de créer un système de gestion de fichiers simple d'utilisation et pas trop complexe à programmer (Il ne manquerait plus que ça).
Pour cela, nous allons répartir le script en deux parties :
L'affichage et la suppression.
Vous aurez aussi sûrement besoin d'un script d'upload... Je n'ai pas souhaité m'étaler là dessus car j'ai déjà fait un tuto traitant de cela... Je vous ai mis le lien en bas de cette page. ;o)
La partie affichage comportera le script d'affichage ! (Non c'est vrai ?)
La partie suppression comportera un petit script de suppression de fichiers mais attention ! Ces deux parties devront être liées car il faudra bien choisir quel fichier supprimer... (Ca me semble évidant )
Ah oui, j'allais oublier : Même si vous êtes débutant(e), vous devriez comprendre sans trop de problèmes...
Bon ! Allez ! On entame la première véritable partie...

3. Le module d'affichage des fichiers

Voilà... Nous y sommes...C'est la première véritable partie du tuto.
Alors tous à vos claviers !
Alors pour commencer, vous allez prendre un dossier sur votre serveur et lui donner le nom gestion (Son nom n'a pas d'importance...).
Puis, vous allez créer un nouveau dossier dans ce dossier : fichiers. Ensuite, mettez quelques photos dans ce dossier (C'est juste pour avoir un peu de matière pour tester le script...).
Et pour terminer, je vais vous demander de créer un fichier PHP "voir_fichiers.php" que vous sauverez dans le dossier gestion. C'est le fichier PHP qui comportera votre code...
Alors maintenant, nous allons commencer à rentrer dans le vif du sujet.
Nous allons maintenant voir quelques fonctions qui nous permettrons de continuer !

3.0. Les fonctions

Voici donc les quelques fonctions dont vous allez avoir besoin...

3.0.0. opendir()

Opendir()Lien vers la documentation PHP au sujet de la fonction opendir() est une fonction permettant d'ouvrir un dossier en renseignant son chemin entre les parenthèses et de mettre le pointeur dedans. Vous devrez réceptionner le résultat dans une variable. Elle permettra d'utiliser readdir() .

Petit exemple d'utilisation de la fonction opendir()
Sélectionnez

$adresse="./image/"; //Adresse du dossier.
$dossier=Opendir($adresse); //Ouverture du dossier.

3.0.1. readdir()

Readdir()Lien vers la documentation PHP au sujet de la fonction readdir() est une fonction permettant de retourner le nom du fichier suivant dans le dossier identifié par la fonction opendir().
Les noms sont retournés dans l'ordre qu'ils sont enregistrés dans le système de fichiers.
Cette fonction sera à utiliser dans une boucle...
Pour l'utiliser, vous devez mettre la variable qui servit dans l'ouverture du fichier entre les parenthèses.

Petit exemple d'utilisation de la fonction readdir()
Sélectionnez

while ($Fichier = readdir($dossier)) //Grâce à la boucle, on affiche les fichiers les uns après les autres.
{
     //C'est ici que l'on affichera...
} 

3.0.2. Code de base simplifié

Voila pour les quelques fonctions...
Si vous n'avez pas compris, ce n'est pas grave, concentrez vous et relisez la partie ci-dessus...
Donc maintenant, vous pourriez presque vous débrouiller seuls.
On vas pouvoir créer le script d'affichage !
Bon je vais maintenant vous exposer le code simplifié de base puis le compléter petit à petit.

Code de base simplifié
Sélectionnez

<?php
$adresse="./image/"; //Adresse du dossier sans oublier le / à la fin.
$dossier=Opendir($adresse); //Ouverture du dossier.
while ($Fichier = readdir($dossier)) //On affiche les fichiers les uns après les autres.
{
     //Maintenant, on affiche les fichiers sous forme de liens vers les fichiers 
     //(NB : Les lien sont en target="_blank" ce qui signifie qu'ils ouvrirons une nouvelle page dans votre navigateur !).
     echo '<a href='.$adresse.$Fichier.' target="_blank">'.$Fichier.'</a><br>';
}
closedir($dossier);
?> 

3.1. Des ajouts élémentaires !

Maintenant que nous avons notre code de base, nous allons rajouter quelques petits trucs dedans pour qu'il soit vraiment au point !

3.1.0. Une condition ou attention aux dossiers

En effet, si vous lancez votre code maintenant, vous vous rendrez compte que ça fonctionne mais que tout en haut, vous avez une série de " . " ou de " .. " !
Alors ces points correspondent en fait à des dossier ! ("." correspond au dossier courant et ".." au dossier parent)
Nous allons donc éliminer ces points avec une simple condition dans la boucle !

Code pour ne pas afficher le dossier parent et le dossier courant
Sélectionnez

if ($Fichier != "." && $Fichier != "..") 
{
     //Voilà, les points sont maintenant filtrés !
} 

Maintenant, combinons le tout :

Combinaison du code de base et du code pour ne pas afficher le dossier parent et le dossier courant
Sélectionnez

<?php 
//J'ai retiré les commentaires pour que ce soit plus lisible...
$adresse="./image/";
$dossier=Opendir($adresse);
while ($Fichier = readdir($dossier))
{
     if ($Fichier != "." && $Fichier != "..") // Filtre anti-point ! 
     {
          echo '<a href='.$adresse.$Fichier.' target="_blank">'.$Fichier.'</a><br>';
     }
}
closedir($dossier);
?> 

Voilà ! C'est tout pour les points ! ;o)

3.1.1. Liaison directe avec la suppression !

Bon et maintenant qu'est ce que l'on fait ?
Eh bien on va créer la liaison entre l'affichage et le module de suppression !
Alors là, le but est très simple : on vas créer un lien supprimer qui sera composé d'une transmission de variable : nom .
En fait, on verra plus tard à quoi nous servira ce "nom" mais sachez qu'il faut absolument que cette variable contienne le nom du fichier affiché !
Nous avons déjà le nom du fichier : Pour nous, c'est tout simplement la variable fichier !
Alors pour la visibilité, je vous conseille de mettre le supprimer à gauche du nom des fichiers qui risquent de ne pas tous compter le même nombre de caractères (risque de décalage !) .
Voici le code avec le lien, vous ne devriez pas avoir de mal à le comprendre (Hein ?! Rassurer moi ! :o)).

Code avec transmission de la variable 'nom' dans un lien 'supprimer'
Sélectionnez

<?php
$adresse="./image/";
$dossier=Opendir($adresse);
while ($Fichier = readdir($dossier))
{
     if ($Fichier != "." && $Fichier != "..") // Filtre antipoint !<br/>
     {
          // C'est juste en dessous qu'il y a eu les modifications. <br/>
          echo '<a href="voir_fichiers.php?nom='.$Fichier.'">Supprimer</a> => <a href='.$adresse.$Fichier.' target="_blank">'.$Fichier.'</a><BR>';
     }
}
closedir($dossier);
?> 

Comme vous pouvez le voir, vous avez maintenant un "supprimer" relatif à chaque fichier et positionné à gauche de son fichier respectif.
Si vous regardez d'un peu plus près vos lien, vous devriez voire qu'ils pointent tous vers la même page avec en plus en variable "nom" le nom de fichier auquel il se rapporte.
Bon bah maintenant, on passe aux choses sérieuses !
On vas maintenant créer le module de suppression de fichier.
Vous verrez, ce n'est pas bien compliqué non plus.

4. Le module de suppression...

Nous voilà donc dans le chapitre et non des moindres de suppression de fichiers !
Bon, je vous l'avoue tout de suite, il va falloir modifier la structure générale du code...
C'est pourquoi je vous ai fait un petit plan pour bien comprendre :

Plan du module de suppression
Plan du module de suppression

Bon, j'espère que vous appréciez mon dessin !
Alors la condition, comme vous vous en doutez sera tout simplement :

La condition
Sélectionnez

if(isset($_GET['nom']));
{
     //Module de suppression.
} 

4.0. La fonction !

Voici la fonction dont nous allons avoir besoin...

4.0.0. unlink()

Unlink()Lien vers la documentation PHP au sujet de la fonction unlink() permet de supprimer un fichier. C'est donc d'elle dont nous avons besoin...
Pour l'utiliser, vous devez ouvrir le fichier sélectionné grâce à la fonction opendir() et mettre le nom du fichier précédé de l'adresse du dossier (que nous avons déjà utilisé pour l'affichage) entre les parenthèses.

4.1. Petits trucs à savoir...

Bon, maintenant que nous avons la fonction, je vais pouvoir vous donner un code expliqué étape par étape...
Dans la partie précédente, je vous ai aussi parlé de petits points; Vous savez, ceux qui correspondent aux dossiers !
Et bien nous allons aussi placer "le filtre à points" dans le module de suppression de fichiers car sinon, gare à la perte de fichiers !
Enfin bref, ça serais dommage de perdre les photos de mamie en vacances à Ker Pouic avec vous

4.2. Code de suppression complet !

Voici donc le code de suppression une fois terminé ! ;o)

Code de suppression terminé
Sélectionnez

$adresse = "./image/";//Adresse du dossier.
if(isset($_GET['nom']))//Si la variable $_GET['nom'] existe...
{
     if ($Fichier != "." && $Fichier != "..") //Filtre anti-points
     {
          $nom=''.$adresse.$_GET['nom'].''; //Formatage du nom précédé de l'adresse du dossier dans lequel il se trouve.
          unlink($nom); //Suppression du fichier
          echo 'Le fichier "'.$_GET['nom'].'" a été effacé !<br>'; //Message de confirmation de suppression.
     }
} 

5. Le code complet

Maintenant que nous avons nos deux modules, nous allons les rassembler pour former un super script de gestion de fichiers !
Notez qu'il est possible de faire des fonction a partir de ces modules mais j'ai choisit la solution la plus simple...
Alors maintenant, voici le code complet :
(Roulement de tambours ! ^^)

Code complet
Sélectionnez

<?
$adresse = "./image/"; //Adresse du dossier.
if(isset($_GET['nom'])) //Si $_GET['nom'] existe, on supprime le fichier...
{
     if ($Fichier != "." && $Fichier != "..") 
     {
          $nom=''.$adresse.$_GET['nom'].'';
          unlink($nom);
          echo 'Le fichier "'.$_GET['nom'].'" a été éffacé !<br>';
     }
} 
$dossier = opendir($adresse); //Ouverture du dossier. 
echo '<fieldset><legend>Liste des fichiers</legend><br>'; //Ouverture de fieldset 
//(Fieldset permet de faire des cadres avec légende intégrée en haut a gauche. 
//C'est très simple à utiliser et ça permet de répartir les formulaires en plusieurs parties et donc d'accroître leur lisibilité !). 
while ($Fichier = readdir($dossier)) //Affichage...
{  
     if ($Fichier != "." && $Fichier != "..") 
     { 
          echo '<a href="voir_fichiers.php?nom='.$Fichier.'">Supprimer</a> => <a href='.$adresse.$Fichier.' target="_blank">'.$Fichier.'</a><BR>'; 
     }
}
closedir($dossier); //Fermeture du dossier. 
echo '<br></fieldset>'; //Fermeture du fieldset.
?> 

6. Coclusion

Vous avez certainement remarqué que ce script est très simple et limité à un dossier.
Pour ceux qui ne sauraient pas encore uploader des fichiers en PHP :
Upload de fichiers en PHPUpload de fichiers en PHP
Voici un article qui va vous permettre de créer un explorateur plus complet : http://cyberzoide.developpez.com/php4/file/Lien vers un tutoriel pour créer un explorateur de fichiers plus complet
Voilà... C'est fini... J'espère que ça vous a plu ! :o)
Si vous voyez des erreurs, signalez les moi, c'est comme ça qu'on avance...

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.comLa Hache Web ).