Kann Ordner nicht ohne Fehlermeldung löschen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Kann Ordner nicht ohne Fehlermeldung löschen

    Ich versuche einen zuvor erstellten Ordner mit PHP zu löschen. Allerdings klappt das nicht so recht.
    Der Ordner ist so aufgebaut:
    Hauptordner = Unterordner "thumbs" + Bilder
    Thumb-Ordner = Thumbnail-Bilder

    Ich gehe so vor, dass ich erst die Bilder aus Thumb-Ordner und Hauptordner lösche (Zeile 14 + 17). Dann "versuche" ich die Ordner zu löschen (Zeile 22 + 24).
    Mit der if-Abfrage is_dir(), ob der Ordner noch existiert, macht er es nicht! Ohne die if-Abfrage schon - nur gibt er dann eine Fehlemeldung aus: "Warning: rmdir..... directory not empty" blalblabla aus! :huh:
    Also ich blicks nicht....

    Quellcode

    1. $sql = "SELECT * FROM gallery_pics WHERE insert_id='".$_GET['deldataultimately']."'";
    2. $result = mysql_query($sql, $connection);
    3. while($row = mysql_fetch_object($result))
    4. {
    5. if(isset($row->file))
    6. {
    7. $trash = strrchr($row->file, "_");
    8. $trash = strlen($trash);
    9. $folder = substr($row->file, 0, -($trash));
    10. echo $folder."<br />";
    11. //l&ouml;sche gro&szlig;es Bild
    12. unlink("gallery_files/".$folder."/".$row->file);
    13. //l&ouml;sche Thumb-Datei
    14. unlink("gallery_files/".$folder."/thumbs/".basename($row->file, ".jpg")."_thumb.jpg");
    15. if(is_dir("gallery_files/".$folder))
    16. {
    17. rmdir("gallery_files/".$folder."/thumbs");
    18. rmdir("gallery_files/".$folder);
    19. }
    20. //l&ouml;scht Datensatz in MySQL in Tabelle 'gallery'
    21. $sql = "DELETE FROM gallery WHERE id='".$_GET['deldataultimately']."'";
    22. mysql_query($sql, $connection);
    23. //l&ouml;scht Datensatz in MySQL in Tabelle 'gallery_pics'
    24. $sql2 = "DELETE FROM gallery_pics WHERE insert_id='".$_GET['deldataultimately']."'";
    25. mysql_query($sql2, $connection);
    26. /* header("Location:http://localhost/adminbereich/gallery_summary.php");
    27. exit();*/
    28. }
    29. }
    Alles anzeigen

    hat einer ne Idee?
  • Vorsicht, dein Code ist anfällig für SQL INjections! Mit folgendem Parameter wird alles gelöscht.
    ?deldataultimately="' OR insert_id > 0"

    Zu deinem anderen Problem:
    In deinem Code stellst du doch gar nicht sicher, dass wirklich alle Dateien gelöscht sind?

    Hier mal eine moderne Variante zum rekursiven Löschen:

    Quellcode

    1. function deletePath($path) {
    2. $dir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
    3. for ($dir->rewind(); $dir->valid(); $dir->next()) {
    4. if ($dir->isDir()) {
    5. rmdir($dir->getPathname());
    6. } else {
    7. unlink($dir->getPathname());
    8. }
    9. }
    10. rmdir($path);
    11. }
    Alles anzeigen
  • @d0nut

    bezüglich SQL-Injection: ok... da hast du mich kalt erwischt :rolleyes: kümmere ich mich dann drum.

    Bezüglich dieser Funktion über rekursives löschen: muss ich das $path einfach durch mein $folder ersetzen und dann die Funktion aufrufen?
    $folder ist bei mir ja der Pfad zum Ordner (inkl. aller Dateien darin), der gelöscht werden soll.
    Hatte mit Funktionen bisher gar nichts am Hut...