Votre question

[PHP] Supprimer des fichiers du serveur non enregistrés dans la BDD

Tags :
  • Web
  • Serveur
  • Programmation
Dernière réponse : dans Programmation
2 Mars 2003 15:16:36

Bonjour,

Dans ma base SQL j'ai un champs 'photos' où il y a tous les noms de fichiers qui sont dans un dossier de mon serveur.
Mais comme dans ce même dossier j'ai beaucoup trop de fichiers qui ne sont pas enregistrés dans le champs 'photos', j'aimerais bien connaître la manipulation pour les supprimer automatiquement.

Merci !

Autres pages sur : php supprimer fichiers serveur enregistres bdd

2 Mars 2003 16:31:41

il suffit de te faire une petite boucle qui inscrit dans un tableau les noms des fichiers dans ton repertoire.
puis tu supprimes de ce tableau tous les noms des fichiers existants dans ta base.
et du coup dans le tableau ne restera que les fichiers presents dans ton repertoire mais absent de ta base : il te suffira alors de les effacer.

pour lister les fichier d'un repertoire : http://www.php.net/manual/fr/function.readdir.php

pour effacer un fichier : http://www.php.net/manual/fr/function.unlink.php
2 Mars 2003 17:43:16

Siegone a écritil suffit de te faire une petite boucle qui inscrit dans un tableau les noms des fichiers dans ton repertoire.
puis tu supprimes de ce tableau tous les noms des fichiers existants dans ta base.
et du coup dans le tableau ne restera que les fichiers presents dans ton repertoire mais absent de ta base : il te suffira alors de les effacer.



quel est le code svp?
Contenus similaires
2 Mars 2003 19:08:12

Ouais c'est vrai que y'a plus simple...

bon alors proposition de script avec une autre methode :
<?php
// connecte toi à ta base
$dbreq = "SELECT nomfichier FROM tatable" ;
$dbres = mysql_query($dbreq) ; // j'ai supposé que c'était mysql
$i = 0 ;
while ($dbpart = mysql_fetch_row($dbres)) {
$tab[$i] = $dbpart[0] ;
$i++ ;
}
// donc maintenant dans tab on a tous les fichiers indexés de ta base
$handle=opendir($chemincompletdetonrepertoire);
while ($file = readdir($handle)) {
if ($file != "." && $file != "..") {
if (!(in_array($file,$tab))) { /* si fichier dans repertoire mais absent de la base : on l'efface */
unlink($chemincompletdetonrepertoire."/".$file) ;
}
}
}
closedir($handle);
//pense a te deconnecter de ta base
?>
4 Mars 2003 15:33:39

merci bcp ! j'suis sauvé de justesse...
je suis passé de 99% à 40% d'espace disque occupé :-D
12 Juin 2007 11:09:10

Bonjour,

désolé de remetre ce sujet si vieux au gout du jour mais c'est exactement ce dont j'avais besoin mais j'obtiens le message d'erreur suivant :

Warning: readdir(): supplied argument is not a valid Directory resource in c:\module\rech\admin\b.php on line 19

Warning: closedir(): supplied argument is not a valid Directory resource in c:\module\rech\admin\b.php on line 26

Que faire ?

voici mon code:
  1. <?php
  2. // connecte toi à ta base
  3. $connect=mysql_connect("localhost","root","");
  4. // selection de la base...
  5. mysql_select_db("module",$connect);
  6.  
  7. $dbreq = "SELECT * FROM news ORDER BY id" ;
  8. $dbres = mysql_query($dbreq) ; // j'ai supposé que c'était mysql
  9. $i = 0 ;
  10. $chemincompletdetonrepertoire = '';
  11. while ($dbpart = mysql_fetch_row($dbres)) {
  12. $tab[$i] = $dbpart[0] ;
  13. $i++ ;
  14. }
  15. // donc maintenant dans tab on a tous les fichiers indexés de ta base
  16. $handle=opendir($chemincompletdetonrepertoire);
  17. while ($file = readdir($handle)) {
  18. if ($file != "." && $file != ".." ) {
  19. if (!(in_array($file,$tab))) { /* si fichier dans repertoire mais absent de la base : on l'efface */
  20. unlink($chemincompletdetonrepertoire."/".$file) ;
  21. }
  22. }
  23. }
  24. closedir($handle);
  25. //pense
  26. ?>


ps: Désolé je n'ai pas vu le bouton cpp :) 
a b L Programmation
12 Juin 2007 11:16:05

12 Juin 2007 11:54:48

  1. $chemincompletdetonrepertoire = '';

le problème est la.
12 Juin 2007 16:46:20

Que dois je mettre alors pour le chemin puisque je veux qu'il supprime dans le repertoire dans lequel se trouve le script ?
Merci
12 Juin 2007 17:51:11

  1. $chemincompletdetonrepertoire = '.';


le . signifie "le répertoire courant"
24 Août 2016 11:13:46

siegone a dit :
Ouais c'est vrai que y'a plus simple...

bon alors proposition de script avec une autre methode :
<?php
// connecte toi à ta base
$dbreq = "SELECT nomfichier FROM tatable" ;
$dbres = mysql_query($dbreq) ; // j'ai supposé que c'était mysql
$i = 0 ;
while ($dbpart = mysql_fetch_row($dbres)) {
$tab[$i] = $dbpart[0] ;
$i++ ;
}
// donc maintenant dans tab on a tous les fichiers indexés de ta base
$handle=opendir($chemincompletdetonrepertoire);
while ($file = readdir($handle)) {
if ($file != "." && $file != "..") {
if (!(in_array($file,$tab))) { /* si fichier dans repertoire mais absent de la base : on l'efface */
unlink($chemincompletdetonrepertoire."/".$file) ;
}
}
}
closedir($handle);
//pense a te deconnecter de ta base
?>



Salut à tous, je viens déterrer ce sujet plusieurs années plus tard :D 

Ce script fonctionne très bien, cependant, j'ai un dossier images et dans la BDD j'ai une table avec 3 champs images (ph1, ph2 et ph3) du coup, quand j'utilise ce script ça me supprime toutes les images sauf la 1 dans le dossier.

Savez-vous comment faire ?

Car avec 1 seul champ image dans la table mysql, ça fonctionne très bien, mais avec 3, ça me supprime toutes les images sauf la 1.

Pourtant dans ma requete, j'ai bien appelé "SELECT ph1 ph2, ph3 from table"

Une idée ?

Merci :)