369 Stimmen

Löschen aller Dateien aus einem Ordner mit PHP?

Ich hatte zum Beispiel einen Ordner mit dem Namen "Temp" und wollte alle Dateien aus diesem Ordner mit PHP löschen oder leeren. Kann ich das tun?

4voto

tommy Punkte 66

Eine andere Lösung: Diese Klasse löscht alle Dateien, Unterverzeichnisse und Dateien in den Unterverzeichnissen.

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."/*"));
        }
    }
}

3voto

AmyStephen Punkte 41

Posted eine allgemeine Datei- und Ordnerbehandlungsklasse zum Kopieren, Verschieben, Löschen, Berechnen der Größe usw., die eine einzelne Datei oder einen Satz von Ordnern behandeln kann.

https://gist.github.com/4689551

Zu verwenden:

Zum Kopieren (oder Verschieben) einer einzelnen Datei oder einer Gruppe von Ordnern/Dateien:

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

Löschen Sie eine einzelne Datei oder alle Dateien und Ordner in einem Pfad:

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

Berechnen Sie die Größe einer einzelnen Datei oder einer Gruppe von Dateien in einer Gruppe von Ordnern:

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

1voto

user5579724 Punkte 11
 <?
//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
?>

1voto

Für mich ist die Lösung mit readdir war am besten und funktionierte wie ein Zauber. Mit glob Bei einigen Szenarien schlug die Funktion fehl.

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

1voto

Mehmet Punkte 111
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);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X