effacer tous les fichiers d'un dossier

Eléphanteau du PHP | 22 Messages

02 avr. 2016, 20:36

Bonjour

J'ai un dossier contenant des images de noms differents et d'extensions
differentes comment vider ce dossier

j'ai essayé ceci trouve sur le net et ça tourne en boucle
jusqu'a me donner l'erreur delai 30 secondes d'execution dépassé

Code : Tout sélectionner

<?php $dossier_traite = "ROOT.'data/dossier/'.$nom.'/'"; $repertoire = opendir($dossier_traite); // On définit le répertoire 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);

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 avr. 2016, 10:20

Bonjour,

Si tu as beaucoup de fichiers, c'est peut être normal que ça dépasse les 30 secondes... Dans ce cas, il faut que tu utilises la fonction set_time_limit() pour augmenter la durée d'exécution (attention à ne pas la désactiver, c'est une protection utile en cas de bug de code).

Personnellement je préfère manipuler les liste de fichiers avec la fonction glob() dans un foreach()
Regarde dans la doc php sur la fonction glob, tu as un exemple qui liste les fichiers, ça te permet de vérifier qu'il liste bien bien tous les fichiers à supprimer, et tu n'auras qu'à ajouter ensuite ton unlink()

http://www.php.net/glob
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 22 Messages

03 avr. 2016, 18:30

merci @rtur

j'ai fais ça mais ça marche pas

Code : Tout sélectionner

$uploaddir = PLX_ROOT.'data/avatars/base/'; // si le fichier est bien une image $extension=pathinfo($_FILES['avatar']['name'],PATHINFO_EXTENSION); if (stripos('.png.jpg.jpeg.gif',$extension)!==false){ $uploadfile = $uploaddir.$nom.'.'.$extension; // supprime tout avatar précédent $listavatar=glob($uploadfile); foreach($listavatar as $avatar){unlink($avatar);}
merci d'avance

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 avr. 2016, 21:13

Bah reprend l'exemple de la doc (qui fonctionne) et avance progressivement jusqu'à trouver à quel moment tu fais quelque chose qui ne le fait plus fonctionner, c'est la meilleure façon de débuguer
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 22 Messages

03 avr. 2016, 23:03

ok merci
je teste dans la semaine et je verrai

a+

Eléphanteau du PHP | 22 Messages

04 avr. 2016, 00:48

J'ai fais ça sans plus de succès :

Code : Tout sélectionner

$extension = array('jpg,jpeg,png,gif'); foreach ($extension as $files) { unlink (ROOT.'data/avatar/base/'.$nom.'.'.$files); }

pas de message d'erreur mais rien n'est effacé


merci pour une aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

04 avr. 2016, 09:37

Comme je te l'ai indiqué précédemment, ne fait pas un unlink mais d'abord un echo de la liste des fichiers et vérifie que tu obtiennes bien la liste des fichiers à supprimer.

Par ailleurs dans ton dernier code, tu n'as même pas de fonction glob()... comment veux tu que ça donne quoi que ce soit ?
Quand tout le reste a échoué, lisez le mode d'emploi...