redaxo / redaxo4

REDAXO 4
https://redaxo.org
41 stars 26 forks source link

rex_deleteFiles löscht keine Dateien #384

Closed christophboecker closed 9 years ago

christophboecker commented 9 years ago

Hallo zusammen ich wollte im eigenen Addon die Funktion rex_deleteFiles nutzen und bin erstmal auf die Nase gefallen. Nähere Code-Analyse zeigt dann die Ursache. Anbei die Analyse in einer verkürzten Code-darstellung:: Als Parameter wird ein Verzeichnisname erwartet. Der steht in $file. Das Verzeichnis wird in einer Schleife "while ... readdir()) durchlaufen. Für die jeweils gefundene Datei sollte nun ein "unlink" erfolgen. Passiert aber nicht, der unlink erfolgt auf das Verzeichnis $file, was konsequenterweise schiefgeht.

        $handle = opendir($file);
        while (false !== $filename = readdir($handle)) {
            if (!@ unlink($file)) {
                if ($debug) {
                    echo "Unable to delete file '$file'<br />\n";
                }
                return false;
            }
        }
        closedir($handle);

Der Löschversuch sollte auf $file.DIRECTORY_SEPARATOR.$filename erfolgen. Außerdem muss abgefangen werden, dass in dem Verzeichnis auch Unterverzeichnisse sind (es heißt ja "deleteFiles"), denn bei einem Unterverzeichnis geht unlink ebenfalls auf die Bretter.

Mit dieser Variante klappt es: while (false !== $filename = readdir($handle)) { if ($filename == '.' || $filename == '..') { continue; }

            $file2delete = $file.DIRECTORY_SEPARATOR.$filename;

            if (@ is_dir($file2delete)) continue;

            if (!@ unlink($file2delete)) {
                if ($debug) {
                    echo "Unable to delete file '$file2delete'<br />\n";
                }

                return false;
            }
        }
        closedir($handle);

Ich setze Redaxo 4.6.1. ein.

Viele Grüße Chris