zimounet Posté 27 Mars 2006 Posté 27 Mars 2006 Voila, la question est simple, et j'espere qu'il sera possible d'avoir une solution tout aussi simple Je veux juste une méthode pour supprimer tous les fichier d'un dossier. Comment procéder?
Spidetra Posté 27 Mars 2006 Posté 27 Mars 2006 une première piste avecla fonction unlink de php ( voir les exemple récursif )
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 (modifié) Pas d'exemple, description vague... Pas super complete la doc php sur le coup... Cela ne m'avance pas encore beaucoup, mais merci pour ta contribution Y a t-il quelqu'un d'autre qui à une idée? Modifié 27 Mars 2006 par zimounet
rportal Posté 27 Mars 2006 Posté 27 Mars 2006 tu as tous les exemples qu'il faut dans la doc de php: http://www.php.net/rmdir
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 (modifié) <mode grognon> Merci rportal, mais j'ai pas demandé de supprimer un dossier, mais le contenu de celui ci. De plus, a part des contribs en anglais, je ne vois pas d'exemples dans la doc elle même </mode grognon> Modifié 27 Mars 2006 par zimounet
Spidetra Posté 27 Mars 2006 Posté 27 Mars 2006 (modifié) Pas d'exemple, description vague... Pas super complete la doc php sur le coup... Cela ne m'avance pas encore beaucoup, mais merci pour ta contribution Y a t-il quelqu'un d'autre qui à une idée? <{POST_SNAPBACK}> tu pourrais adapter ce bout de code à ton besoin ( source : fct unlink php ) : <?php/** * rm() -- Vigorously erase files and directories. * * _AT_param $fileglob mixed If string, must be a file name (foo.txt), glob pattern (*.txt), or directory name. * If array, must be an array of file names, glob patterns, or directories. */function rm($fileglob){ if (is_string($fileglob)) { if (is_file($fileglob)) { return unlink($fileglob); } else if (is_dir($fileglob)) { $ok = rm("$fileglob/*"); if (! $ok) { return false; } return rmdir($fileglob); } else { $matching = glob($fileglob); if ($matching === false) { trigger_error(sprintf('No files match supplied glob %s', $fileglob), E_USER_WARNING); return false; } $rcs = array_map('rm', $matching); if (in_array(false, $rcs)) { return false; } } } else if (is_array($fileglob)) { $rcs = array_map('rm', $fileglob); if (in_array(false, $rcs)) { return false; } } else { trigger_error('Param #1 must be filename or glob pattern, or array of filenames or glob patterns', E_USER_ERROR); return false; } return true;}?> Modifié 27 Mars 2006 par anorci
Anonymus Posté 27 Mars 2006 Posté 27 Mars 2006 Le but du Hub n'est pas de faire le travail à ta place, mais de t'aider lorsque tu rencontres des difficultés. Tu as dû essayer au moins une fonction décrite dans la doc : Tu bloques à quel niveau ? Qu'es ce qu'il te manque pour continuer ?
rportal Posté 27 Mars 2006 Posté 27 Mars 2006 (modifié) <?PHP // loc1 is the path on the computer to the base directory that may be moveddefine('loc1', 'C:/Program Files/Apache Group/Apache/htdocs', true); // use this format:$dir = '[reletive path]';if(remdir($dir)) rmdir($dir);else echo 'There was an error.'; // this function deletes all files and sub directories directories in a directory // bool remdir( str 'directory path' )function remdir($dir){ if(!isset($GLOBALS['remerror'])) $GLOBALS['remerror'] = false; if($handle = opendir(loc1 . $dir)){ // if the folder exploration is sucsessful, continue while (false !== ($file = readdir($handle))){ // as long as storing the next file to $file is successful, continue $path = $dir . '/' . $file; if(is_file(loc1 . $path)){ if(!unlink(loc1 . $path)){ echo '<u><font color="red">"' . $path . '" could not be deleted. This may be due to a permissions problem.</u><br>Directory cannot be deleted until all files are deleted.</font><br>'; $GLOBALS['remerror'] = true; return false; } } else if(is_dir(loc1 . $path) && substr($file, 0, 1) != '.'){ remdir($path); _AT_rmdir(loc1 . $path); } } closedir($handle); // close the folder exploration } if(!$GLOBALS['remerror']) // if no errors occured, delete the now empty directory. if(!rmdir(loc1 . $dir)){ echo '<b><font color="red">Could not remove directory "' . $dir . '". This may be due to a permissions problem.</font></b><br>'; return false; } else return true; return false;} // end of remdir()?> La fonction remdir ici presente vide le contenu d'un repertoire et pas le repertoire [mode anglais]C'est plus facile avec[/mode anglais] Modifié 27 Mars 2006 par rportal
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 merci anorci, je vais essayer de me pencher sur ceci. Toutefois, je n'ai jamais travaillé avec les fichiers en php (et cela ne m'interresse pas vraiment). Je suis obligé de passer par des trucs compliqué? Il n'y a pas un moyen de dire en une ligne: "je veux supprimer tout le contenu de tel dossier"?
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 Le but du Hub n'est pas de faire le travail à ta place, mais de t'aider lorsque tu rencontres des difficultés.Tu as dû essayer au moins une fonction décrite dans la doc : Tu bloques à quel niveau ? Qu'es ce qu'il te manque pour continuer ? <{POST_SNAPBACK}> Bien entendu, et je suis toujours le premier à le dire. bien que je n'aime pas travailler avec les fichiers, comme je l'ai dit précédement, je demandais juste un exemple sur la fonction cité, car je ne sais pas bien manier les fichiers avec php (et donc sans exemple c'est difficilement compréhensible). En ce qui concerne le code que l'on m'a donné ici, je vais regarder en détail si l'on me répond qu'il n'y a pas de moyen de faire ce que je souhaite faire avec une fonction existante et simple de php Je précise que le message a destination de mportal n'était pas méchant, je ne vais pas gueuler apres les gens qui m'aident (ou tentent de le faire )
Spidetra Posté 27 Mars 2006 Posté 27 Mars 2006 Dans le bout de code que j'ai copié de la fct unlink a un momment tu as return rmdir($fileglob); met ça en commentaire pour ne pas supprimer le répertoire. Je suis pas sur qu'il y ait de solution miracle. J'ai regardé rapidement sur PEAR sans trouver de package miracle. Dans le mesure ou tu veux supprimmer tout les fichiers, je pense que tu peux simplifier le bout de code ( pas de suppression récursive des sous-répertoire ) : - tu passe en param le nom de ton répertoire - tu prend comme pattern : *.* - tu boucle sur la liste des fichiers - tu fait appel à unlink() - tu teste juste que tes fichiers ne sont pas des répertoires.
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 <?PHPdefine('loc1', '/home/www/zim/site/', true);$dir = '/files/RSS/cache';if(remdir($dir)) rmdir($dir);else echo 'There was an error.';function remdir($dir){ if(!isset($GLOBALS['remerror'])) $GLOBALS['remerror'] = false; if($handle = opendir(loc1 . $dir)){ while (false !== ($file = readdir($handle))){ $path = $dir . '/' . $file; if(is_file(loc1 . $path)){ if(!unlink(loc1 . $path)){ echo '<u><font color="red">"' . $path . '" could not be deleted. This may be due to a permissions problem.</u><br>Directory cannot be deleted until all files are deleted.</font><br>'; $GLOBALS['remerror'] = true; return false; } } else if(is_dir(loc1 . $path) && substr($file, 0, 1) != '.'){ remdir($path); _AT_rmdir(loc1 . $path); } } closedir($handle); } if(!$GLOBALS['remerror']) if(!rmdir(loc1 . $dir)){ echo '<b><font color="red">Could not remove directory "' . $dir . '". This may be due to a permissions problem.</font></b><br>'; return false; } else return true; return false;}/*** Appel de la fonction ***/ remdir($dir)?> c'est bon comme ceci?
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 bon sinon plus simple, car j'me galere trop la, comment supprimer un dossier et tout ce qu'il contient? parce que je cherche compliqué, mais c'est peut etre plus simple?
rportal Posté 27 Mars 2006 Posté 27 Mars 2006 non ce n'est pas plus simple de supprimer un repertoire avec son contenu car pour supprimer un repertoire, il faut qu'il soit vide
rportal Posté 27 Mars 2006 Posté 27 Mars 2006 voici une fonction qui supprime tout... function rm($dir) { if(!$dh = _AT_opendir($dir)) return; while (($obj = readdir($dh))) { if($obj=='.' || $obj=='..') continue; if (!@unlink($dir.'/'.$obj)) rm($dir.'/'.$obj); } _AT_rmdir($dir);}
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 tout? le dossier et ce qu'il contient? Par contre faut pas que je fasse de connerie dans l'initiation de la variable $dir
rportal Posté 27 Mars 2006 Posté 27 Mars 2006 Effectivement quand on supprime quelque chose, il faut toujours faire attention. Mais rassure toi, tu ne peux supprimer que ce que tu as le droit de supprimer... Au pire tout ton site (sauf si tu as une config serveur un peu plus ouverte...). PS: cette fonction supprime le repertoire ainsi que son contenu.
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 Au pire tout ton site Oui hé bien, je vais quand meme faire un backup je suis un gros boulet parfois (tout le temps?!), donc on vas prévenir... Sinon la je suis en train d'essayer une fonction que j'ai trouvé sur le net avant de lire ton précédent message, si ça fonctionne pas j'essayerai la tienne! En tout cas merci @ toi (et aux autres qui ont contribués à m'aider) NDLR: c'est super gonflant les fichiers avec php
zimounet Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 (modifié) Bon (je suis en train de péter un cable avec cette histoire, qui plus est est vraiment ridicule par rapport au reste du truc), j'ai finit pas utiliser ta fonction, seulement ça ne semble avoir aucun effet. Voici le code que j'ai utilisé: function rm($dir) { if(!$dh = _AT_opendir($dir)) return; while (($obj = readdir($dh))) { if($obj=='.' || $obj=='..') continue; if (!@unlink($dir.'/'.$obj)) rm($dir.'/'.$obj); } @rmdir($dir);}//appel de la fonction suppressionecho rm("/cache/"); et aucun effet... $dir doit etre de quel forme? depuis ma home? ou depuis quoi? La, ce script se trouve dans /monsite/rep/ et le dossier a traiter se trouve à /monsite/rep/cache Edit: j'ai mis le chemin depuis ma home et cela fonctionne, et ça supprime bien le dossier cache... nickel merci @ tous! et désolé pour le rafus... Modifié 27 Mars 2006 par zimounet
rportal Posté 28 Mars 2006 Posté 28 Mars 2006 petit point sur les chemins d'acces aux fichiers. si tu utilises un / au début de ton chemin, tu vas écrire un chemin par rapport au document_root de ton serveur web (http://<ton-domaine/) si tu ne commences pas par / , ton chemin sera relatif au repertoire courant appelé par l'url. du coup si tu fais $dir='cache/'; tu références le répertoire cache qui se trouve dans le meme reprtoire que ton script. si tu fais $dir='/cache/'; tu references le repertoire cache qui se trouve dans le repertoire racine de ton serveur web.
Spidetra Posté 28 Mars 2006 Posté 28 Mars 2006 Petite question indiscrète : $dir = '/files/RSS/cache'; Tu essaye de coder un système de cache pour ton site ?
zimounet Posté 29 Mars 2006 Auteur Posté 29 Mars 2006 Non, rien a voir Je viens de finir de coder un truc dont j'ai un peu honte Mais sur le net, et avec des charognes comme di****net, c'est un peu la loi de la jungle. <edit:modérateur. Merci de ne pas montrer du doigt>
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant