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 forma simple y mejor de eliminar todos los archivos de una carpeta en PHP
$files = glob(''my_folder/*''); //get all file names
foreach($files as $file){
if(is_file($file))
unlink($file); //delete file
}
Obtuve este código fuente desde aquí: http://www.codexworld.com/delete-all-files-from-folder-using-php/
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.
<?
//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);
}