Удалить все файлы из папки с помощью PHP? - PullRequest
278 голосов
/ 04 января 2011

Например, у меня была папка с именем «Temp», и я хотел удалить или очистить все файлы из этой папки, используя PHP.Могу ли я сделать это?

Ответы [ 17 ]

4 голосов
/ 20 ноября 2015

Функция unlinkr рекурсивно удаляет все папки и файлы по указанному пути, следя за тем, чтобы не удалять сам сценарий.

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); 
        }
    }
}

, если вы хотите удалить все файлы и папки, в которые вы помещаете этот сценарийзатем назовите его следующим образом

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

, если вы хотите просто удалить только php-файлы, затем назовите его следующим образом

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

, вы также можете использовать любой другой путь для удаления файлов

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

Это удалит все файлы в каталоге home / user / temp.

3 голосов
/ 01 февраля 2013

Опубликован класс обработки файлов и папок общего назначения для копирования, перемещения, удаления, вычисления размера и т. Д., Который может обрабатывать один файл или набор папок.

https://gist.github.com/4689551

Для использования:

Для копирования (или перемещения) отдельного файла или набора папок / файлов:

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

Удалить один файл или все файлы и папки в пути:

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

Рассчитать размер отдельного файла или набора файлов в наборе папок:

$files = new Files();
$results = $files->calculateSize('source/folder/optional-file.name');
1 голос
/ 16 февраля 2018

Для меня решение с readdir было лучшим и работало как шарм.При glob функция не выполнялась в некоторых сценариях.

// 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);
}
1 голос
/ 19 ноября 2015
 <?
//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
?> 
0 голосов
/ 25 января 2019

Есть пакет под названием "Pusheh". Используя его, вы можете очистить каталог или полностью удалить каталог ( Github link ). Это доступно на Packagist , также.

Например, если вы хотите очистить каталог Temp, вы можете сделать:

Pusheh::clearDir("Temp");

// Or you can remove the directory completely
Pusheh::removeDirRecursively("Temp");

Если вам интересно, см. вики .

0 голосов
/ 29 октября 2018
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);
}
0 голосов
/ 17 октября 2014

Я обновил ответ @Stichoza для удаления файлов через подпапки.

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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...