Ankündigung

Einklappen
Keine Ankündigung bisher.

Alle Verzeichnise löschen die..

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Alle Verzeichnise löschen die..

    einen bestimmen anfang haben bsp:

    Ordnerstruktur:
    dir_1
    dir_2
    dir_3
    dir_4

    Das Script soll jetzt einfach alle Ordner löschen die mit "dir" beginnen.

    Was für eine Schlaufe würdet ihr am besten einsetzen?
    Hat jemand einen Codeschnippsel, oder ein Beispiel auf lager?
    Wie man Fragen richtig stellt


  • #2
    Schlaufe hehe.
    Das ganze nennt sich Rekursion. Meistens liest man damit Verzeichnisstämme aus, kannst aber statt auslesen natürlich auch löschen.
    Aber warum möchtest du die löschen, Verzeichnisse löschen kann sehr heikel sein, wenn dir jemand die Variable mit dem zu löschenden Pfad-Muster ändert...

    Kommentar


    • #3
      hm warum, es geht drum das wenn man einen bestimmten user aus der DB löscht alle User die den gleichen "userpreafix"(spalte in der DB) haben auch gelöscht werden (funktioniert auch) jetzt müssen halt alle Ordner gelöscht werden die mit der gleiche Präfix beginnen.

      Ich denke die obere Erklärung reicht aus.. man muss ja nicht is Detail...

      haste vileicht ein codeschnippsel auf Lager das die Verzeichnise Löschen würde? (auch wenn sie voll sind)
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Eigentlich solltest du dann wissen wie die Ordner heißen, hast sie ja schließlich selbst angelegt. Als letzten Hinweis noch: Ich hoffe wenn User 'Peter' sich abmeldet werden nicht auch die Ordner von 'Peter_2' gelöscht.

        OK zum Problem: such einfach nach Rekursion hier in der Forensuche oder in Google "php rekursion verzeichnis auslesen". Statt der Auflistung oder Speicherung der Dateien oder Ordnern löscht du den Ordner einfach. Zum selberbauen brauchste wohl die Funktionen:

        opendir()
        readdir()
        is_dir()
        unlink() // Datei löschen
        rmdir() // "Das Verzeichnis muss leer sein und die relevanten Rechte müssen erteilt sein."
        closedir()

        Kommentar


        • #5
          Guckst du: http://www.phptt.de/showschnipsel.php?kat=15&id=30

          Gruß
          phpfan

          Kommentar


          • #6
            ja ok, wenn ich das jetzt mache, oder den Link von phpfan benutze, wird der ja dann auch gelöscht (noch nicht getestet) mein Problem ist es aber das er einfach mal alle mit dem gleichen Anfang löschen muss, das heisst es muss in etwa so aussehen das er einfach die Löschfunktion jedesmal aufruft und immer mit einem anderen Ende ^o)

            kann man bei pfadangaben sowas wie * benutzen?

            Irgendwie versteht ihr mein Problem nicht ganz...

            ich möchte ja nicht wissen wie ich alle Dateien aus einem Ordner lösche..
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Zitat von dsmcg
              [..] das er einfach mal alle mit dem gleichen Anfang löschen muss, das heisst es muss in etwa so aussehen das er einfach die Löschfunktion jedesmal aufruft und immer mit einem anderen Ende ^o)

              kann man bei pfadangaben sowas wie * benutzen?

              Irgendwie versteht ihr mein Problem nicht ganz...

              ich möchte ja nicht wissen wie ich alle Dateien aus einem Ordner lösche..
              1.) Doch möchtest du wissen, hättest du dir die Mühe gemacht zu lesen, dass Verzeichnisse die man löschen möchte leer sein müssen, wüsstest du das
              2.) Stimmt ich versteh dich nicht, du kannst mit dem Codeschnipsel von phpfan ein bisschen experimentieren und mit den von mir genannten Funktionen ergänzen. Geh einfach logisch durch was die Funktion macht.
              3.) Ganz und garnicht verstehe ich, wieso jemand wie du, der eigentlich keine Ahnung davon hat, mit einer so wichtigen Aufgabe wie dem Löschen von Ordnern (am besten mit Wildcard-Zeichen, dann auch noch rekursiv) beauftragt wird. Diese Wildcards musst du übrigens selbst programmieren.
              4.) Ich hab eh den Eindruck du willst gleich ne Komplettlösung. Die gibts hier nicht!

              Kommentar


              • #8
                also um Dateien aus einem fix bestimmen Ordner zu löschen (und danach auch den Ordner zu löschen habe ich folgendes:
                PHP-Code:
                <?php
                function delDir($dirName) {
                   if(empty(
                $dirName)) {
                       return;
                   }
                   if(
                file_exists($dirName)) {
                       
                $dir dir($dirName);
                       while(
                $file $dir->read()) {
                           if(
                $file != '.' && $file != '..') {
                               if(
                is_dir($dirName.'/'.$file)) {
                                   
                delDir($dirName.'/'.$file);
                               } else {
                                   @
                unlink($dirName.'/'.$file) or die('File '.$dirName.'/'.$file.' couldn\'t be deleted!');
                               }
                           }
                       }
                       @
                rmdir($dirName.'/'.$file) or die('Folder '.$dirName.'/'.$file.' couldn\'t be deleted!');
                   } else {
                       echo 
                'Folder "[b]'.$dirName.'[/b]" doesn\'t exist.';
                   }
                }
                ?>
                Das funktioniert auch, nur leider möchte ich nicht einen fix bestimmten Ordner löschen sondern alle die halt mit etwas fixes beginnne und der hintere Teil "dynamisch" ist und aus der DB gelesen werden kann..
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  um jeden Ordner durchzugehen habe ich jetzt so gelöst:
                  PHP-Code:
                  <?php
                           
                  while($dir readdir($handle)){
                               if(
                  is_dir($dir) && substr($dir,0,3)==$praefix){
                                   
                  //funktionsaufruf
                               
                  }
                           }    

                  ?>
                  trotzdem danke für eure hilfe
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    Na also, du hast ja schon was.
                    Mit regulären Ausdrücken kannst du prüfen, ob ein übergebener Ordnername auf das angegebene Muster passt.

                    Beispiel:
                    PHP-Code:
                    <?php
                    $username 
                    'dsmcg';
                    if (
                    preg_match('/^'.convertRegEx($username).'(.*)$/'$dirName)) {
                      
                    // ordner heißt zum Beispiel 'dsmcgabc' oder 'dsmcg_bilder' ...
                    } else {
                      
                    // ne der Ordner fängt nicht so an
                    }
                    ?>
                    Die Funktion convertRegEx() musst du selber schreiben. Sie müsste jetzt noch alle Zeichen in $username escapen, die reservierte Zeichen bei regulären Ausdrücken sind, also
                    ( ) . - * + / \ [ ] ^ $ ? |
                    mehr fallen mir spontan nicht ein.

                    Vorausgesetzt, diese Zeichen kommen überhaupt in einem Usernamen vor.

                    Kommentar


                    • #11
                      Um alle Verzeichnisse und Dateien zu ermitteln, die mit z.B. Peter anfangen, kannst du wunderbar glob() benutzen.

                      Kommentar


                      • #12
                        joa danke, hatte ich auch versucht, habs jetzt trotzdem anderst gelöst (Ansatz siehe früehere posts)
                        Wie man Fragen richtig stellt

                        Kommentar

                        Lädt...
                        X