Warning: rmdir(..): Directory not empty

Dernière mise à jour le 13 novembre 2009 à 13:54 par marlalapocket
Publié par kilian


Introduction


Lorsque vous tentez d'effacer un dossier en PHP, il peut arriver que vous rencontriez l'erreur suivante:
Warning: rmdir(..): Directory not empty
Eh oui! Vous ne pouvez pas effacer un répertoire avec rmdir si celui-ci n'est pas vide. Il va donc falloir utiliser une fonction composée par vos soins. L'idéal est d'utiliser une fonction récursive qui entre dans le répertoire, le vide puis l'efface. Le fait que cette fonction soit récursive fera en sorte de se rappeler elle-même dans chaque sous-répertoire et ainsi de suite.

Voici à quoi ce genre de fonction peut ressembler:

Le code de la fonction (compatible PHP 5 ou supérieur)


<?

function rmdir_recursive($dir)
{
	//Liste le contenu du répertoire dans un tableau
	$dir_content = scandir($dir);
	//Est-ce bien un répertoire?
	if($dir_content !== FALSE){
		//Pour chaque entrée du répertoire
		foreach ($dir_content as $entry)
		{
			//Raccourcis symboliques sous Unix, on passe
			if(!in_array($entry, array('.','..'))){
				//On retrouve le chemin par rapport au début
				$entry = $dir . '/' . $entry;
				//Cette entrée n'est pas un dossier: on l'efface
				if(!is_dir($entry)){
					unlink($entry);
				}
				//Cette entrée est un dossier, on recommence sur ce dossier
				else{
					rmdir_recursive($entry);
				}
			}
		}
	}
	//On a bien effacé toutes les entrées du dossier, on peut à présent l'effacer
	rmdir($dir);
}
?>

Exemple pour effacer le répertoire "machin"
@rmdir_recursive('machin');
?>

Mise en garde pour la sécurité


Une petite mise en garde: si cette fonction échoue, comme par exemple dans le cas où vous n'avez pas la permission d'effacer un fichier, vous verrez un message d'erreur sur la page web qui risque de donner des renseignements à l'utilisateur sur le contenu de vos répertoires. C'est pourquoi il est préférable de faire précéder l'appel de cette fonction par un arobase pour ne pas afficher les messages d'erreur.
Meilleures réponses pour « Warning: rmdir(..): Directory not empty » dans :
Erreur: xvidcore.dll not found VoirProblème: Vous avez une erreur "xvidcore.dll not found" lorsque vous essayez de lire une vidéo? Il est très facile et rapide de résoudre ce problème, suivez la résolution ci-dessous. Solution: Rendez-vous sur ce lien: http://www.dll...
Phpize: command not found VoirMalgré l'installation de php, lors de l'installation d'une extension pecl, le message suivant apparait: sh: phpize: command not found ERROR: `phpize' failed sous Deiban, la solution se trouve dans l'installation du packet php5-dev qui contient la...
Machine i686-pc-linux not recognized VoirLors de l'installation d'un logiciel sous Debian, après avoir tapé './configure', le système affiche l'erreur suivante : checking build system type... Invalid configuration `i686-pc-linux-oldld': machine `i686-pc-linux' not recognized configure:...
Télécharger Empty Temp Folders VoirAprès seulement quelques jours d’utilisation le PC est déjà encombré par des fichiers temporaires, inutiles mais très volumineux. Il faut à tout prix se débarrasser ces fichiers temporaires pour gagner plus d’espace. Empty Temp Folders...
Active Directory VoirPrésentation de Active Directory Active Directory est le nom du service d'annuaire de Microsoft apparu dans le système d'exploitation Microsoft Windows Server 2000. Le service d'annuaire Active Directory est basé sur les standards TCP/IP : DNS,...
Principes d'Active Directory VoirPrincipe de fonctionnement d'Active Directory Active Directory permet de représenter et de stocker les éléments constitutifs du réseau (les ressources informatiques mais également les utilisateurs) sous formes d'objets, c'est-à-dire un ensemble...