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

  • Auteur de la discussion rinazz
  • Date de début

rinazz

Expert
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 !
 

siegone

Habitué
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 :

pour effacer un fichier :
 

rinazz

Expert
[citation=713,1][nom]Siegone a écrit[/nom]il suffit de te faire une petite boucle qui inscrit dans un tableau les noms des fichiers dans ton repertoire.
[g]puis tu supprimes de ce tableau tous les noms des fichiers existants dans ta base[/g].
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.

[/citation]

quel est le code svp?
 

siegone

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

bon alors proposition de script avec une autre methode :
[fixed]<?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
?>[/fixed]
 

rinazz

Expert
merci bcp ! j'suis sauvé de justesse...
je suis passé de 99% à 40% d'espace disque occupé :-D
 

strauky03

Nouveau membre
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:
[cpp]<?php
// connecte toi à ta base
$connect=mysql_connect("localhost","root","");
// selection de la base...
mysql_select_db("module",$connect);

$dbreq = "SELECT * FROM news ORDER BY id" ;
$dbres = mysql_query($dbreq) ; // j'ai supposé que c'était mysql
$i = 0 ;
$chemincompletdetonrepertoire = '';
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
?>[/cpp]

ps: Désolé je n'ai pas vu le bouton cpp :)
 

strauky03

Nouveau membre
Que dois je mettre alors pour le chemin puisque je veux qu'il supprime dans le repertoire dans lequel se trouve le script ?
Merci
 

KangOl

Grand Maître
Code:
$chemincompletdetonrepertoire = '.';

le . signifie "le répertoire courant"
 

JM-Studio

Nouveau membre



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 :)

 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 054
Membres
1 586 393
Dernier membre
mathhh28
Partager cette page
Haut