veritas: Bilder nach gewisser Zeit automatisch vom Server löschen?

Hallo,
Ich habe ein kleines Bild Hosting Script in PHP geschrieben das ohne MySQL DB auskommt. Nun möchte ich versuchen die Bilder die nicht mehr aufgerufen werden so nach z.B. 1 Jahr automatisch wieder zu löschen, um halt Speichplatz zu sparen. Das sollte allerdings ohne MySQL Datenbank funktionieren, ist sowas möglich?

Ich hab mir schonmal überlegt das mit Cromjobs zu machen, allerdings weis ich nicht wie genau ich das ins Script einbinden muss bzw. welche Befehle es da gibt, oder hat jemand noch eine andere Idee wie man sowas ohne MySQL realisiern könnte?

Ich Danke schonmal im voraus!

Grüße,
veritas

  1. Grüße,

    Ich hab mir schonmal überlegt das mit Cromjobs zu machen, allerdings weis ich nicht wie genau ich das ins Script einbinden muss bzw. welche Befehle es da gibt, oder hat jemand noch eine andere Idee wie man sowas ohne MySQL realisiern könnte?

    mach für jeden tag/woche/monat einen eigenen verzeichniss und lösche den samt inhalt.
    MFG
    bleicher

    1. Hallo

      Grüße,

      Ich hab mir schonmal überlegt das mit Cromjobs zu machen, allerdings weis ich nicht wie genau ich das ins Script einbinden muss bzw. welche Befehle es da gibt, oder hat jemand noch eine andere Idee wie man sowas ohne MySQL realisiern könnte?

      mach für jeden tag/woche/monat einen eigenen verzeichniss und lösche den samt inhalt.

      Nene, es geht ja nicht darum, dass die Bilder ein gewisses Alter haben, sondern dass über einen definierten Zeitraum nicht mehr auf sie zugegriffen wurde.

      Es muss also erstmal ein Zählwerk her. Für diesen Zweck würde es reichen, mit einem Skript bei jedem Zugriff auf jedes Bild, den Zeitpunkt dieses Zugriffs zu speichern. Nun kann man ein weiteres Skript schreiben, in welchem diese Informationen ausgelesen werden, die Infos zu allen Bildern, auf die im definierten Zeitraum nicht mehr zugegriffen wurde, eingesammelt und daraus die Pfade zu den Bildern generiert und hernach die Bilder vom Datenträger gelöscht werden. Dieses Skript, also das Letztere, lässt man dann per Cronjob aufrufen und ausführen.

      Tschö, Auge

      --
      Die deutschen Interessen werden am Liechtenstein verteidigt.
      Veranstaltungsdatenbank Vdb 0.2
  2. Guten Tag,

    Hallo,
    Ich habe ein kleines Bild Hosting Script in PHP geschrieben das ohne MySQL
    DB auskommt. Nun möchte ich versuchen die Bilder die nicht mehr aufgerufen
    werden so nach z.B. 1 Jahr automatisch wieder zu löschen, um halt
    Speichplatz zu sparen. Das sollte allerdings ohne MySQL Datenbank
    funktionieren, ist sowas möglich?

    Ja. Du erhältst den Timestamp des letzten Dateizugriffs mit Hilfe von fileatime(), (Hinweise dort beachten). Du kannst nun über alle Dateien iterieren, die fileatime prüfen und die Datei löschen, wenn eine bestimmte Zeit vergangen ist. Das ist der unperformante und umständliche weg.

    Ich hab mir schonmal überlegt das mit Cromjobs zu machen, allerdings weis
    ich nicht wie genau ich das ins Script einbinden muss bzw. welche Befehle
    es da gibt,

    man cron
    man crontab
    man find
    man xargs
    man rm

    Gruß
    Christoph Jeschke

    --
    Zend Certified Engineer
    Certified Urchin Admin
    1. Hallo

      Ja. Du erhältst den Timestamp des letzten Dateizugriffs mit Hilfe von fileatime(), (Hinweise dort beachten). Du kannst nun über alle Dateien iterieren, die fileatime prüfen und die Datei löschen, wenn eine bestimmte Zeit vergangen ist. Das ist der unperformante und umständliche weg.

      Was meinst du konkret mit "unperformant und umständlich"? Die Info ist da (bis auf die in der Doku genannten Ausnahmen) und über alle (relevanten) Dateien muss doch sowieso geprüft werden (Schleife).

      Schlussendlich sollte das alles in allem immer noch performanter sein, als mein Ansatz, die entsprechenden Werte noch einmal extra zu speichern und dann von dort zu prüfen.

      Tschö, Auge

      --
      Die deutschen Interessen werden am Liechtenstein verteidigt.
      Veranstaltungsdatenbank Vdb 0.2
      1. Hi,
        Erstmal danke für die Antworten :)

        Wenn ich euch jetzt richtig verstanden habe hat PHP also sogar schon einen eigenen Befehl für die letzten Dateizugriffe, heißt das das ich quasi nur eine Textdatei brauche in der ich das Datum des letzten Aufrufes der Bilder speichere und diese dann mit "int fileatime  ( string $filename  )" irgendwie auslesen kann? Denn Befehl kenne ich leider nicht :/

        Das läuft zurzeit so bei mir, wenn ein Bild hochgeladen wird wird dieses halt einmal im Original abgelegt und es wird ein Thumbnail erstellt, die Bildinformationen werden dann in eine Textdatei geschrieben (im Detail wird der Aufruf (Hits) und der Name des Bildes dort gespeichert). Jetzt muss ich ja noch irgendwie das Datum da gespeichert bekommen, wann halt das Bild zuletzt aufgerufen wurde, richtig? Und dann kann ich erst diese "int fileatime  ( string $filename  )" Funktion benutzten, oder?

        Das klingt ja erstmal garnicht so schwer :) Ich würd ja auch mal mein Script hier posten, aber das soll nicht jeder sehen weil ich schon ne Menge Arbeit reingesteckt hab. ich werd jetzt erstmal so versuchen, mal sehen ob ich so was hinbekomme.

        Gruß,
        veritas

        P.S. Wenn ihr mal paar Ansätze habt wäre natürlich auch nich schlecht, ist dann immer etwas einfacher für mich ^^

        1. Hi,

          Das läuft zurzeit so bei mir, wenn ein Bild hochgeladen wird wird dieses halt einmal im Original abgelegt und es wird ein Thumbnail erstellt, die Bildinformationen werden dann in eine Textdatei geschrieben (im Detail wird der Aufruf (Hits) und der Name des Bildes dort gespeichert). Jetzt muss ich ja noch irgendwie das Datum da gespeichert bekommen, wann halt das Bild zuletzt aufgerufen wurde, richtig? Und dann kann ich erst diese "int fileatime  ( string $filename  )" Funktion benutzten, oder?

          Nein.
          fileatime liefert dir automatisch den Zeitpunkt, zu dem der letzte Zugriff auf eine Datei stattgefunden hat.
          Allerdings muss das System das auch unterstuetzen - Windows tut das m.W. nicht, und auch unter Linux-Systemen kann das aus Performancegruenden abgestellt sein, wie das Manual zu fileatime beschreibt.

          MfG ChrisB

          --
          „This is the author's opinion, not necessarily that of Starbucks.“
          1. Guten Tag,

            Allerdings muss das System das auch unterstuetzen - Windows tut das m.W.
            nicht, [...]

            Hängt vom verwendeten Dateisystem ab, wie auch in den UCN dort beschrieben.

            Gruß
            Christoph Jeschke

            --
            Zend Certified Engineer
            Certified Urchin Admin
        2. Guten Tag,

          Wenn ich euch jetzt richtig verstanden habe hat PHP also sogar schon
          einen eigenen Befehl für die letzten Dateizugriffe, heißt das das ich
          quasi nur eine Textdatei brauche in der ich das Datum des letzten
          Aufrufes der Bilder speichere und diese dann mit "int fileatime  ( string
          $filename  )" irgendwie auslesen kann? Denn Befehl kenne ich leider nicht
          :/

          Nein. Diese Metainformation (atime, access time) speichert das Filesystem deines geringsten Misstrauens für dich. fileatime() bezieht diese Information von dort und liefert dir einen sog. Unix Timestamp (vergangene Sekunden seit der Epoche). Mit diesem kannst du rechnen, bzw. diesen kannst mit geeigneten Funktionen als Ausgangbasis für eine Rechnung verwenden. Du brauchst diese Informationen nicht(!) selbst bevorraten.

          Du musst dich letztlich nur darum kümmern, dass diese Informationen ausgelesen werden und ein Programm auf Basis dieser Informationen eine Entscheidung trifft: Löschen oder behalten?

          Das läuft zurzeit so bei mir, wenn ein Bild hochgeladen wird wird dieses
          halt einmal im Original abgelegt und es wird ein Thumbnail erstellt, die
          Bildinformationen werden dann in eine Textdatei geschrieben (im Detail
          wird der Aufruf (Hits) und der Name des Bildes dort gespeichert).

          Das ist kludge.

          Jetzt
          muss ich ja noch irgendwie das Datum da gespeichert bekommen, wann halt
          das Bild zuletzt aufgerufen wurde, richtig? Und dann kann ich erst diese
          "int fileatime  ( string $filename  )" Funktion benutzten, oder?

          Ja, aber nicht auf die Art, die du hier beschreibst.

          Das klingt ja erstmal garnicht so schwer :) Ich würd ja auch mal mein
          Script hier posten, aber das soll nicht jeder sehen weil ich schon ne
          Menge Arbeit reingesteckt hab. ich werd jetzt erstmal so versuchen, mal
          sehen ob ich so was hinbekomme.

          Das ist vielleicht sogar besser so.

          P.S. Wenn ihr mal paar Ansätze habt wäre natürlich auch nich schlecht,
          ist dann immer etwas einfacher für mich ^^

          Der Ansatz ist ganz einfach: Du liest die in meiner ersten Antwort angegebenen Manpages und wirst feststellen, dass es genau eines Einzeilers auf der Kommanozeile bedarf, der leicht automatisiert aufgerufen werden kann. Und schon bist du dein Problem los.

          Gruß
          Christoph Jeschke

          --
          Zend Certified Engineer
          Certified Urchin Admin
      2. Guten Tag,

        Was meinst du konkret mit "unperformant und umständlich"? Die Info ist da
        (bis auf die in der Doku genannten Ausnahmen) und über alle (relevanten)
        Dateien muss doch sowieso geprüft werden (Schleife).

        find in Kombination mit xargs und rm ist wesentlich einfacher und gerade bei großen Dateibeständen (wir müssen ja jede Datei prüfen!) deutlich schneller als eine Implementierung in PHP.

        Schlussendlich sollte das alles in allem immer noch performanter sein, als mein Ansatz,
        die entsprechenden Werte noch einmal extra zu speichern und dann von dort
        zu prüfen.

        Nur weil mein Vorschlag nicht gut war, bedeutet es ja nicht, dass es nicht noch schlechtere gibt. Eine noch schlechtere Idee wäre es, z.B. einen Logfile-Filter zu bauen, der einerseits alle relevanten Dateien kennt und andererseits für jede eine persistente Zugriffshistorie führt, die er auf Basis der Accesslogs pflegt. Wenn ich genau darüber nachdenke, hat Auge sowas ähnliches vorgeschlagen. Verrückte Welt.

        Gruß
        Christoph Jeschke

        --
        Zend Certified Engineer
        Certified Urchin Admin
        1. Hallo

          Was meinst du konkret mit "unperformant und umständlich"? Die Info ist da
          (bis auf die in der Doku genannten Ausnahmen) und über alle (relevanten)
          Dateien muss doch sowieso geprüft werden (Schleife).

          find in Kombination mit xargs und rm ist wesentlich einfacher und gerade bei großen Dateibeständen (wir müssen ja jede Datei prüfen!) deutlich schneller als eine Implementierung in PHP.

          Ahh, da geht die Reise hin. :-)

          Bleibt das Problem, ob man diese Möglichkeit nutzen kann.

          Schlussendlich sollte das alles in allem immer noch performanter sein, als mein Ansatz, ...

          Nur weil mein Vorschlag nicht gut war, bedeutet es ja nicht, dass es nicht noch schlechtere gibt. Eine noch schlechtere Idee wäre es, z.B. einen Logfile-Filter zu bauen, der einerseits alle relevanten Dateien kennt und andererseits für jede eine persistente Zugriffshistorie führt, die er auf Basis der Accesslogs pflegt. Wenn ich genau darüber nachdenke, hat Auge sowas ähnliches vorgeschlagen. Verrückte Welt.

          Ja, hat er.

          Schon komisch, in der dritten Person angesprochen zu werden. :-)

          Tschö, Auge

          --
          Die deutschen Interessen werden am Liechtenstein verteidigt.
          Veranstaltungsdatenbank Vdb 0.2