Comment supprimer le contenu d'un répertoire en PHP ?

Réponses rédigées par Antoine
Dernière mise à jour : 2020-12-03 14:42:54
Question

Comment faire pour supprimer le contenu d'un répertoire en PHP ?

Réponse

Pour supprimer le contenu d'un répertoire, en PHP, tout en supprimant uniquement les fichiers, mais pas les sous-dossiers, ni leurs contenus, vous pouvez procédez comme suit :

  • Récupérer les chemins d'accès vers tous les fichiers via la fonction PHP glob().
  • Parcourir la liste des fichiers avec une boucle foreach.
  • Vérifier si les fichiers sont valides avec la fonction is_file().
  • Supprimer les fichiers via la fonction unlink().

Exemple de script PHP pour supprimer uniquement les fichiers contenus dans un répertoire :

<?php 
$repertoire = "test"; 
$fichiers = glob($repertoire.'/*');  
foreach($fichiers as $fichier) 
{ 
if(is_file($fichier))
{
unlink($fichier);
} 
}
?>
Réponse

Si vous voulez supprimer tous les fichiers du répertoire et de ses sous-répertoires, sans supprimer l'arborescence des dossiers, en PHP, procédez comme suit :

<?php 
$repertoire = "test/"; 
$repertoire = new RecursiveDirectoryIterator($repertoire, FilesystemIterator::SKIP_DOTS); 
$repertoire = new RecursiveIteratorIterator($repertoire, RecursiveIteratorIterator::CHILD_FIRST); 
foreach ($repertoire as $fichier) 
{ 
if (!is_dir($fichier))
{
unlink($fichier);
}
} 
?> 

Et si vous voulez supprimer tout le contenu du répertoire, sans aucune distinction :

<?php 
$repertoire = "test/"; 
$repertoire = new RecursiveDirectoryIterator($repertoire, FilesystemIterator::SKIP_DOTS); 
$repertoire = new RecursiveIteratorIterator($repertoire, RecursiveIteratorIterator::CHILD_FIRST); 
foreach ($repertoire as $fichier) 
{ 
if (is_dir($fichier))
{
rmdir($fichier);
}
else if (!is_dir($fichier))
{
unlink($fichier);
}
} 
?>