Supprimer des répertoires contenant des fichiers
Supprimer un répertoire est facile, mais que se passe-t-il lorsque le répertoire contient des fichiers ? La fonction rmdir() échoue s'il y a des fichiers dans le répertoire. Pour supprimer le répertoire, vous devez d'abord supprimer tous les fichiers qu'il contient.
Il existe plusieurs façons de procéder. Une option consiste à utiliser une fonction récursive qui supprime tous les fichiers et dossiers du répertoire, y compris les répertoires imbriqués. Voici un exemple :
function deleteDir(string $dirPath): void { if (! is_dir($dirPath)) { throw new InvalidArgumentException("$dirPath must be a directory"); } if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') { $dirPath .= '/'; } $files = glob($dirPath . '*', GLOB_MARK); foreach ($files as $file) { if (is_dir($file)) { deleteDir($file); } else { unlink($file); } } rmdir($dirPath); }
Alternativement, si vous utilisez PHP 5.2 ou version ultérieure, vous pouvez utiliser un RecursiveIterator pour supprimer le répertoire sans implémenter vous-même la récursion :
function removeDir(string $dir): void { $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS); $files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST); foreach($files as $file) { if ($file->isDir()){ rmdir($file->getPathname()); } else { unlink($file->getPathname()); } } rmdir($dir); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!