una txt reemplazar funciona eliminar con como comando carpeta buscar borrar borra archivos archivo php file directory folder

txt - reemplazar archivo php



¿Borrar todos los archivos de una carpeta usando PHP? (16)

Por ejemplo, tenía una carpeta llamada `Temp ''y quería eliminar o limpiar todos los archivos de esta carpeta usando PHP. ¿Podría hacer esto?


Actualicé la respuesta de @Stichoza para eliminar archivos a través de subcarpetas.

function glob_recursive($pattern, $flags = 0) { $fileList = glob($pattern, $flags); foreach (glob(dirname($pattern).''/*'', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) { $subPattern = $dir.''/''.basename($pattern); $subFileList = glob_recursive($subPattern, $flags); $fileList = array_merge($fileList, $subFileList); } return $fileList; } function glob_recursive_unlink($pattern, $flags = 0) { array_map(''unlink'', glob_recursive($pattern, $flags)); }


Aquí hay un enfoque más moderno que utiliza la biblioteca estándar de PHP (SPL) .

$dir = "path/to/directory"; $di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); $ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); foreach ( $ri as $file ) { $file->isDir() ? rmdir($file) : unlink($file); } return true;


Este código de http://php.net/unlink :

/** * Delete a file or recursively delete a directory * * @param string $str Path to file or directory */ function recursiveDelete($str) { if (is_file($str)) { return @unlink($str); } elseif (is_dir($str)) { $scan = glob(rtrim($str,''/'').''/*''); foreach($scan as $index=>$path) { recursiveDelete($path); } return @rmdir($str); } }



La función unlinkr elimina recursivamente todas las carpetas y archivos en una ruta determinada al asegurarse 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 sigue:

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

Si solo quieres eliminar archivos php, llámalo como sigue

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

Puedes usar cualquier otra ruta para borrar los archivos también.

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

Esto eliminará todos los archivos en el directorio home / user / temp.


Otra solución: esta clase elimina todos los archivos, subdirectorios y archivos en los subdirectorios.

class Your_Class_Name { /** * @see http://php.net/manual/de/function.array-map.php * @see http://www.php.net/manual/en/function.rmdir.php * @see http://www.php.net/manual/en/function.glob.php * @see http://php.net/manual/de/function.unlink.php * @param string $path */ public function delete($path) { if (is_dir($path)) { array_map(function($value) { $this->delete($value); rmdir($value); },glob($path . ''/*'', GLOB_ONLYDIR)); array_map(''unlink'', glob($path."/*")); } } }


Para mí, la solución con readdir fue la mejor y funcionó a la readdir . Con glob , la función fallaba en algunos escenarios.

// Remove a directory recursively function removeDirectory($dirPath) { if (! is_dir($dirPath)) { return false; } if (substr($dirPath, strlen($dirPath) - 1, 1) != ''/'') { $dirPath .= ''/''; } if ($handle = opendir($dirPath)) { while (false !== ($sub = readdir($handle))) { if ($sub != "." && $sub != ".." && $sub != "Thumb.db") { $file = $dirPath . $sub; if (is_dir($file)) { removeDirectory($file); } else { unlink($file); } } } closedir($handle); } rmdir($dirPath); }


Publicó una clase de manejo de carpetas y archivos de propósito general para copiar, mover, eliminar, calcular tamaño, etc., que puede manejar un solo archivo o un conjunto de carpetas.

https://gist.github.com/4689551

Usar:

Para copiar (o mover) un solo archivo o un conjunto de carpetas / archivos:

$files = new Files(); $results = $files->copyOrMove(''source/folder/optional-file'', ''target/path'', ''target-file-name-for-single-file.only'', ''copy'');

Eliminar un solo archivo o todos los archivos y carpetas en una ruta:

$files = new Files(); $results = $files->delete(''source/folder/optional-file.name'');

Calcule el tamaño de un solo archivo o un conjunto de archivos en un conjunto de carpetas:

$files = new Files(); $results = $files->calculateSize(''source/folder/optional-file.name'');


Si desea eliminar todo de la carpeta (incluidas las subcarpetas) use esta combinación de array_map , unlink y glob :

array_map(''unlink'', glob("path/to/temp/*"));

Actualizar

Esta llamada también puede manejar directorios vacíos. ¡Gracias por la sugerencia, @mojuba!

array_map(''unlink'', array_filter((array) glob("path/to/temp/*")));


Suponiendo que tiene una carpeta con MUCHOS archivos que los lee todos y luego eliminarlos en dos pasos no es lo que se está realizando. Creo que la forma más eficaz de eliminar archivos es simplemente usar un comando del sistema.

Por ejemplo en linux yo uso:

exec(''rm -f ''. $absolutePathToFolder .''*'');

O esto si quieres una eliminación recursiva sin la necesidad de escribir una función recursiva

exec(''rm -f -r ''. $absolutePathToFolder .''*'');

los mismos comandos exactos existen para cualquier sistema operativo soportado por PHP. Tenga en cuenta que esta es una forma REALIZADA de eliminar archivos. $ absolutePathToFolder DEBE comprobarse y asegurarse antes de ejecutar este código y deben otorgarse los permisos.


Ver readdir y unlink .

<?php if ($handle = opendir(''/path/to/files'')) { echo "Directory handle: $handle/n"; echo "Files:/n"; while (false !== ($file = readdir($handle))) { if( is_file($file) ) { unlink($file); } } closedir($handle); } ?>


<? //delete all files from folder & sub folders function listFolderFiles($dir) { $ffs = scandir($dir); echo ''<ol>''; foreach ($ffs as $ff) { if ($ff != ''.'' && $ff != ''..'') { if (file_exists("$dir/$ff")) { unlink("$dir/$ff"); } echo ''<li>'' . $ff; if (is_dir($dir . ''/'' . $ff)) { listFolderFiles($dir . ''/'' . $ff); } echo ''</li>''; } } echo ''</ol>''; } $arr = array( "folder1", "folder2" ); for ($x = 0; $x < count($arr); $x++) { $mm = $arr[$x]; listFolderFiles($mm); } //end ?>


$dir = ''your/directory/''; foreach(glob($dir.''*.*'') as $v){ unlink($v); }


$files = glob(''path/to/temp/*''); // get all file names foreach($files as $file){ // iterate files if(is_file($file)) unlink($file); // delete file }

Si desea eliminar archivos ''ocultos'' como .htaccess, debe usar

$files = glob(''path/to/temp/{,.}*'', GLOB_BRACE);


foreach (new DirectoryIterator(''/path/to/directory'') as $fileInfo) { if(!$fileInfo->isDot()) { unlink($fileInfo->getPathname()); } }


public static function recursiveDelete($dir) { foreach (new /DirectoryIterator($dir) as $fileInfo) { if (!$fileInfo->isDot()) { if ($fileInfo->isDir()) { recursiveDelete($fileInfo->getPathname()); } else { unlink($fileInfo->getPathname()); } } } rmdir($dir); }