J'ai un problème concernant la suppression d'un répertoire en PHP. Je me suis renseigné et apparemment la fonction rmdir ne fonctionne que si le repertoire est vide. Ca ok.
Je fais donc un test ou je crais un répertoire comme ceci : mkdir("gg",0777); Jusque là tout va bien :)
Mais lorsque j'exécute une autre page (apres que le repertoire est était créé bien sur) contenant ce code : rmdir("gg"); rien ne se passe. Je n'ai pas de message d'erreur mais le dossier est toujours là.
YA-HA
Bon désolé d'up ce post. Mais il se trouve que je viens de trouver un moyen de supprimer les répertoires (même non vide!!!) chez free. Comme quoi à force de bidouiller ... Je sais le post date un peu mais je pense que ça pourra aider des gens. Voici la fonction donc :
function clearDir($dossier) {
$ouverture=@opendir($dossier);
if (!$ouverture) return;
while($fichier=readdir($ouverture)) {
if ($fichier == '.' || $fichier == '..') continue;
if (is_dir($dossier."/".$fichier)) {
$r=clearDir($dossier."/".$fichier);
if (!$r) return false;
}
else {
$r=@unlink($dossier."/".$fichier);
if (!$r) return false;
}
}
closedir($ouverture);
$r=@rmdir($dossier);
@rename($dossier,"trash");
return true;
}
En fait tout est dans la ligne : @rename($dossier,"trash");
Et oui la fonction permettant de renommer les dossiers n'est pas désactivée ! Et si on renomme deux dossier vides avec un même nom un des deux dossiers sera supprimé.
Bon par contre je comprends pas pourquoi il arrive à supprimer le dernier dossier. Si quelqu'un pouvait m'expliquer ce que j'ai trouvé par hasard ...
Bravo Bibou, ça marche toujours ! J'avais un dossier contenant une chiée de dossiers créés par un script étranger avec des caractères non reconnus et donc impossible à supprimer en FTP. Ton script a tout nettoyé, plus qu'à supprimer le dossier trash en FTP et hop, nickel !
Salut,
J'aimerais vous remercier d'avoir partager ce code , il m'a était utile j'avais le temps et je serais resté bloqué dessus sans votre précieuse aide :)
Un seul fichier php, dans le même répertoire que le dossier à supprimer. Ce fichier php contient (remplacer "Nom_du_dossier_a_supprimer" par le nom du dossier à supprimer):
<?php
$a_del = "Nom_du_dossier_a_supprimer"; // <- c'est ici qu'on remplace
clearDir($a_del);
function clearDir($dossier) {
$ouverture=@opendir($dossier);
if (!$ouverture) return;
while($fichier=readdir($ouverture)) {
if ($fichier == '.' || $fichier == '..') continue;
if (is_dir($dossier."/".$fichier)) {
$r=clearDir($dossier."/".$fichier);
if (!$r) return false;
}
else {
$r=@unlink($dossier."/".$fichier);
if (!$r) return false;
}
}
closedir($ouverture);
$r=@rmdir($dossier);
@rename($dossier,"trash");
return true;
}
?>
Rha bon j'ai trouvé
Oui en fait il reste bien un répertoire à la fin. Je regardais juste pas au bon endroit. Enfin bon ça permet de supprimer les répertoires en cascade quand même. J'ai pas perdu ma journée.
Après vérification, il existait un petit problème avec le php5 qui n'est pas activé par défaut sur free. Je l'ai corrigé dans les téléchargements proposés. Pour ne pas tout réuploader, il suffit en fait de rajouter au début du fichier ".htaccess" la ligne "php 1" pour que tout marche correctement.
super le script marche avec un dossier correctement désigné
ex <?php
$a_del = "Nom_du_dossier_a_supprimer/Nom_du_dossier_a_supprimer"; // <- c'est ici qu'on remplace
mais ne marche pas sur un répertoire avec plusieurs dossiers :
message
Fatal error: rename(installold/spip192c-old/tmpg/sessions,trash) [<a href='function.rename'>function.rename</a>]: Directory not empty in /mnt/141/sdb/5/a/webmoulin/del_img.php on line 21
ratai je crois que le problème vient d'un fichier avec un nom contenant des caractère non standard, si c'est ça, c'est vraiment la merde, j'ai eu ce problème, impossible de trouver la réponse.
avec windows en ftp tu peux transférer ces fichiers nommés instandarmment sur ton serveur free par exemple, mais comme c'est du linux et à ce que j'ai compris linux et windows ne se comprennent pas bien sur ce point.
oui, bien util, mais je débute en php, comment l'utiliser, je cherche un script simple pour supprimer un répertoire et ses sous répertoires sur mon site free.
De même je cherche un script qui me dézipe un fichier rar ou zip uploadé par exemple, ça va plus vite d'envoyer un fichier rar ou zip que des milliers de fichiers
Pour l'utiliser c'est pas compliqué : tu copie-colles la fonction que j'ai écrite ci dessus entre les balises php, et tu l'appelle comme ça :
clearDir("Nom_du_dossier_a_supprimer");
c'est tout !
Pour le dézippage (rar j'ai pas trouvé) je me suis déjà posé sur la question. c'est pas facile de trouver un script qui le fasse sur free. J'en utilise un pour mon webOS (ou gestionnaire de fichiers en ligne si ce nom abusif indispose certains), que j'ai trouvé sur https://www.phpclasses.org/ Je sais plus lequel c'est, si tu veux aller voir sur mon projet c'est sur http://zoufios.free.fr (un peu de pub pour son site perso, ça fait jamais de mal :P). Voila !!!
Est-ce que c'est ça :
- je colle ta fonction dans un fichier php que j'appelle fonctioneffacer.php, et je crée un autre fichier effacer.php où je mets : <? clearDir("Nom_du_dossier_a_supprimer"); ?>
J'ai mis ton programme zoufios sur mon site pour l'essayer, un autoextractible serait pas mal, genre j'envoie zoofios.php sur le site et quand je le lance, il s'extracte, j'ai déjà vu des script comme ça, ça évite d'avoir des milliers de fichiers à transférer.
Là là, qu'est-ce que je galère à me mettre au php, pourtant dans le temps j'ai pas mal programmé en basic et assembleur.
Bon j'ai toujour un putain de répertoire qui contient d'autres putains de répertoire sur mon site, que je ne peux pas effacer en ftp, alors est-ce que quelqu'un a une solution complète pour débutant à ce genre de problème que beaucoup de monde à ou je dois ouvrir un autre compte vierge ?
C'est dingue, y a pas moyen d'avoir une réponse simple à une question simple, faut toujour qu'une bande de branleurs la ramène avec leur science tout ça pour du code qui marche jamais.
Alors, est-ce que c'est possible d'avoir dans 1 seul fichier en php, de quoi effacer un répertoire et son contenu quel qu'il soit ?
Je sais que c'est possible, mais est-ce que quelqu'un peut m'expliquer comment faire, ou personne ne sait ?
Si vous ne savez pas, pas la peine de me le dire, c'est pas une tare de pas savoir.
bibou, je te remerci, ton script marche, il reste le répertoire trash mais je crois que l'on ne peut pas effacer de répertoire en php, en tout cas c'est exactement ce que je cherchais, ça parait simple, mais pour ce trouver ce genre de script, malgré google qui est "mon ami", c'est galère. Une petite suggestion, tu devrais le mettre dans phpscript, ça dépannerait beaucoup de monde.
quand on tappe "supprimer dossier php" dans google c'est le premeir script trouvé...
... sans le "rename"... alros je dis "GG" pour l'astuce :) lol
J'aimerais vous remercier d'avoir partager ce code , il m'a était utile j'avais le temps et je serais resté bloqué dessus sans votre précieuse aide :)