[Régler] Script suppression dossier/fichier pas complet

Ce forum aborde toutes les questions qu'un codeur ou webmaster pourrait se poser, et n'ayant aucun rapport direct avec phpBB.
Tout ce qui peut concerner la récupération des sessions de phpBB sur votre site, doit se faire dans cette section.

Modérateur: Equipe

Règles du forum
A lire impérativement : Règlement de phpBB-fr.com

[Régler] Script suppression dossier/fichier pas complet

Messagepar Fantole » 18 Aoû 2006 à 12:13

Bonjour @ tous ;)

Je cherche à supprimer un dossier mais dans celui-ci figure des fichiers et dossier(certains contenant des sous dossier, etc...)

Mais comme on ne peut supprimer un dossier plein il faut le vider.

J'ai d'abord penser à effectuer un script pour vider chaque dossier et ensuite supprimer les dossiers vide 1 à 1.

Mais c'est trop long et en plus le nom des dossiers change souvant :?

Pour le moment j'ai ce script.

Code: Tout sélectionner
$dossier_traite = "./../";

$repertoire = opendir($dossier_traite); //on définit le repertoire dans lequel on souhaite travailler

while (false !== ($fichier = readdir($repertoire))) //on lit chaque fichier du répertoire dans la boucle
{
$chemin = $dossier_traite."/".$fichier; //on définit le chemin du fichier à effacer

//si le fichier n'est pas un répertoire
if ($fichier != ".." AND $fichier != "." AND !is_dir($fichier))
       {
       unlink($chemin); //on efface
       }
}
closedir($repertoire); //Ne pas oublier de fermer le dossier !EN DEHORS de la boucle! Ce qui évitera à PHP bcp de calculs et des pbs liés à l'ouverture du dossier

function effacer($fichier) 
{ 
if (file_exists($fichier)) 
{ 
chmod($fichier,0777); 
if (is_dir($fichier)) 
{ 
$id_dossier = opendir($fichier); 
while($element = readdir($id_dossier)) 
{ 
if ($element != "." && $element != "..") 
unlink($fichier."/".$element); 
} 
closedir($id_dossier); 
rmdir($fichier); 
} 
else unlink($fichier); 
} 
}
$repertoire = "./../".$nomDossier; 
effacer($repertoire);


Très efficace mais pas comme je le souhaiterais :cry:
Je désire trouver un script permettant de trouver tout les dossier et tout les fichiers, et ainsi les vider 1 à 1.

Si l'un de vous à une idée je suis preneur, j'ai beau rechercher sur le WEB c'est le seul script le plus complet que j'ai pû trouver :cry:

Merci d'avance ;)
Modifié en dernier par Fantole le 18 Aoû 2006 à 14:30, modifié 1 fois.
Avatar de l’utilisateur
Fantole
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3082
Enregistré le: 09 Déc 2004 à 10:32
Localisation: Sur le Web

Messagepar and1hotsauce » 18 Aoû 2006 à 12:42

Salut,

a ton stade je crois que maintenant, tu ne dois plus chercher des scripts tout fait, mais te les confectionner (bref réfléchir et suer un peu dessus ! :P )
;-)

bref pour t' aider un peu :

un systeme de fichiers & dossiers sont est un faire un arbre.
le pere c' est le dossier "racine" (/ sous unix, c:/ sous win). ce pere a des enfants qui sont soit fichiers, soit dossiers. parmis ces enfants, ceux qui sont des dossiers ot aussi des enfants (fichiers et dossiers) et ainsi de suite...

Pour parcourir un système de fichiers comme ca il faut utiliser du récursif. Je ne sais pas si t as déjà entendu ce terme, mais c' est quand une fonction se rappelle elle même.

si t as une fonction deleteFilesOf( $dir ) que tu as définit toi même.
cette fonction fait :

1) supprimer les fichiers (facile a savoir s' il le sont avec is_file())
2) appeller la fonction deleteFilesOf() sur les dossier (la fonction doit etre appellée sur chacun des dossiers)
3) supprimer le dossier (a ce stade comme al fonction deleteFilesOf() a été appelée juste avant, on est sur que le dossier est vide

si tu veux le tplRename que j' ai fait utilise le récursif (ca travaille aussi sur un systeme de fichier dont le rep racine est le rep contenant les fichiers du thème).

Avec cette technique la, si le script est assez bien conçu, tu es sur que ca marche pour n' importe quel dossier ;-)

A+, And1HotSauce ;-)
Avatar de l’utilisateur
and1hotsauce
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3517
Enregistré le: 19 Oct 2003 à 13:58
Localisation: belgique, mons

Messagepar Fantole » 18 Aoû 2006 à 13:53

Merci beacoup pour ton aide and1hotsauce

Donc si j'ai bien compris je récapitule

Il me faut créer une autre fonction, dans ton exemple deleteFilesOf.

Mais tu as écris plus bas

and1hotsauce a écrit:2) appeller la fonction deleteFilesOf() sur les dossier (la fonction doit etre appellée sur chacun des dossiers)


Il va donc me falloir les appeler un à un ?

J'ai pas tout compris :s

Sinon t'en fait pas niveau arbre et aboresence je savais déjà et donc compris ;)

EDIT : Après 1 heure de recherche sur le Web voici ce que j'ai réussi à trouver

Code: Tout sélectionner
function effacer($dir)
{
if($objet = glob($dir."/*"))
{
foreach($objet as $obj)
{
if(is_dir($obj))
{
effacer($obj);
}
else
{
unlink($obj);
}
}
}
rmdir($dir);
}
effacer(nom_du_dossier/');


Sa supprime vraiment tout de A-Z
Les fichiers, dossier, sous dossier, etc....

Un code aussi petit c'est bluffant 8O
Je n'aurais jamais été capable de réaliser un tel code :lol:
Avatar de l’utilisateur
Fantole
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3082
Enregistré le: 09 Déc 2004 à 10:32
Localisation: Sur le Web


Retourner vers Coding, Webmastering et Sécurité informatique

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités