Aller au contenu

Supprimer tous les fichiers d'un dossier


Sujets conseillés

Posté

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?

Posté (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é par zimounet
Posté (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é par zimounet
Posté (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é par anorci
Posté

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é (modifié)

<?PHP

// loc1 is the path on the computer to the base directory that may be moved
define('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é par rportal
Posté

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"?

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

Posté

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.

Posté

<?PHP
define('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?

Posté

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?

Posté

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

Posté

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);
}

Posté

tout? le dossier et ce qu'il contient?

Par contre faut pas que je fasse de connerie dans l'initiation de la variable $dir ^^

Posté

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.

Posté
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 ^^

Posté (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 suppression

echo 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... :blush:

Modifié par zimounet
Posté

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.

Posté

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>

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...