Erri: Problem (vermutl. mit Browsercache) bei Bildupload - Anzeige

Hi,

ich habe eine Skript, mit welchem ich Bilder / Fotos auf den Server uploade und bearbeite (u.A. Thumbnails erstellen), die dann jeweils zu einem entsprechenden Newsbeitrag angezeigt werden sollen.

Nachdem das Bild upgeloaded und der Beitrag verfasst wurde, zeige ich dem User auf einer "Vorschau-Seite" seinen Beitrag und sein Foto an.

Bei der Anzeige des Fotos liegt das Problem:
Der User kann, wenn er versehntlich ein falsches Foto (nennen wir es "PIC1") hochgeladen hat, zurück gehen, dieses löschen und ein neues Foto / Bild hochladen (dies sei im Beispiel "PIC2").
Nachdem er PIC1 wieder gelöscht hat und PIC2 hochgeladen hat, wird auf der Vorschauseite immer noch PIC1 angezeigt, obwohl dieses überhaupt nicht mehr auf dem Server zu finden ist.
Aktualisiere ich die Seite, wird dann das richtige (PIC2) angezeigt.
Hat es also etwas mit dem Browsercache zu tun?

Zuerst dachte ich, sch*** Internet Explorer, aber es ist in anderen Browsern (z.B. Mozilla Firefox & Opera) genauso.

Kennt jemand dieses Problem und weiß vielleicht jemand, wie ich verhindern kann, dass meine User ein falsches Bild in der Vorschau angezeigt bekommen?

