datenbankler: Skript zum alte Dateien löschen funzt auf einmal nicht mehr.

Hi ich hab folgendes Skript:
----------------------------------------------------------------------

$verzeichnis = "./upload"; //Verzeichnis welches bereinigt werden soll
$handle = opendir($verzeichnis);
$laufzeit = (86400*71); // (86400 == 1Tag) Gibt an wie alt die Datei in Sekunden im Verzeichnis sein darf bevor sie gelöscht wird.
$time = time();
$anzahl = 0;

// Das ist der korrekte Weg, ein Verzeichnis zu durchlaufen.
    while (false !== ($file = readdir($handle)))
{
        $dateialter = filectime  ("$verzeichnis/$file");
if ($file != "." && $file != "..") // "." und ".." ignorieren
             {
if (($time - $dateialter)>$laufzeit) // alter der Datei prüfen
{
unlink("$verzeichnis/$file");
$anzahl++;
}
}
    }
closedir($handle);
----------------------------------------------------------------------

Das Skript soll ein Verzeichnis öffnen und alle Dateien löschen die älter sind als 71 Tage. Das Skript hat jetzt fast 1Jahr problemlos funktioniert. Doch seit dem 01.04 werden die Dateien nicht gelöscht.

Jetzt weiß ich nicht was los ist. Kann es sein das irgendeine Funktion eine Art Timeout bekommt, weil in dem Ordner sind über 30.000 Dateien drin. Mein FTP Client braucht über 30 Sek. die 2,7 MB große Dateinamenliste zu laden.

Hat jemand ne Idee?
Vielen Dank im voraus.

  1. Hello,

    $verzeichnis = "./upload"; //Verzeichnis welches bereinigt werden soll
    $handle = opendir($verzeichnis);
    $laufzeit = (86400*71); // (86400 == 1Tag) Gibt an wie alt die Datei in Sekunden im Verzeichnis sein darf bevor sie gelöscht wird.
    $time = time();
    $anzahl = 0;

    // Das ist der korrekte Weg, ein Verzeichnis zu durchlaufen.
        while (false !== ($file = readdir($handle)))

    {

    if (is_file("$verzeichnis/$file")

    {
                $dateialter = filectime  ("$verzeichnis/$file");
                echo "<p>"$verzeichnis/$file, $dateialter</p>"
             }
          }

    closedir($handle);

    Lass Dir das Alter mal anzeigen.
    Vielleicht haben die das Dateisystem gewechselt beim Hoster?

    Liebe Grüße aus dem Cyberspace

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Tatsache! Obwohl mein FTP Client das ware Alter anzeigt , gibt die Funktion filectime() zurück das keine Datei älter ist wie 7 Tage. TOLL!!!!

      Ich habe wenig Lust ein ganzes Jahr lang regelmäßig Dateien zu löschen bis das wieder stimmt. Was haben die da nur wieder rumgefummelt?!?

      1. Hallo

        Tatsache! Obwohl mein FTP Client das ware Alter anzeigt , gibt die Funktion filectime() zurück das keine Datei älter ist wie 7 Tage. TOLL!!!!

        Ich habe wenig Lust ein ganzes Jahr lang regelmäßig Dateien zu löschen bis das wieder stimmt. Was haben die da nur wieder rumgefummelt?!?

        Frage "die" danach.

        Tschö, Auge

        --
        Die deutschen Interessen werden am Liechtenstein verteidigt.
        Veranstaltungsdatenbank Vdb 0.3
        1. Ich habe vermutlich eine Lösung:
          filemtime() zeigt mir das wahre Alter an, also sollte es damit gehen.

          Danke an alle.

          1. Hello,

            Ich habe vermutlich eine Lösung:
            filemtime() zeigt mir das wahre Alter an, also sollte es damit gehen.

            siehe: https://forum.selfhtml.org/?t=185516&m=1231214

            Wenn Du unter Unix das Anlegedatum der Datei ahben willst, musst Du einen Handler bauen für alle Dateizugriffe und diesen ein Log führen lassen.

            Liebe Grüße aus dem Cyberspace

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hello,

              Wenn Du unter Unix das Anlegedatum der Datei ahben willst, musst Du einen Handler bauen für alle Dateizugriffe und diesen ein Log führen lassen.

              Ich mach das alternativ bei einigen Verzeichnissen, bei denen es darauf ankommt, wann ein File erstmals erzeugt wurde so, dass ich die Zeit in den Filenamen aufnehme. Hat nur den Nachteil, dass das Sortieren nicht mehr so einfach geht.

              20090407184040.neues-file.txt

              Das muss dann aber in der Applikation berücksichtigt werden. Alternativ müsste man den Create-Handler des Dateisystems umbiegen.

              Liebe Grüße aus dem Cyberspace

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Ich denke das die filemtime() meinen Zweck erfüllt. Wenn die Datei hochgeladen wurde, wird bis zum Löschen nichts mehr daran geändert. Ich habe sogar schon die Unixzeit in den Dateinamen miteingebaut, wäre vielleicht die sichere Variante gewesen den Dateiname dann auszuwerten. Naja hinterher ist man immer schlauer.

      2. Hello,

        Tatsache! Obwohl mein FTP Client das ware Alter anzeigt , gibt die Funktion filectime() zurück das keine Datei älter ist wie 7 Tage. TOLL!!!!

        Ich habe wenig Lust ein ganzes Jahr lang regelmäßig Dateien zu löschen bis das wieder stimmt. Was haben die da nur wieder rumgefummelt?!?

        "DIE" haben daran hoffentlich nicht gefummelt, obwohl heute nichts mehr auszuschließen ist. :-(

        UNIX hat keine wirklich Create-Time an den Dateien.
        Die C-Time bezeichnet die Node, also neben Änderungen IN der Datei auch Änderungen im User, der Gruppe, den Dateirechten, dem Dateinamen usw.
        Du suchtest vermutlich die M-Time. Die kennzeichnet die Letzte Änderung IN der Datei.

        Bau das mal um auf die M-Time und sag uns dann nochmal, was dabei herausgekommen ist.

        Alternativ führen manche Hoster auch die A-Time der Datei. Darauf kann man sich aber nicht unbedingt verlassen, weil sie das Filesystem zusätzlich belastget und daher oft abgeschaltet wird.
        Die A-Time kennzeichnet den letzten Zugriff auf die Daten (Inhalt) der Datei, also auch nur lesenden Zugriff.

        Liebe Grüße aus dem Cyberspace

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de