una txt subidos subcarpetas listar funciona eliminar contenido contar con como carpeta borrar archivos archivo php recursion delete-directory

txt - ¿Cómo elimino recursivamente un directorio y todo su contenido(archivos+subdirectorios) en PHP?



eliminar todo el contenido de una carpeta c# (18)

¿Cómo elimino un directorio y todo su contenido (archivos y subdirectorios) en PHP?


¿Algo como esto?

function delete_folder($folder) { $glob = glob($folder); foreach ($glob as $g) { if (!is_dir($g)) { unlink($g); } else { delete_folder("$g/*"); rmdir($g); } } }


Creo que hice este código a partir de algunas discusiones de . No probé en el entorno Linux todavía. Está hecho para eliminar un archivo o un directorio, completamente:

function splRm(SplFileInfo $i) { $path = $i->getRealPath(); if ($i->isDir()) { echo ''D - '' . $path . ''<br />''; rmdir($path); } elseif($i->isFile()) { echo ''F - '' . $path . ''<br />''; unlink($path); } } function splRrm(SplFileInfo $j) { $path = $j->getRealPath(); if ($j->isDir()) { $rdi = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS); $rii = new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::CHILD_FIRST); foreach ($rii as $i) { splRm($i); } } splRm($j); } splRrm(new SplFileInfo(__DIR__.''/../dirOrFileName''));


Ejemplo con la función glob() . Eliminará todos los archivos y carpetas recursivamente, incluidos los archivos que comienzan con punto.

delete_all( ''folder'' ); function delete_all( $item ) { if ( is_dir( $item ) ) { array_map( ''delete_all'', array_diff( glob( "$item/{,.}*", GLOB_BRACE ), array( "$item/.", "$item/.." ) ) ); rmdir( $item ); } else { unlink( $item ); } };


Elimina todos los archivos y carpetas en la ruta.

function recurseRmdir($dir) { $files = array_diff(scandir($dir), array(''.'',''..'')); foreach ($files as $file) { (is_dir("$dir/$file")) ? recurseRmdir("$dir/$file") : unlink("$dir/$file"); } return rmdir($dir); }



La función unlinkr elimina de forma recursiva todas las carpetas y archivos en una ruta determinada, asegurándose de que no elimine el script en sí.

function unlinkr($dir, $pattern = "*") { // find all files and folders matching pattern $files = glob($dir . "/$pattern"); //interate thorugh the files and folders foreach($files as $file){ //if it is a directory then re-call unlinkr function to delete files inside this directory if (is_dir($file) and !in_array($file, array(''..'', ''.''))) { echo "<p>opening directory $file </p>"; unlinkr($file, $pattern); //remove the directory itself echo "<p> deleting directory $file </p>"; rmdir($file); } else if(is_file($file) and ($file != __FILE__)) { // make sure you don''t delete the current script echo "<p>deleting file $file </p>"; unlink($file); } } }

Si desea eliminar todos los archivos y carpetas donde coloca este script, llámelo como se muestra a continuación.

//get current working directory $dir = getcwd(); unlinkr($dir);

si solo quieres eliminar solo los archivos php, llámalo como sigue

unlinkr($dir, "*.php");

puede usar cualquier otra ruta para eliminar los archivos también

unlinkr("/home/user/temp");

Esto eliminará todos los archivos en el directorio de inicio / usuario / temp.


Para * nix puede usar un shell_exec para rm -R o DEL /S folder_name para Windows.


Sobre la base del comentario del Desarrollador de Pixel , un fragmento que usa el SPL podría verse así:

$files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST ); foreach ($files as $fileinfo) { $todo = ($fileinfo->isDir() ? ''rmdir'' : ''unlink''); $todo($fileinfo->getRealPath()); } rmdir($dir);

Nota: No hace ninguna comprobación de cordura y hace uso del indicador SKIP_DOTS introducido con el FilesystemIterator en PHP 5.3.0. Por supuesto, $todo podría ser un if / else . El punto importante es que CHILD_FIRST se usa para iterar sobre los elementos CHILD_FIRST (archivos) primero antes de su elemento principal (carpetas).


Solución mejorada de @Artefacto: errores ortográficos corregidos y código simplificado, que funciona para ambos: directorios vacíos y no vacíos.

function recursive_rmdir($dir) { if( is_dir($dir) ) { $objects = array_diff( scandir($dir), array(''..'', ''.'') ); foreach ($objects as $object) { $objectPath = $dir."/".$object; if( is_dir($objectPath) ) recursive_rmdir($objectPath); else unlink($objectPath); } rmdir($dir); } }


