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?
Antworten
Zu viele Anzeigen?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."/*"));
}
}
}
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');
<?
//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
?>
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);
}