Dateien nach 24h löschen (PHP)?

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – selbstständiger Dienstleister und Nerd

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.

Woher ich das weiß:Berufserfahrung – Entwickle seit > 20 Jahren Anwendungen mit PHP.

justamarvelfan 
Beitragsersteller
 08.07.2020, 18:14

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.

0
Babelfish  08.07.2020, 20:21
@justamarvelfan

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.

0

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.)


justamarvelfan 
Beitragsersteller
 08.07.2020, 18:15

Hast du hierfür einen Ansatz (Code) oder irgendeinen Forum-Beitrag, der mir weiterhelfen könnte?

0