Dateien nach 24h löschen (PHP)?
Hey,
ich möchte gerne, dass Dateien nach 24h (bezogen auf die Speicherdauer in diesem Ordner) gelöscht werden. Dies sollte aber nur in einem bestimmten Unterordner passieren und sich nur auf die oben genannten Dateien beziehen.
Leider habe ich hierfür keinerlei Ansatz und ich habe auch schon recherchiert, jedoch habe ich nur Beiträge gefunden, wie man entweder alle oder Dateien löscht (nach ihrem Erstellungsdatum/Änderungsdatum).
Vielen Dank für jede Hilfe!
PS: Das PHP-Script liegt also im Hauptverzeichnis & die Dateien in /beispiel/bild.png
5 Antworten
Also wenn du Zugang zu Cron hast lege einen Cronjob an, der folgenden Befehl ausführt:
find /kompletter/pfad/zu/deinem/verzeichnis -type f -mtime +1 -delete
Wenn du das in einem PHP-Script machen musst, wirst du das ungefähr so machen wollen:
foreach(glob('verzeichnis/*') as $file) {
if (filemtime($file) < (time() - 86400)) {
unlink($file);
}
}
Sieh zu, dass die Dateien durch das Skript gelöscht werden dürfen. Hab den Code aber nicht getestet, Nutzung auf eigene Gefahr.
Etwas Ähnliches hatte ich vor Jahren mal für ein Projekt benötigt. Letztendlich wäre mein Ansatz beim Hochladen der Dateien einen Datenbankeintrag mit Dateiname und Timestamp zu setzen.
Anschließend kann man bequem eine SQL-Abfrage stellen welche Einträge einen Timestamp haben der älter als 24 Stunden ist und Eintrag wie auch Datei anschließend über eine Schleife zu löschen. Der Name kann hierbei sowohl den Datenbankeintrag als auch den Dateinamen einwandfrei identifizieren.
Vielleicht so:
- Hänge an die Dateinamen einen Timestamp,
- Prüfe beim Aufrufen der Seite das Alter der Datei
- Lösche die jeweiligen Dateien nach erreichen der gewünschten Dauer
Warum nicht nach dem Änderungsdatum? Ich weiß zwar nicht wie die Dateien in den Ordner kommen (kopiert oder neu generiert) aber du kannst ja auch beim Kopieren das Änderungsdatum der Datei auf den aktuellen Timestamp setzen. Dann lässt du regelmäßig ein Script mittels Crobjob darüber laufen und löschst immer alle Dateien im Ordner, die älter als 24 Stunden sind. Das ist zumindest der einfachst Weg und mit ein paar Zeilen Code zu bewerkstelligen.
Dann ist es doch kein Problem das über das Datum der letzten Dateiänderung mit filemtime zu filtern und ältere Datein dann zu löschen.
Klingt nach einer klassischen Aufgabe für einen Cronjob. Einfach ein kleines Script schreiben, das sich das Alter und den Namen der Dateien aus der Datenbank holt und prüft. Dieses Script dann per Cronjob in regelmäßigen Abständen ausführen lassen. (1x am Tag, jede Stunde, aller 5 Minuten oder was auch immer du für ausreichend hältst.)
Hast du hierfür einen Ansatz (Code) oder irgendeinen Forum-Beitrag, der mir weiterhelfen könnte?
Das ist ein Webserver, alle Dateien werden hochgeladen, da es ein Filesharing-Service wird. Ich möchte quasi nach dem Uploaddatum die Dateien löschen.