Skript zum alte Dateien löschen funzt auf einmal nicht mehr.
datenbankler
- php
0 Tom0 datenbankler0 Auge0 datenbankler
1 C-Time, M-Time, A-Time
Tom
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.
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
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?!?
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
Ich habe vermutlich eine Lösung:
filemtime() zeigt mir das wahre Alter an, also sollte es damit gehen.
Danke an alle.
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
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
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.
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