Gestion de fichiers dans un répertoire
Résoludanielos77 Messages postés 108 Date d'inscription Statut Membre Dernière intervention -
Bonjour à toutes et à tous,
Je souhaite avoir dans un répertoire sous la racine, un fichier pour gérer les fichiers d'un autre répertoire également sous la racine.La gestion consisterait à lister les fichiers (uniquement les fichiers et pas . et ..) puis avoir pour chacun des fichier un lien hypertexte qui permette de le télécharger et pour finir, avoir un bouton qui permette d'effacer ou pas le fichier en question.
J'ai actuellement ce code :
<?php echo 'test<br>'; // simple vérification $scandir = scandir("../uploads"); foreach($scandir as $fichiers){ $documents = array($fichiers); //affiche chaque document avec un lien pour le télécharger et un bouton pour supprimer le fichier echo '<html> <form method="POST" id="gest-doc" class="princ-form"> <a href="../uploads/'.$fichiers.'">'.$fichiers.'</a>   <input style="font-size : 12px;" type="submit" name="btnSubmit" id="submit" class="gest-doc" value="Supprimer"/> </form> </html> '; // si le bouton supprimer est actionné if(isset($_POST['btnSubmit'])){ // supprime le fichier $delfile=('../uploads/'.$fichiers); echo $delfile; // juste pour vérifier le chemin unlink($delfile); } echo '<br>'; } ?>
Ce code fonctionne bien mais avec des loupés...
1°) il m'affiche . et .. avec
$documents = array($fichiers);
car je n'arrive pas à le remplacer par
$documents = array_diff($fichiers, array('.', '..'));
2°) le foreach et le unlink() fonctionne très bien, voire trop bien car il me supprime tous les fichiers lorsque l'on clique sur n'importe quel bouton ;-( ... Est-ce qu'en passant par une msgbox qui apparaitrait après avoir cliqué sur le lien pour le téléchargement et demandant la suppression du fichier oui/non éviterait cela ? En utilisant du javascript pour cela, je pense.
A moins qu'une solution plus propre soit faisable mais là, je sèche un peu.
Merci d'avance au contributeur ou à la contributrice qui éclairera ma lanterne.
Et bonnes fêtes à tous et à toutes.
Daniel
Windows / Firefox 120.0
- Gestion de fichiers dans un répertoire
- Gestion de fichiers - Télécharger - Gestion de fichiers
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment ouvrir un fichier bin ? - Guide
- Impossible de supprimer un fichier - Guide
1 réponse
Bonjour,
Essaye la fonction php glob à la place de scandir pour lister les fichiers (glob ne retourne pas les dossiers spéciaux . et ..) : https://www.php.net/manual/fr/function.glob.php
Ajoute un attribut download sur ton lien de téléchargement : https://www.w3schools.com/tags/att_a_download.asp
Pour supprimer uniquement le fichier cliqué, il faut transmettre via un paramètre get ou post l'identifiant unique du fichier (son nom par exemple).
Attention à bien vérifier dans ton code que le fichier à supprimer correspond bien aux fichiers du dossier upload.
Si tu ne fais pas de vérification, l'utilisateur pourrait supprimer d'autres fichiers de ton serveur.
Bonjour Pitet,
Merci pour la function glob.
J'ai aussi mis l'attribut download (pour moi, c'était évident qui si cela s'affichait à l'écran et que je voulais en garder une copie, il suffisait d'un clic droit sur le lien et enregistrer... mais bon, c'est mis).
Pour la suppression, il y a bien le post du bouton submit, et ça fonctionne pour le fichier identifié avec $fichiers mais je pense que le fait qu'il soit dans la boucle foreach, cela ne s'arrête pas au fichier à côté du bouton mais continue la boucle jusqu'à ce que tous les fichiers aient été effacés du coup.
Si je sors le bouton de la boucle, je n'aurai qu'un seul bouton sur toute la page l'utilisateur ne saura pas clairement ce qu'il supprime. D'où peut-être la piste d'un msgbox qui après avoir cliqué sur un lien pour télécharger demanderait s'il faut supprimer le fichier.
Je vais creuser encore cette partie mais merci en tout cas pour le glob et le conseil du download.
Bonnes fêtes de fin d'année
Daniel
Le msgbox ne pourra pas résoudre ce problème.
L'affichage des boutons supprimer doit se faire dans la boucle pour avoir un bouton supprimer pour chaque fichier (avec un paramètre unique pour chaque bouton).
La suppression du fichier lorsque l'utilisateur clique sur un bouton ne doit pas être fait dans la boucle mais dès le début du script, en récupérant le paramètre unique transmis par le bouton/formulaire pour supprimer uniquement le fichier spécifié.
L'affichage des boutons supprimer doit se faire dans la boucle pour avoir un bouton supprimer pour chaque fichier (avec un paramètre unique pour chaque bouton) ???
Je vois bien de quoi il est question mais je suis totalement incapable d'écrire cela.
Je ne sais pas combien de bouton il faudra créer donc un for ... to... n'est pas utilisable.
Je vais aller fouiller la littérature sur le comptage d'un array.
Effectivement $nb=count(array); fonctionne très bien.
Reste à jouer avec le JS pour donner des noms à mes boutons.
Le JS n'est pas nécessaire, un exemple simple (avec un paramètre get au lieu d'un formulaire post) :