Bene: Problem dynamisch erzeugtem Bild

Guten Abend,
wie schon das Thema zeigt habe ich folgendes Problem mit einem mit gd dynamisch erzeugten Bild.
Situation: Aus einer Liste soll ein Datensatz ausgewählt werden,auf der nächsten Seite soll ein Diagramm aus dem Datensatz erzeugt und angezeigt werden (datensatz wird mit GET am Link übergeben).Funktioniert auch fast problemso,nur wenn ich ein Graph (übrigens physisch,also nicht on the fly) erzeugen lass und danach einen anderen,wird zwar ein neues Bild korrekt erzeugt (im Explorer vorhanden) aber der Browser (sowohl IE als auch FF) zeigt noch das alte Bild an,erst wenn man die Seite noch einaml neulädt wird das aktuelle angezeigt (Bild bleibt wohl im Cache),was allerdings in anbetracht des Rechenaufwand nicht gerade praktisch ist.Ich habe auch schon an den Anfang des Generierungscodes das alte Bild jeweils über
if (file_exists($file)) unlink($file);
löschen lassen,allerdings scheint es sich hier eher um ein Browserproblem zu handeln...Wie kann ich es lösen?

Vielen Vielen Dank für alle Ideen!!(Hoffe es ist verständlich beschrieben)

  1. echo $begrüßung;

    Bild bleibt wohl im Cache

    Setze ein Verfallsdatum (kann auch in der Vergangenheit liegen). Dazu eignet sich der HTTP-Header Expires und auch Cache-Control.

    echo "$verabschiedung $name";

    1. Gute Idee,aber es will einfach nicht funktionieren....
      Habs jetzt also mit der im php Handbuch beschriebenen Header Methode probiert:
      <?php
      header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
      ?>
      (Hab die 4 Zeilen ganz an den Anfang gestellt,damits auch klappt)

      Aber irgendwoher holt er sich trotzdem noch das alte Bild....

      Habs dann mit der hier: http://www.sitepoint.com/article/php-anthology-2-5-caching
      beschriebenen Methode probiert ,funktioniert auch nicht.........

      Ich bin echt am verzweifeln,aht noch jemand einen Rat?

      1. echo $begrüßung;

        <?php
        header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
        ?>
        Aber irgendwoher holt er sich trotzdem noch das alte Bild....

        Wo stehen diese Zeilen? In der HTML-Seite, die nur einen Verweis auf das Bild hat oder gibt das Script für das dynamisch erzeugte Bild diese Header-Zeilen zusammen mit den Bild-Daten aus? Ersteres wäre für das Bild nicht sehr sinnvoll. Und hast du den Cache von der alten Bild-Datei befreit, damit der Browser einmal zwingend nachladen muss, um die neuen Verfalls- und Cache-Header zu bekommen?

        echo "$verabschiedung $name";

        1. Das Script gibt den Header,das Bild wird im script am ende mit echo"<img>";
          angezeigt,liegt es vielleicht daran? Den Cache hab ich auch geleert,es ist zum verzweifeln!

          1. Also es liegt wohl am Frameset,das Script wird in ein Frame geladen.
            Lädt man es ohne Frameset mit header() klappts problemlos!
            Nun könnte ich ja wohl einfach den header ins frameset schreiben,aber
            dann müüst ja bei jedem klick das ganze set neugeladen werden...
            Wie kann ich es machen das nur ein bestimmter Frame neugeladen wir?
            Oder gehts ganz anderst?

            Danke für einen (hoffentlich letzten) Tipp

            Bis denn

            1. echo $begrüßung;

              Also es liegt wohl am Frameset,das Script wird in ein Frame geladen.
              Lädt man es ohne Frameset mit header() klappts problemlos!
              Nun könnte ich ja wohl einfach den header ins frameset schreiben,aber
              dann müüst ja bei jedem klick das ganze set neugeladen werden...

              HTTP-Header (ob Exprires, Content-Type, sonstwas) gehören zur jeweiligen Ressource.
              Wenn Ressource A auf Ressource B verweist, interessierten die Header der Ressource A beim Zugriff auf Ressource B nicht die Bohne. Jeder Request auf eine Ressource ist eigenständig zu betrachten und mit seinen eigenen Headern auszuliefern.

              Das Frameset ist mit Sicherheit nicht die Ursache.

              Im Moment machen wir ja hier nur Trockenschwimmen. Wenn du mal das Problem verlinken möchtest, kann man sich das mal ansehen und eventuell nähere Angaben zur möglichen Fehlerursache machen.

              echo "$verabschiedung $name";