Verzeichnisse nach X Tagen löschen

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

  • Verzeichnisse nach X Tagen löschen

    Ich habe viele Verzeichnisse welche von einer Webcam angelegt werden. Alle haben das Format yyyy-mm-dd.
    Deren Bilder werden aus den (ab den da sehr tief verschachtelten Unterordnern) rauskopiert, anderswo abgelegt, nach Datum umbenannt und dem Anzeigescript auf einer Site zvg. gestellt. Diese "Quellordner" sind später unnötig, sollen weg. Dazu habe ich eine rekursive Lösch-Funktion, passt geht auch.

    Nun sollte die Lösch-Funktion nur jene Verzeichnisse löschen die X Tage alt sind.

    Ich habe echt alles probiert, was Google u. vor allem php.net hergibt, aber es funzt nicht!

    Ich möchte an der Stelle auch noch keine Codes zeigen oder Fehler nennen, sondern einfach schauen ob es einen Denkanstoß gibt, ob eine bestimmte Methode oder Funktion empfohlen wird.

    Die Vorgangsweise sollte so sein:
    1. Array mit den Verzeichnisnamen (yyyy-mm-dd) per foreach listen
    2. Differenz zwischen Heute und den, als als Verzeichnisnamen vorliegenden Datum vergleichen
    3. alle welche eine höhere Differenz als X Tage aufweisen
    4. der Löschfunktion zuführen...


    Danke!

  • #2
    Datum erzeugen für X Tage in der Vergangenheit (strtotime/DateTime::sub), ebenfalls als yyyy-mm-dd formatieren – und schon hast du einen Wert, der sich mit größer-gleich/kleiner-gleich „vergleichen“ lässt.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Danke für die Antwort, in der Tat ist das eine gute Idee. Ich habe alle Scripts gelöscht und vorhin neu begonnen - denn manchmal (Wald <> Bäume).

      Dennoch klappte es noch immer nicht, wieder scheine ich eine Kleinigkeit falsch zu machen

      PHP-Code:
      <?php 
      /* dirarray simuliert hier die Verzeichnisnamen */
          
      $dirarray[]="2015-10-01";
          
      $dirarray[]="2015-10-05";
          
      $dirarray[]="2015-10-10";

          foreach(
      $dirarray as $row) {
              
      #echo $row."<br>";
              
      $predatum = new DateTime('2015-10-13');# Normalerweise 'now', zum Test fixes Datum
              
      $predatum->sub(new DateInterval('P10D'));# predatum liegt immer 10 Tage hinter dem aktuellen Datum
              
      $predatum_f $predatum->format('Y-m-d');# echo $predatum_f. "<br>\n";

              # Der Boolsche Vergleich klappt:
              
      var_dump($row $predatum_f);# ist 2015-10-01 kleiner als 2015-10-03? TRUE
                                           # ist 2015-10-05 kleiner als 2015-10-03? FALSE
                                           # ist 2015-10-10 kleiner als 2015-10-03? FALSE

              # Da sollte NUR das EINE Verzeichnis erscheinenen welches kleiner/älter ist - tuts aber nicht, alle sind da...
              
      if($row $predatum) {
                  echo 
      "Verzeichnis-Datum ".$row" ist kleiner/älter als ".$predatum_f."<br>\n";
              }
          }
      ?>
      Die Ausgabe der Abfrage kann so nicht stimmen: Es dürfte nur die Zeile mit den Datum 2015-10-01 da stehen.
      Code:
      bool(true) Verzeichnis-Datum 2015-10-01 ist kleiner/älter als 2015-10-03
      bool(false) Verzeichnis-Datum 2015-10-05 ist kleiner/älter als 2015-10-03
      bool(false) Verzeichnis-Datum 2015-10-10 ist kleiner/älter als 2015-10-03
      Wo ist mein Fehler?

      PS: Viele Antworten auf ähnliche Fragen bez. Datumsberechnungen weisen darauf hin man solle dies doch gleich in der DB erledigen. Da gibts aber keine...

      Kommentar


      • #4
        Passt schon - Fehler gefunden - ich hatte bei der Abfrage if($row < $predatum_f) statt dem formatierten $predatum_f das unformatierte Datumsobjekt ($predatum) verglichen.

        PHP-Code:
         if($row $predatum_f) {
                    echo 
        "Verzeichnis-Datum ".$row" ist kleiner/älter als ".$predatum_f."<br>\n";
                } 
        So passt alles - Danke!

        Kommentar

        Lädt...
        X