Odysseus: Bild aus Cache löschen

Hallo :-)

Auf einer Seite wird im oberen Bereich ein Auswahlfeld zum Hochladen eines Bildes angezeigt.
Im unteren Bereich ein Flash Tools zur Bearbeitung dieses Bildes.

Nun lädt der User ein Bild hoch und klickt auf Absenden.
Das Bild wird hochgeladen und die gleiche Seite neu geladen.

Nun sollte im Flash Tool das neue Bild angezeigt werden. Bedauerlicherweise wird aber das alte Bild angezeigt.

Erst nach einem Refresh (F5)wird das neue Bild im Flash Tool aktualisiert.

Kann man dieses Problem einfach umgehen?

Grüße, Odysseus

  1. Kann man dieses Problem einfach umgehen?

    Erzeuge einen Streuwert aus der Datei und hänge diese an den Request an

    foo.png?streuwert=deadbeef

    Ändert sich das Bild ohne den Dateinamen zu beeiflussen, ändert sich der Streuwert mit ziemlicher Sicherheit trotzdem.

    1. Ändert sich das Bild ohne den Dateinamen zu beeiflussen, ändert sich der Streuwert mit ziemlicher Sicherheit trotzdem.

      sicher? Ich genereiere den Streuwert mit PHP rand() oder innerhalb von Flash mit newDate.getTime(). Dann hab ich _sicher_ jedesmal einen anderen Wert :-)

      1. sicher? Ich genereiere den Streuwert mit PHP rand() oder innerhalb von Flash mit newDate.getTime(). Dann hab ich _sicher_ jedesmal einen anderen Wert :-)

        Aber du umgehst den Cache damit vollständig und zwingst den Client, jedes mal das Bild zu übertragen.

        Falle von MD5 steht die Chance 3,4x10^38 : 1, dass die Sache nicht funktioniert - das ist imho vertretbar.

        Der Nachteil dieser Lösung: der Server muss vor dem ausliefern der Datei den Streuwert berechnen (sofern dieser nicht auch in einem Cache liegt) - das dürfte aber weit "billiger" sein, als die Datei jedes mal bei jedem einzelnen Request zu übertragen.

    2. Erzeuge einen Streuwert aus der Datei und hänge diese an den Request an

      Wie erzeuge ich einen Streuwert?

      1. Wie erzeuge ich einen Streuwert?

        Mit einer geeigneten Streuwertfunktion - unter PHP gibt es benannte (z.B. md5(), sha1() ...) und generische Funktionen (wie z.B. hash()).

        Für deinen Fall ist md5_file() wohl gut geeignet.