Problem mit dem cachen von Seiten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit dem cachen von Seiten

    Hi zusammen!
    Ich habe hier eine Administrationsseite für ein Projekt erstellt, bei dem der Benutzer neben Texten auch ein Bild hochladen kann. Die Texte kommen in eine mySQL-DB, das Bild in ein Verzeichnis auf dem Server.
    Wenn der Benutzer nun in die Edit-Funktion geht und z.B. das Bild ersetzt, so wird das neue Bild nach dem DB-Update nicht in der Übersicht angezeigt. Erst F5 lädt das neue Bild von Server und zeigt es an.

    Ich hab schon vieles probiert, wie:
    PHP-Code:
    <?
        // dies wird in die dbupdate.inc.php und admin.php includiert
        header("Expires: Sun, 24 Dec 2000 23:59:59 GMT");                            
        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");               
        header("Cache-Control: no-store, no-cache, must-revalidate");                
        header("Cache-Control: post-check=0, pre-check=0", false);
        header("Pragma: no-cache");        
    ?>
    oder META-Angaben in HEAD-Bereich der Datei
    PHP-Code:
    <meta http-equiv="cache-control" content="no-cache">
    <
    meta http-equiv="cache-control" content="no-store">
    <
    meta http-equiv="cache-control" content="max-age=0">
    <
    meta http-equiv="cache-control" content="must-revalidate">
    <
    meta http-equiv="expires" content="0">
    <
    meta http-equiv="pragma" content="no-cache"
    aber das alles bringt nichts.
    Hat jemand vielleicht eine Problemlösung parat?
    Gruß balou3

  • #2
    Re: Problem mit dem cachen von Seiten

    Original geschrieben von balou3
    // dies wird in die dbupdate.inc.php und admin.php includiert
    was soll es da?

    dein "cache-problem" betrifft nicht die HTML-dokumente, sondern das bild.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Die Seite wird wahrscheinlich nicht gecacht, aber die 'neue' Seite enthält wahrscheinlich die selbe Bildreferenz. Das merkt dein Browser und lädt das Bild aus seinem Cache.

      Beispiel: Erst steht <img src="bild.jpg"> im Quelltext. Dann bearbeitest du das Bild bzw. den zugehörigen Text. Dein Script trägt Änderungen in die DB ein bzw. speichert das neue Bild. Wird das allerdings unter dem selben Name wie das ursprüngliche gespeichert, steht anschließend immernoch <img src="bild.jpg"> im Quelltext. Selber Name, selbes Bild, denkt sich dein Browser und spart sich den 'GET /bild.jpg'-Request.

      Kommentar


      • #4
        Das ist klar, aber das Bild ist ja in der seite mit <src img...> eingebunden und wenn ich der Seite mit den includes sage, dass sie neu vom Server geholt werden soll, dann betrifft es doch auch das eingebundene Bild. Oder sehe ich da etwas falsch?

        Kommentar


        • #5
          @onemorenerd
          Das Änderungsformular ruft nach Klick auf Senden die Datei 'db_update.php' auf. Diese liest mit $_POST die Werte vom Formular aus und verarbeitet sie (Upload, DB-Update etc.).
          Danach wird die Admin-Seite mit der Übersicht wieder aufgerufen, und zwar mittels
          PHP-Code:
          header("Location: admin.php"); exit; 

          Kommentar


          • #6
            Original geschrieben von balou3
            Oder sehe ich da etwas falsch?
            Eindeutiges Ja

            Du könntest das Bild über ein PHP-Script ausliefern und da mit deinen headern arbeiten - so in der Richtung müsste was gehen.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              Original geschrieben von balou3
              Das ist klar, aber das Bild ist ja in der seite mit <src img...> eingebunden und wenn ich der Seite mit den includes sage, dass sie neu vom Server geholt werden soll, dann betrifft es doch auch das eingebundene Bild. Oder sehe ich da etwas falsch?
              ja.

              das bild ist eine eigenständige ressource.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Das siehst du in der Tat falsch.

                Browser sendet Request für Webseite - Antwort sagt ihm "nicht cachen".
                Browser liest sich Quelltext der Seite durch und sendet für das Bild ebenfall einen Request - Antwort verbietet ihm nicht das Cachen des Bildes.
                Wenn es ihm seine Settings auch nicht verbieten, wird er beim Reload der Webseite das Bild aus seinem Cache holen.

                Kannst du nur verhindern, indem das Bild unter anderem Namen gespeichert wird oder wenn das Bild von einem PHP-Script ausgegeben wird, das zuvor "cache mich nicht" Header sendet.

                Kommentar


                • #9
                  Habe jetzt eine Lösung gefunden:
                  und zwar hänge ich an Dateinamen im <img src>-Tag einfach die aktuelle Zeit mit dran:
                  PHP-Code:
                  ....
                  $zeit time();
                  <
                  img src='../fotos/thumbs/th_bild.jpg?x=$zeit'>.... 
                  Das ist vielleicht eine nicht ganz so elegante Lösung, aber sie funktioniert!
                  Zuletzt geändert von balou3; 04.08.2005, 11:23.

                  Kommentar


                  • #10
                    Hey prima Idee, werd ich mir merken. Danke.

                    Kommentar

                    Lädt...
                    X