Automatisch Dateien in einem "Uploadfolder" per Cronjob löschen lassen

  • Hallo zusammen,


    ich würde gerne Dateien von einem Uploadfolder nach X Tagen löschen lassen. Dabei soll jedoch die .htacess, index.html und web.config verschont bleiben. Alle anderen Dateien (zum Bsp. .PDF.JPG, usw.) sollen nach einer bestimmten Anzahl von Tagen gelöscht werden. Wie kann man hierfür ein einfaches Script erstellen? Dieses ollte dann per Cronjob ausführbar sein. Entsprechend kann man natürlich die gewünschten X Tage bis zur Löschung bereits im Cronjob definieren, aber eben nicht die Dateien.


    Hat hierfür jemand eine Idee oder Vorlage für das Script?


    LG und einen schönen Sonntag.

  • - Im Ordner /templates/MEINTEMPLATENAME/html/mod_custom/

    Datei anlegen: croner.php


    - In die Datei

    - $folder - Variable anpassen. Bei mir eben Ordner "/testen" direkt im Joomla-Verzeichnis.

    - Die nicht zu löschenden sind im Array $exclude.


    - Einen versteckten Menüeintrag anlegen mit "noindex,nofollow", Alias "meincroner" oder wies beliebt. In erster Ebene eines Menüs. Ich tät ihn aus Paranoia zusätzlich in ein Schattenmenü.


    - Dann meue Seite erreichbar via

    Code
    example.org/meincroner

    - Einen "Token" ausdenken, am besten alphanumerisch. In meinem Code ist das:

    Code
    2281a0da42bb6946404e1c95dd758187

    Den von dir ausgedachten und geheim zu haltenden "Token" in obigem Code eintragen/ändern.


    - Ein "Eigenes Modul" anlegen:

    - - Position: halt eine, die im Template existiert. (Weiß grad gar nicht, ob nötig?)

    - - Titel anzeigen: Nein.

    - - Layout: croner (eben so wie die Datei oben heißt, aber ohne ".php").

    - - Inhalte vorbereiten: Nein

    - - Modul-Stil: System > none


    - Dieses Modul einzig und allein dem obigen, versteckten, neuen Menüeintrag zuweisen. Andere Seiten werden sonst unerreichbar!


    - Aufruf der Seite via (bspw. via Cronjob, aber auch Browser geht):

    Code
    https://www.example.org/meincroner?cronertoken=2281a0da42bb6946404e1c95dd758187

    Der Token ( = Parameter "cronertoken") halt angehängt.

    "www.example.org" natürlich deine Domain.


    - Vorher in einem Testordner ausprobieren, weil radikal gelöscht wird.

  • Ddanke für die Info.


    aber mal weshalb Menü + Modul erstellen?


    Reicht es nicht eine einfache PHP Datei für den Cronjob zu erstellen oder weshalb Menü + Modul? Akeeba zum Bsp. macht das ja auch über eien Datei.


    Geht das nicht einfacher?


    Danke und liebe Grüße

  • Echt jetzt?

    Puuh. "Einfacher" ist relativ. Das ist stinkeinfach und ist 1 Datei.


    Akeeba ist ein Paket, das Komponente und Plugins dabei hat, die das abwickeln. Kannste dir natürlich auch programmieren. Geht schon mit einem System-Plugin alleine.


    Für eine plump eingebundene PHP-Datei, die nicht im Joomla-Framework läuft, kannst dir ja die Codes selber zusammensuchen im Netz. Von meinem kannst du dann nichts verwenden, außer machst einen Hack, dass sie das Framework einbindet. Findest auch im Netz.


    War ja schließlich eine Frage zu Joomla.

    weshalb Menü + Modul?

    Weils die einfachste "Hausmittel"-Lösung in diesm Fall ist.


    War mein letztes "Silbertablett"...

  • Hier ist für Akkeeba erklärt, wie man dein Anliegen grds. machen kann https://www.jug-friedrichshafe…atisches-backup-erstellen .

    Jetzt kommt es darauf an, wie komplex dein Anliegen ist. Grds. kannst du diese externe php-Datei durch Cronjobs aufrufen lassen.

    Es muss dann alles so programmiert sein, dass ohne weitere Interaktion das Gewollte durchläuft.

    Die Datei stellt auch ein Sicherheitsrisiko dar, wenn sie schlecht programmiert ist. Wenn nicht mehr benötigt, sollte sie entfernt werden und nicht vergessen.

  • Wir reden hier doch gar nicht von Backups. Die Datei im Tutorial macht doch nix anderes als die Akeeba-Backup-Komponente aufzurufen (auch hier mit einem "Sicherheitstoken") und dann ein Backup auszuführen.


    Du hast aber doch gar keine Erweiterung an die du deinen Aufruf weiterleitest.


    Ein Sicherheitsrisiko ist sie, weil sie im Unterschied zu Dateien, die innerhalb des Joomla-Frameworks ablaufen, jeder per Browser aufrufen kann und sie ein Backup starten wird.


    Die obige von mir ist im Framework und verhindert durch Zeile defined('_JEXEC') or die; direkte Aufrufe.

    Für Backup nähme ich lieber EasyJoomlaBackup, das ein Cronjob-Plugin dabei hat, das nebenbei ähnlich denkt, wie mein Code. Dort trägt man den Sicherheitstoken in den Plugineinstellungen ein, was ein zusätzlicher Sicherheitsfaktor ist, weil der Token nicht in die Datei hart einkodiert ist.


    Auch hier wird einfach die Seite per Cronjob aufgerufen und Plugin tut Backup machen oder Plugin tut nicht.


    Nachteil zu meiner Variante. Das Plugin prüft bei JEDEM Seitenaufruf, ob Backup zu machen ist. Bei mir wird nur dann ausgeführt, wenn die versteckte Seite aufgerufen wird.

  • Für die Backups nutze ich Akeeba, aber wie gesagt, das ist ja meinerseits nicht gefragt worden Lui_brempt.


    Danke für die Info. Jetzt verstehe ich auch die Ausführung von Dir Re:Later bezüglich Menü und Modul. Danke für die Erläuterung. Werde das Ganze nun einmal mit einem Testordner auf dem Server testen. Danke auf jeden Fall für die Tipps schon einmal.

  • Nachtrag @Re_Later


    Ich habe das nun einmal getestet, Menüeintrag in einem Schattenmenü angelegt und auf irgendeinen Beitrag verlinkt sowie Modul angelegt und alleinig für den zuvor angelegten Menüeintrag freigegeben. Davor natürlich Datei hochgeladen und den Ordner "mod_custom" im Template Ordner angelegt. Die Seite selbst über die Menü-URL ist natürlich (da verstecketer Menüpunkt) nicht erreichbar. Nach Angabe der URL inklusive Token tut sich leider nichts. Ich habe zum Testen einmal die Einstellungen in der PHP-Datei so belassen und einen ordner mit "testen" angelegt und befüllt. Dateien bleiben aber alle drin ...


    Beim Aufruf der Domain inkl. Token https://www.example.org/croner…404e1c95dd758187erscheint dann die im Menüpunkt verlinkte Seite aber es tut sich sonst leider nichts.

  • Bei mir funktioniert das Script, wenn eine vorhandene Modulposition zugewiesen ist, es erscheint das "Done.", und meine Testdatei war verschwunden. Ggf. vor dem Test noch Cache leeren, das Modul selbst evtl nicht cachen lassen. Nützlich und raffiniert, danke!