Una vez que termine de ejecutar las pruebas, solo elimine # de #unlink y #rmdir en la clase.

<?php class RMRFiles { function __construct(){ } public function recScan( $mainDir, $allData = array() ) { // hide files $hidefiles = array( ".", "..") ; //start reading directory $dirContent = scandir( $mainDir ) ; //cycle through foreach ( $dirContent as $key => $content ) { $path = $mainDir . ''/'' . $content ; // if is readable / file if ( ! in_array( $content, $hidefiles ) ) { if ( is_file( $path ) && is_readable( $path ) ) { #delete files within directory #unlink($path); $allData[''unlink''][] = $path ; } // if is readable / directory else if ( is_dir( $path ) && is_readable( $path ) ) { /*recursive*/ $allData = $this->recScan( $path, $allData ) ; #finally remove directory $allData[''rmdir''][]=$path; #rmdir($path); } } } return $allData ; } } header("Content-Type: text/plain"); /* Get absolute path of the running script Ex : /home/user/public_html/ */ define(''ABPATH'', dirname(__file__) . ''/''); /* The folder where we store cache files Ex: /home/user/public_html/var/cache */ define(''STOREDIR'',''var/cache''); $rmrf = new RMRFiles(); #here we delete folder content files & directories print_r($rmrf->recScan(ABPATH.STOREDIR)); #finally delete scanned directory ? #rmdir(ABPATH.STOREDIR); ?>


Variante modificada de la solución @XzaR. Quita carpetas vacías, cuando todos los archivos se eliminan de ellos y arroja excepciones en lugar de devolver errores falsos.

function recursivelyRemoveDirectory($source, $removeOnlyChildren = true) { if (empty($source) || file_exists($source) === false) { throw new Exception("File does not exist: ''$source''"); } if (is_file($source) || is_link($source)) { if (false === unlink($source)) { throw new Exception("Cannot delete file ''$source''"); } } $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST ); foreach ($files as $fileInfo) { /** @var SplFileInfo $fileInfo */ if ($fileInfo->isDir()) { if ($this->recursivelyRemoveDirectory($fileInfo->getRealPath()) === false) { throw new Exception("Failed to remove directory ''{$fileInfo->getRealPath()}''"); } if (false === rmdir($fileInfo->getRealPath())) { throw new Exception("Failed to remove empty directory ''{$fileInfo->getRealPath()}''"); } } else { if (unlink($fileInfo->getRealPath()) === false) { throw new Exception("Failed to remove file ''{$fileInfo->getRealPath()}''"); } } } if ($removeOnlyChildren === false) { if (false === rmdir($source)) { throw new Exception("Cannot remove directory ''$source''"); } } }


Yo uso este código ...

function rmDirectory($dir) { foreach(glob($dir . ''/*'') as $file) { if(is_dir($file)) rrmdir($file); else unlink($file); } rmdir($dir); }

o este...

<?php public static function delTree($dir) { $files = array_diff(scandir($dir), array(''.'',''..'')); foreach ($files as $file) { (is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file"); } return rmdir($dir); } ?>


código ''simple'' que funciona y puede ser leído por un niño de diez años:

function deleteNonEmptyDir($dir) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($dir . "/" . $object) == "dir") { deleteNonEmptyDir($dir . "/" . $object); } else { unlink($dir . "/" . $object); } } } reset($objects); rmdir($dir); } }

Tenga en cuenta que todo lo que hice fue expandir / simplificar y corregir (no funcionó para un directorio no vacío) la solución aquí: en PHP, ¿cómo elimino de manera recursiva todas las carpetas que no están vacías?


¿Has probado la primera nota en la página de manual de rmdir ?

function rrmdir($dir) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (is_dir($dir."/".$object)) rrmdir($dir."/".$object); else unlink($dir."/".$object); } } rmdir($dir); } }


<?php /** * code by Nk ([email protected]) */ class filesystem { public static function remove($path) { return is_dir($path) ? rmdir($path) : unlink($path); } public static function normalizePath($path) { return $path.(is_dir($path) && !preg_match(''@/$@'', $path) ? ''/'' : ''''); } public static function rscandir($dir, $sort = SCANDIR_SORT_ASCENDING) { $results = array(); if(!is_dir($dir)) return $results; $dir = self::normalizePath($dir); $objects = scandir($dir, $sort); foreach($objects as $object) if($object != ''.'' && $object != ''..'') { if(is_dir($dir.$object)) $results = array_merge($results, self::rscandir($dir.$object, $sort)); else array_push($results, $dir.$object); } array_push($results, $dir); return $results; } public static function rrmdir($dir) { $files = self::rscandir($dir); foreach($files as $file) self::remove($file); return !file_exists($dir); } } ?>

cleanup.php:

<?php /* include.. */ filesystem::rrmdir(''/var/log''); filesystem::rrmdir(''./cache''); ?>


<?php use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use SplFileInfo; # http://.com/a/3352564/283851 # https://gist.github.com/XzaR90/48c6b615be12fa765898 # Forked from https://gist.github.com/mindplay-dk/a4aad91f5a4f1283a5e2 /** * Recursively delete a directory and all of it''s contents - e.g.the equivalent of `rm -r` on the command-line. * Consistent with `rmdir()` and `unlink()`, an E_WARNING level error will be generated on failure. * * @param string $source absolute path to directory or file to delete. * @param bool $removeOnlyChildren set to true will only remove content inside directory. * * @return bool true on success; false on failure */ function rrmdir($source, $removeOnlyChildren = false) { if(empty($source) || file_exists($source) === false) { return false; } if(is_file($source) || is_link($source)) { return unlink($source); } $files = new RecursiveIteratorIterator ( new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST ); //$fileinfo as SplFileInfo foreach($files as $fileinfo) { if($fileinfo->isDir()) { if(rrmdir($fileinfo->getRealPath()) === false) { return false; } } else { if(unlink($fileinfo->getRealPath()) === false) { return false; } } } if($removeOnlyChildren === false) { return rmdir($source); } return true; }


function deltree_cat($folder) { if (is_dir($folder)) { $handle = opendir($folder); while ($subfile = readdir($handle)) { if ($subfile == ''.'' or $subfile == ''..'') continue; if (is_file($subfile)) unlink("{$folder}/{$subfile}"); else deltree_cat("{$folder}/{$subfile}"); } closedir($handle); rmdir ($folder); } else { unlink($folder); } }


function rmdir_recursive( $dirname ) { /** * FilesystemIterator and SKIP_DOTS */ if ( class_exists( ''FilesystemIterator'' ) && defined( ''FilesystemIterator::SKIP_DOTS'' ) ) { if ( !is_dir( $dirname ) ) { return false; } foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dirname, FilesystemIterator::SKIP_DOTS ), RecursiveIteratorIterator::CHILD_FIRST ) as $path ) { $path->isDir() ? rmdir( $path->getPathname() ) : unlink( $path->getRealPath() ); } return rmdir( $dirname ); } /** * RecursiveDirectoryIterator and SKIP_DOTS */ if ( class_exists( ''RecursiveDirectoryIterator'' ) && defined( ''RecursiveDirectoryIterator::SKIP_DOTS'' ) ) { if ( !is_dir( $dirname ) ) { return false; } foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dirname, RecursiveDirectoryIterator::SKIP_DOTS ), RecursiveIteratorIterator::CHILD_FIRST ) as $path ) { $path->isDir() ? rmdir( $path->getPathname() ) : unlink( $path->getRealPath() ); } return rmdir( $dirname ); } /** * RecursiveIteratorIterator and RecursiveDirectoryIterator */ if ( class_exists( ''RecursiveIteratorIterator'' ) && class_exists( ''RecursiveDirectoryIterator'' ) ) { if ( !is_dir( $dirname ) ) { return false; } foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dirname ), RecursiveIteratorIterator::CHILD_FIRST ) as $path ) { if ( in_array( $path->getFilename(), array( ''.'', ''..'' ) ) ) { continue; } $path->isDir() ? rmdir( $path->getPathname() ) : unlink( $path->getRealPath() ); } return rmdir( $dirname ); } /** * Scandir Recursive */ if ( !is_dir( $dirname ) ) { return false; } $objects = scandir( $dirname ); foreach ( $objects as $object ) { if ( $object === ''.'' || $object === ''..'' ) { continue; } filetype( $dirname . DIRECTORY_SEPARATOR . $object ) === ''dir'' ? rmdir_recursive( $dirname . DIRECTORY_SEPARATOR . $object ) : unlink( $dirname . DIRECTORY_SEPARATOR . $object ); } reset( $objects ); rmdir( $dirname ); return !is_dir( $dirname ); }