La fonction rmdir()
échoue si le dossier contient des fichiers. Je peux parcourir tous les fichiers du répertoire avec quelque chose comme:
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') continue;
unlink($dir.DIRECTORY_SEPARATOR.$item);
}
rmdir($dir);
Existe-t-il un moyen de tout supprimer en une seule fois?
Eh bien, il y a toujours
system('/bin/rm -rf ' . escapeshellarg($dir));
si disponible.
rrmdir()
- efface récursivement les répertoires:
function rrmdir($dir) {
foreach(glob($dir . '/*') as $file) {
if(is_dir($file)) rrmdir($file); else unlink($file);
} rmdir($dir);
}
function delete_files($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir")
delete_files($dir."/".$object);
else unlink ($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
Selon this source;
Gagnez du temps si vous souhaitez nettoyer un répertoire ou le supprimer et que vous êtes sur Windows.
Utilisez ceci:
chdir ($file_system_path);
exec ("del *.* /s /q");
Vous pouvez utiliser une autre syntaxe DEL, ou tout autre utilitaire Shell . Il se peut que vous deviez autoriser le service à interagir avec le bureau, car c'est mon paramètre actuel et je ne le modifie pas pour le tester.
Sinon, vous pouvez trouver une méthode alternative ici.
Cette fonction supprime le répertoire et tous les sous-répertoires et fichiers:
function DelDir($target) {
if(is_dir($target)) {
$files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned
foreach( $files as $file )
{
DelDir( $file );
}
rmdir( $target );
} elseif(is_file($target)) {
unlink( $target );
}
}
Essaye ça :
exec ('rm -rf'. $ user_dir);
Une fonction sûre et efficace située dans les commentaires php de lprentIl empêche la suppression accidentelle du contenu des répertoires de liens symboliques situés dans le répertoire en cours.
public static function delTree($dir) {
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file) {
(is_dir("$dir/$file") && !is_link($dir)) ? delTree("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}