PHP: simple pour supprimer un dossier (y compris son contenu)
-
18-09-2019 - |
Question
La fonction rmdir()
échoue si le dossier contient tous les fichiers. Je peux boucle à travers tous les fichiers dans le répertoire avec quelque chose comme ceci:
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') continue;
unlink($dir.DIRECTORY_SEPARATOR.$item);
}
rmdir($dir);
Est-il possible de supprimer juste à la fois?
La solution
Eh bien, il y a toujours
system('/bin/rm -rf ' . escapeshellarg($dir));
le cas échéant.
Autres conseils
rrmdir()
- supprimer récursive 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);
}
}
par cette source ;
Enregistrer un certain temps, si vous voulez nettoyer un répertoire ou le supprimer et vous êtes sur Windows.
Utilisez ceci:
chdir ($file_system_path);
exec ("del *.* /s /q");
Vous pouvez utiliser la syntaxe autre DEL, ou tout autre util shell. Vous devrez peut-être permettre au service d'interagir avec le bureau, comme c'est mon réglage actuel et je ne change pas à tester.
Sinon, vous pouvez trouver une autre méthode ici.
Essayez ceci:
exec('rm -rf '.$user_dir);
auj supprimer 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 );
}
}
Une fonction sûre et bien situé dans les commentaires php par lprent Il empêche la suppression accidentelle contenu des répertoires de liens symboliques situés dans le répertoire courant
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);
}