Viele Grüße und Vielen Dank,
Erri

  1. Hallo!

    Nachdem er PIC1 wieder gelöscht hat und PIC2 hochgeladen hat, wird auf der Vorschauseite immer noch PIC1 angezeigt, obwohl dieses überhaupt nicht mehr auf dem Server zu finden ist.
    Aktualisiere ich die Seite, wird dann das richtige (PIC2) angezeigt.
    Hat es also etwas mit dem Browsercache zu tun?

    Zuerst dachte ich, sch*** Internet Explorer, aber es ist in anderen Browsern (z.B. Mozilla Firefox & Opera) genauso.

    Ganz einfach. Lege jedes Foto was hochgeladen wird in einen  eindeutigen Ordner (Microtimestamp) ab oder gebe jedem Bild eine eindeutige ID. Funktioniert wunderbar in der Praxis.

    Und dazu noch:
    27.8. Wie kann ich das Caching einer Seite verhindern?
    http://www.php-faq.de/q/q-http-caching.html

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. Hi,

      Ganz einfach. Lege jedes Foto was hochgeladen wird in einen  eindeutigen Ordner (Microtimestamp) ab oder gebe jedem Bild eine eindeutige ID. Funktioniert wunderbar in der Praxis.

      och, das ist doch zu aufwändig. Man braucht nur die URL zu ändern, das ist alles.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hallo!

        och, das ist doch zu aufwändig. Man braucht nur die URL zu ändern, das ist alles.

        Das stimmt natürlich! Ich hänge sonst immer noch ein Timestamp mit an die URL an.

        MfG, André Laugks

        --
        L-Andre @ gmx.de
      2. Hi Cheatah,

        och, das ist doch zu aufwändig. Man braucht nur die URL zu ändern, das ist alles.

        Ich habe dazu ein Formular mit action="$PHP_SELF".
        Wie kann ich hier die URL ändern?

        Viele Grüße und Vielen Dank,
        Erri

        1. Hi,

          Ich habe dazu ein Formular mit action="$PHP_SELF".

          das Formular ist egal. Es geht um die URL des Bildes, denn das wird schließlich gecachet.

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Hi ,

            Ich habe dazu ein Formular mit action="$PHP_SELF".

            das Formular ist egal. Es geht um die URL des Bildes, denn das wird schließlich gecachet.

            Mmh, dann würden ja in meinem Fall Unmengen von Bildern auf dem Webspace liegen, die gar nicht benötigt werden, denn jedes mal, wenn ein User den "Zurück-Button" des Browser betätigt und ein neues Bild hochläd, hat es einen neuen Namen.

            Bisher war es bei mir so, dass es in einem solchem Fall einfach von dem neuem Bild überschrieben wurde.

            Viele Grüße und Vielen Dank,
            Erri

            1. Hallo!

              Mmh, dann würden ja in meinem Fall Unmengen von Bildern auf dem Webspace liegen, die gar nicht benötigt werden, denn jedes mal, wenn ein User den "Zurück-Button" des Browser betätigt und ein neues Bild hochläd, hat es einen neuen Namen.

              Das mußt Du Dir überlegen wie man Bilder löscht die nicht mehr aktuelle sind. Die aktuellen Bilder stehen (Pfad/Name) in der Datenbank. Nun kannst Du die Einträge in der Datenbank mit denen im Dateisystem vergleichen. Alle die keine Eintrag in der Datenbank haben, können gelöscht werden.

              MfG, André Laugks

              --
              L-Andre @ gmx.de
              1. Hi,

                Mmh, dann würden ja in meinem Fall Unmengen von Bildern auf dem Webspace liegen, die gar nicht benötigt werden, denn jedes mal, wenn ein User den "Zurück-Button" des Browser betätigt und ein neues Bild hochläd, hat es einen neuen Namen.
                Das mußt Du Dir überlegen wie man Bilder löscht die nicht mehr aktuelle sind. Die aktuellen Bilder stehen (Pfad/Name) in der Datenbank. Nun kannst Du die Einträge in der Datenbank mit denen im Dateisystem vergleichen. Alle die keine Eintrag in der Datenbank haben, können gelöscht werden.

                das ist unnötig. Es reicht das bisherige Vorgehen, die alte Datei durch die neue zu überschreiben. Lediglich die URL muss sich unterscheiden.

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
                1. Hallo!

                  das ist unnötig. Es reicht das bisherige Vorgehen, die alte Datei durch die neue zu überschreiben. Lediglich die URL muss sich unterscheiden.

                  Wie soll sich den die URL ändern? Man kann doch nicht den Pfad zur Datei ändern, die das Bild anzeigt. Das einzige was mir einfällt und auch hilft ist, z.B. einen Timestamp an die URL zu hängen.

                  ..datei.php?47845127

                  MfG, André Laugks

                  --
                  L-Andre @ gmx.de
                  1. Hi,

                    Wie soll sich den die URL ändern? Man kann doch nicht den Pfad zur Datei ändern, die das Bild anzeigt. Das einzige was mir einfällt und auch hilft ist, z.B. einen Timestamp an die URL zu hängen.

                    na, ist doch wunderbar. Was willst Du denn mehr? :-)

                    Cheatah

                    --
                    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes
          2. Hi,

            Ich habe dazu ein Formular mit action="$PHP_SELF".

            das Formular ist egal. Es geht um die URL des Bildes, denn das wird schließlich gecachet.

            Ich habe es ersteinmal verstanden, wie ihr bzw. du das meinst *g*.
            Ich habe da eine Idee wie ich es ausführen kann.

            Mein Foto / Bild, welches der User hochlädt, bekam bisher immer eine eindeutige Nummer (Beitrags-ID). Z.B. hieß bei "Beitrag 5", das Bild "5.jpg".
            Meine Idee ist, dass ich den Bildnamen folgendermaßen generiere:

            beitragsid_timestamp.mimetype
                   -->Bsp.:     5_1101919860.jpg

            Dafür bräuchte ich noch eine Antwort auf eine Frage, welche ich bei Google nicht gefunden habe.
            Kann ich mit "file_exists()" oder Ähnlichem, nach einer solchen Datei suchen? Also ungefähr so --> 5_%.jpg
            (Das %-Zeichen soll in diesem Bsp. ein Platzhalter darstellen)

            Dies bräuchte ich, um diese Datei dann löschen zu können, bevor ich eine neue Datei mit neuem Namen hochlade (5_2973641982.jpg)

            Viele Grüße und Vielen Dank,
            Erri

            1. Hi,

              Ich habe es ersteinmal verstanden, wie ihr bzw. du das meinst *g*.

              gratuliere :-)

              Mein Foto / Bild, welches der User hochlädt, bekam bisher immer eine eindeutige Nummer (Beitrags-ID). Z.B. hieß bei "Beitrag 5", das Bild "5.jpg".

              Das darf auch weiterhin so bleiben.

              Meine Idee ist, dass ich den Bildnamen folgendermaßen generiere:

              Der Dateiname ist nicht von Belang, sondern nur die URL. Der Browser weiß ohnehin nichts von Dateien.

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
              1. Hi Cheatah,

                Der Dateiname ist nicht von Belang, sondern nur die URL. Der Browser weiß ohnehin nichts von Dateien.

                Aber mit einem verändertem Namen verändere ich doch auch die URL.
                Wenn ich dies jetzt richtig verstehe wie du schreibst, müsste ich ja dann mehrere Ordner erstellen, damit sich die URL verändert.
                Das würde mir doch auch nix bringen, da die Bilder verstreut in verschiedenen Verzeichnissen liegen.

                Gibt es eine Möglichkeit eine Datei mit Platzhaltern zu suchen?

                Viele Grüße und Vielen Dank,
                Erri

                1. Hi,

                  Der Dateiname ist nicht von Belang, sondern nur die URL. Der Browser weiß ohnehin nichts von Dateien.
                  Aber mit einem verändertem Namen verändere ich doch auch die URL.

                  in der Regel ja. Du handelst Dir aber zusätzliche und unnötige Probleme ein.

                  Wenn ich dies jetzt richtig verstehe wie du schreibst, müsste ich ja dann mehrere Ordner erstellen, damit sich die URL verändert.

                  Nein. Woraus besteht eine URL?

                  Gibt es eine Möglichkeit eine Datei mit Platzhaltern zu suchen?

                  Keine Ahnung, das ist für Dein Problem aber auch nicht interessant.

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
                  1. Hi Cheatah,

                    Wenn ich dies jetzt richtig verstehe wie du schreibst, müsste ich ja dann mehrere Ordner erstellen, damit sich die URL verändert.

                    Nein. Woraus besteht eine URL?

                    Aus Verzeichnissen und Dateien?
                    www.example.com/verzeichnis1/verzeichnis2/datei.jpg

                    Ich glaube, ich verstehe nicht ganz, auf was du hinaus willst...

                    Gibt es eine Möglichkeit eine Datei mit Platzhaltern zu suchen?

                    Keine Ahnung, das ist für Dein Problem aber auch nicht interessant.

                    Ich versuche einmal zu erklären, was ich damit vor hatte:
                    Angenommen, ein User lädt ein Bild (5_2567264893.jpg) hoch und merkt dann, dass es versehentlich ein falsches war. Demzufolge geht er auf die Seite zurück, auf der er das Foto hochgeladen hat (Zurück-Button des Browsers), -- evtl. ohne vorher den vorhandenen Lösch-Button zu betätigen -- , dann lädt er ein neues Foto hoch, welches den neuen Namen 5_2567264901.jpg.
                    Damit nicht eine unnötige Datei mehr auf dem Webspace liegt, wollte vor dem Upload mit einer Suchfunktion (mit Platzhaltern) die Datei, von welcher ich nur diesen Teil habe (5_**********.jpg) löschen und anschließend die neue Datei hochladen.

                    Ich hoffe, es war ein wenig verständlich :-)

                    Viele Grüße und Vielen Dank,
                    Erri

                    1. Hi,

                      Nein. Woraus besteht eine URL?
                      Aus Verzeichnissen und Dateien?

                      falsch.

                      www.example.com/verzeichnis1/verzeichnis2/datei.jpg

                      Hier fehlt erst einmal das Protokoll - das da ist keine URL. Fügen wir es in Gedanken dazu, steht dahinter der Hostname. Das Protokoll impüliziert den Port, der daher weggelassen werden kann. Dann kommt der Localpart, der zwar hierarchisch aufgebaut ist, aber nichts (in Worten: nichts) mit Dateien und Verzeichnissen zu tun hat. Und was fehlt dahinter?

                      Ich glaube, ich verstehe nicht ganz, auf was du hinaus willst...

                      Auf Analysetechniken.

                      Keine Ahnung, das ist für Dein Problem aber auch nicht interessant.
                      Ich versuche einmal zu erklären, was ich damit vor hatte:

                      Ich habe verstanden, was für ein Ziel Du verfolgt hast, und es als nicht sinnvoll deklariert. Es existiert ein trivialer Weg, den Du innerhalb von Sekunden implementieren kannst, ohne auch nur das geringste Problem erwarten zu müssen - abgesehen vom danach fehlenden Caching, welches ja der Grund der Aktion ist.

                      Cheatah

                      --
                      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                      X-Will-Answer-Email: No
                      X-Please-Search-Archive-First: Absolutely Yes
                      1. Hi Cheatah,

                        Woraus besteht eine URL?
                        Aus Verzeichnissen und Dateien?

                        falsch.

                        www.example.com/verzeichnis1/verzeichnis2/datei.jpg

                        Hier fehlt erst einmal das Protokoll - das da ist keine URL. Fügen wir es in Gedanken dazu, steht dahinter der Hostname. Das Protokoll impüliziert den Port, der daher weggelassen werden kann. Dann kommt der Localpart, der zwar hierarchisch aufgebaut ist, aber nichts (in Worten: nichts) mit Dateien und Verzeichnissen zu tun hat. Und was fehlt dahinter?

                        Okay, überredet *g*. Das war mein eigentlicher Fehler. Aufgrund meines "Falschdenkens" hatte ich auch eine ziemlich komplizierte Lösung angestrebt.
                        ***Warum einfach, wenn`s auch schwierige Lösungsansätze gibt? ;-) ***

                        Ich habe verstanden, was für ein Ziel Du verfolgt hast, und es als nicht sinnvoll deklariert. Es existiert ein trivialer Weg, den Du innerhalb von Sekunden implementieren kannst, ohne auch nur das geringste Problem erwarten zu müssen - abgesehen vom danach fehlenden Caching, welches ja der Grund der Aktion ist.

                        Ich habe mein Problem nun, wie du ja von Anfang an geschrieben hast, auf eine ganz einfache Art und Weise gelöst:
                        --> http://www.example.com:80/verzeichnis/datei.jpg?timestamp

                        Ich danke dir vielmals um deine Hilfe!!!

                        Viele Grüße und Vielen Dank,
                        Erri

        2. Hi ,

          och, das ist doch zu aufwändig. Man braucht nur die URL zu ändern, das ist alles.

          Ich habe dazu ein Formular mit action="$PHP_SELF".
          Wie kann ich hier die URL ändern?

          Ich habe das Ganze nun einmal folgendermaßen probiert:
          (Ausschnitt aus dem<form>)
          ... action="'. $PHP_SELF; .'?test='. time() .'   ....

          Allerdings ändert das leider nichts daran, dass immer das erste Bild (PIC1) angezeigt wird.
          Ich habe außerdem zusätzlich probiert, mit den Metatags, den Cache zu verhindern.
                   <meta http-equiv="Cache-Control" content="no-cache">
                   <meta http-equiv="pragma" content="no-cache">

          Aber irgendwie funktioniert alles nicht so richtig.
          Mache ich dabei noch irgendwelche Fehler?

          Viele Grüße und Vielen Dank,
          Erri

          1. Hi,

            Ich habe das Ganze nun einmal folgendermaßen probiert:
            (Ausschnitt aus dem<form>)
            ... action="'. $PHP_SELF; .'?test='. time() .'   ....
            Allerdings ändert das leider nichts daran, dass immer das erste Bild (PIC1) angezeigt wird.
            Ich habe außerdem zusätzlich probiert, mit den Metatags, den Cache zu verhindern.
                     <meta http-equiv="Cache-Control" content="no-cache">
                     <meta http-equiv="pragma" content="no-cache">

            weder das Formular noch das HTML-Dokument sind es, deren Caching Du unterbinden möchtest. Es geht um das _Bild_.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
  2. Hi,

    Nachdem er PIC1 wieder gelöscht hat und PIC2 hochgeladen hat, wird auf der Vorschauseite immer noch PIC1 angezeigt, obwohl dieses überhaupt nicht mehr auf dem Server zu finden ist.

    dann ist a) die URL immer noch die selbe und b) wurde entweder das Caching ex- oder implizit erlaubt, oder der Client hat die Caching-Empfehlungen ignoriert. Sowohl a) als auch b) sind korrigierbar (innerhalb von b) ersteres allgemein, zweiteres nur bei Zugriff auf den entsprechenden Client).

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes