Dateien löschen

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

  • Dateien löschen

    Hallo,

    ich möchte Dateien aus einem Verzeichnis löschen, die sich nicht mehr in einer Datenbanktabelle befinden.

    Dazu benutze ich folgenden Code:

    PHP-Code:
    mysql_select_db($db,$conn);
    $sql="SELECT foto1, foto2, foto3, foto4, foto5 FROM tblfz";
    $erg=mysql_query($sql,$conn);
    $verz=opendir('../img/fz/gross/');
    $zaehler=0;
    while (
    $Datei=readdir($verz)) {
        if (
    $Datei != "." && $Datei != "..") {
            while(
    $row=mysql_fetch_row($erg)){
                if (
    true != in_array($Datei,$row)){
                      
    print_r($Datei);
                    
    //unlink($Datei);
                      
    $zaehler++;
       }
      }
     }
    }
    echo 
    "Es wurden insgesamt " "$zaehler" Dateien gelöscht"
    Das Problem ist jetzt wahrscheinlich die while-Schleife.

    Bevor die erste while-Schleife zur nächsten Datei springt, muss erst die 2. Schleife mit in_array abgearbeitet werden, um zu püfen ob die Datei aus der ersten while-Schleife auch in der Tabelle enthalten ist ($row).

    Die Werte in den Felder foto1,foto2,foto3,foto4,foto5 bestehen aus dem gleichen String wie die Datei im Verzeichnis,
    also z.B.

    Datei im Verzeichnis: "1543.jpg"
    Feld "foto1" in Tabelle: "1543.jpg"

    Kann mir einer weiterhelfen, wie man diese Schleife macht?

  • #2
    Kannst du nicht die innere while-Schleife vor die äußere machen?

    Du würdest damit erst alles aus der DB auslesen und danach das verzeichnis durchackern
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      imho ein doofer ansatz.

      - lies die bilder aus dem ordner in ein array()
      - lies die bilder aus der db in ein anderes array
      - schau dir array_diff() und/oder array_intersect() an

      es sollte ein array übrig bleiben, das die zu löschenden bilder beinhaltet.
      Kissolino.com

      Kommentar


      • #4
        hab ich dir letztens glob() empfohlen?

        Kommentar


        • #5
          Original geschrieben von penizillin
          hab ich dir letztens glob() empfohlen?
          OffTopic:
          hast du, aber den gewünschten Code hast du nicht nachgeleifert, sondern nur voll der Gehässigkeit was von 40-60 Zeilen Code erzählt und eigenes Denken verlangt.

          Du Schuft...

          Und dann auch noch zur Ferienzeit...
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Hallo,

            es geht mir nur darum, was an der Schleife nicht funktioniert.
            Die anderen Funktionen habe ich schon geprüft.

            Wenn ich z.B. $Datei="1345.jpg" als festen Wert nehme funktioniert es einwandfrei.

            Kann mir denn jemand sagen, ob die erste while-Schleife wartet bis die 2. while-Schleife fertig ist.

            Wenn das so wäre müsste es ja funktionieren.

            Oder gibt es eine andere Möglichkeit.

            Kommentar


            • #7
              wenn du es richtig formulierst:

              die äußere schleife wartet mit dem zweiten durchlauf, bis der erste durchlauf (und damit auch die innere schleife) beendet ist.

              alles andere wäre unsinn.

              Kommentar


              • #8
                Hallo,

                ja so muss es sein.

                Aber warum funktioniert dann der oben angegebene Code nicht.

                Wenn ich die erste Schleife weglasse und bei
                in_array einen festen Wert eingebe z.B.

                PHP-Code:
                $Datei="1345.jpg";
                if (
                true != in_array($Datei,$row)){
                print_r($Datei);
                  
                funktioniert es einwandfrei
                Oder liegt es vielleicht doch an der Funktion readdir()

                Vielleicht kannst du mir weiterhelfen.

                Gruss Klaus

                Kommentar


                • #9
                  lass dir mal $row mit print_r() am anfang der 2. schleife ausgeben und zeig mal hier.

                  Kommentar


                  • #10
                    Hallo,
                    PHP-Code:
                    mysql_select_db($db,$conn);
                    $sql="SELECT foto1, foto2, foto3, foto4, foto5 FROM tblfz";
                    $erg=mysql_query($sql,$conn);
                    $verz=opendir('../img/fz/gross/');
                    $Pfad='../img/fz/gross/';

                    $zaehler=0;
                    while (
                    $Datei=readdir($verz)) {
                        if (
                    $Datei != "." && $Datei != "..") {
                            
                    //echo "$Datei<br>";
                            
                    while($row=mysql_fetch_row($erg)){
                              
                    print_r($row);
                                if (
                    true == in_array($Datei,$row)){
                                     
                    //unlink(Pfad.$Datei);
                                          
                    $zaehler++;
                        }
                      }
                     }
                    }
                    echo 
                    "Es wurden insgesamt " "$zaehler" Dateien gelöscht"
                    Ausgabe:

                    kannst du dir ansehen unter:

                    www.auto-mergen.de/test/loesch_foto.php


                    Gruss Klaus

                    Kommentar


                    • #11
                      ich werde in der hölle schmoren.

                      PHP-Code:
                      $sql="SELECT foto1, foto2, foto3, foto4, foto5 FROM tblfz";
                      $erg=mysql_query($sql,$conn);

                      $i 0;
                      $alle_fotos_aus_db = array();

                      while(
                      $row=mysql_fetch_row($erg))
                      {
                          foreach(
                      $row as $dateiname)
                          {
                              if(!
                      in_array($dateiname$alle_fotos_aus_db))
                                  
                      $alle_fotos_aus_db[] = $dateiname;
                          }
                      }

                      $alle_dateien_im_ordner glob('../img/fz/gross/');

                      foreach(
                      $alle_dateien_im_ordner as $aktuelle_datei)
                      {
                          if(!
                      in_array($aktuelle_datei$alle_fotos_aus_db))
                          {
                              echo 
                      'zu löschen: '.$aktuelle_datei.' <br />';
                              
                      $i++;
                          }
                      }

                      echo 
                      "es wurden insgesamt " $i " dateien zum tode verurteilt"
                      Zuletzt geändert von penizillin; 10.08.2005, 18:31.

                      Kommentar


                      • #12
                        ich werde in der hölle schmoren.
                        Japp!

                        Kommentar


                        • #13
                          Hallo,

                          vielen Dank für deine echte Mühe.

                          Aber irgendwas funktioniert noch nicht.

                          Ich bekomme als Ausgabe:

                          zu löschen: ../img/fz/gross/
                          es wurden insgesamt 1 dateien zum tode verurteilt

                          Es müssten aber ca. 350 Dateien gelöscht werden.

                          Ich kann den Fehler nicht finden, da ich mich mit den Funktionen in deinem Script nicht so recht klar komme.

                          Kannst du mir nochmal Hilfestellung geben.

                          Gruss Klaus

                          Ps: Hab mir nochmal das glob(array) angesehen und festgeatellt das der Wert aus Dateipfad und Datei besteht.

                          Im db-Feld steht aber nur die Datei. Kann es daran liegen.
                          Zuletzt geändert von kmergen; 10.08.2005, 19:22.

                          Kommentar


                          • #14
                            ja.

                            Kommentar


                            • #15
                              Hallo,

                              ich bin jezt schon 2 Stunden am versuchen bekomme es aber nicht hin.

                              Kannst du mir helfen

                              Gruss Klaus

                              Kommentar

                              Lädt...
                              X