Ankündigung

Einklappen
Keine Ankündigung bisher.

unlink kombiniert mit preg_match kombiniert mit for-Schleife

Einklappen

Neue Werbung 2019

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

  • unlink kombiniert mit preg_match kombiniert mit for-Schleife

    Ohmann, ich finde einfach nicht den Fehler...

    Hallo erstmal

    Ich versuche mit schon den ganzen Nachmittag mit meinen PHP-Kenntnissen einen Cronjob zusammenzustückeln, der aus dem Verzeichnis uploaded alle Dateien löscht, die ein bestimmtes Datum im Namen haben.

    Mein Problem:
    Der Code löscht nur die heutigen Bilder: 20100528
    Wenn ich aber in der preg_match-Funktion die Variable $loeschdatum mit beispielsweise "20100527" ersetze, löscht er mir durchaus die gestrigen Bilder.

    Und hier mein Code:
    PHP-Code:
    $speichertage 4;
            
    $d dir("uploaded");
    $heute date(Ymd);
            
    //Löschvorgang ausführen
            
    $loeschdatum $heute;
            
    for (
    $i=0$i<=$speichertage$i++) {

        echo (
    $loeschdatum " ");

        while(
    $file=$d->read()) {
            if (
    preg_match("/"$loeschdatum "/i",$file)) unlink("uploaded/" $file);
        }
        
        
    $loeschdatum--;
                

    Browserausgabe:
    Code:
    2010052820100527201005262010052520100524
    Woran könnte es liegen, dass er mir nicht alle Bilder der letzten 4 Tage löscht?

    Könnte es sein, dass "$file=$d->read()" die Ursache ist? Vielleicht sollte ihc mir meinen Code nicht aus 10 Jahre alten Forenbeiträgen zusammenstückeln...

    Vielen Dank für eure Zeit und Hilfe,
    André

  • #2
    Zitat von Andre86 Beitrag anzeigen
    Könnte es sein, dass "$file=$d->read()" die Ursache ist?
    Ja.

    Vielleicht sollte ihc mir meinen Code nicht aus 10 Jahre alten Forenbeiträgen zusammenstückeln...
    Ebenfalls ja.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Ersetze doch einfach mal das Code-Teilstück mit unlink() durch etwas weniger gefährliches (Dateien zu löschen ist eine Operation, die man hinterher gerne mal bereut), aber dafür Informatives wie bspw. var_dump(). Dann erkennst du besser, wie der Dateiname (inklusive Pfad) ausschaut, den dir dein Script zusammenbastelt.
      Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

      Kommentar


      • #4
        Zitat von fireweasel Beitrag anzeigen
        Ersetze doch einfach mal das Code-Teilstück mit unlink() durch etwas weniger gefährliches (Dateien zu löschen ist eine Operation, die man hinterher gerne mal bereut), aber dafür Informatives wie bspw. var_dump(). Dann erkennst du besser, wie der Dateiname (inklusive Pfad) ausschaut, den dir dein Script zusammenbastelt.
        Stimmt! Vielen Dank.

        Für die Nachwelt: Mein mittlerweile funktionierendes Script sieht folgendermaßen aus:
        PHP-Code:
        $speichertage 5;
        $tagezuloeschen 7;
                
        $heute date(Ymd);
        $loeschdatum $heute $speichertage 1;

        for (
        $i=0$i<=$tagezuloeschen$i++) {
            if (
        $handle opendir('uploaded')) {
                while (
        false !== ($file readdir($handle))) {
                    if (
        $file != "." && $file != "..") {
                        if (
        preg_match("/"$loeschdatum "/i",$file)) {
                                echo 
        "$file\n";
                                
        unlink('uploaded/' $file);
                        }
                    }
                }
                
        closedir($handle);
            }
            
        $loeschdatum--;

        Kommentar


        • #5
          Hi,

          performance Technisch würde ich nicht pro Löschkriterium ("$tagezulöschen") einmal das Verzeichnis durhlaufen sondern einmal das Verzeichnis durchlaufen und jede Datei auf alle Löschkriterien checken!

          Das macht definitiv mehr Sinn!!

          Kommentar


          • #6
            Zitat von Papst Beitrag anzeigen
            Hi,

            performance Technisch würde ich nicht pro Löschkriterium ("$tagezulöschen") einmal das Verzeichnis durhlaufen
            Hi Papst,

            du meinst also
            PHP-Code:
                if ($handle opendir('uploaded')) {
                    for (
            $i=0$i<=$tagezuloeschen$i++) {
                        while (
            false !== ($file readdir($handle))) {
                            if (
            $file != "." && $file != "..") {
                                if (
            preg_match("/"$loeschdatum "/i",$file)) {
                                        echo 
            "$file\n";
                                        
            unlink('uploaded/' $file);
                                }
                            }
                        }
                        
            $loeschdatum--;
                    }
                    
            closedir($handle);
                } 
            Macht Sinn

            Kommentar


            • #7
              Ich denke, er meint:
              PHP-Code:
              if ($handle opendir('uploaded')) {
                while (
              false !== ($file readdir($handle))) {
                  if (
              $file != "." && $file != "..") {
                    
              // delete
                    
              $loeschdatum $heute $speichertage 1
                    for (
              $i=0$i<=$tagezuloeschen$i++) {
                      if (
              preg_match("/"$loeschdatum "/i",$file)) {
                        echo 
              "$file\n";
                        
              unlink('uploaded/' $file);
                      }
                      
              $loeschdatum--;
                    }
                  }    
                }
                
              closedir($handle);

              Gruß
              [URL]http://hallophp.de[/URL]

              Kommentar


              • #8
                Natürlich war mein Script auf den Monatswechsel anfällig, schließlich gibt es kein 20100597

                Hier das verbesserte Script, mit korrekter Datumsberechnung

                PHP-Code:
                    if ($handle opendir('uploaded')) {
                        while (
                false !== ($file readdir($handle))) {
                            if (
                $file != "." && $file != "..") {
                                
                // delete
                                
                $loeschdatum date("Ymd",mktime(1,1,1,date(m),date(d)- $speichertage,date(Y))); 
                                for (
                $i=0$i<=$tagezuloeschen$i++) {
                                    if (
                preg_match("/"$loeschdatum "/i",$file)) {
                                        echo 
                "$file\n";
                                        
                unlink('uploaded/' $file);
                                    }
                                    
                $loeschdatum--;
                                }
                            }    
                        }
                        
                closedir($handle);
                    } 
                Liebe Grüße

                Kommentar

                Lädt...
                X