hi,
Darf man fragen, _warum_ du das Bild erst in der Session zwischenspeichern möchtest - anstatt es vom erzeugenden Script auch gleich an den Client ausgeben zu lassen?
Hatte ich vor ein paar Tagen hier schon mal beschrieben. Der Tip mit der Session kam von dir :)
Ach so ja *grins*
Das Script, welches die HTML-Seite aufbaut, in der das Bild gezeigt werden woll, braucht unbedingt Daten, die erst bei der Erzeugung des Bildes entstehen (Anzahl Objekte, Art der Objekte, etc.)
Also lasse ich dieses Script auch schon sämtliche Datenbankanfragen machen.Das Ergebnis der DB-Abfragen kann durchaus über 1 MB groß sein. Das möchte ich also nicht unbedingt per Session übertragen, denn das fertige Bild ist ja wesentlich kleiner.
Per Session "überträgst" du keine "Daten" zwischen Server und Client.
Die Session-Daten werden _auf dem Server_ in eine Session-Datei geschrieben.
Lediglich die Session-ID wird vom Client zum Server übertragen.
Beim nächsten Aufruf eines Scriptes sendet der Client die Session-ID wieder mit - bspw. als GET-Parameter.
Mit dieser ID weiß der Server jetzt, aus welcher Session-Datei er die dort gespeicherten Daten wieder auslesen kann.
Deshalb möchte ich das fertige Bild in der Session speichern.
Wie gesagt, das ginge nur, wenn du die Ausgabe von imagepng() abfängst und in die Session schreibst.
Anders hast du folgende zwei praktikablen Möglichkeiten:
Erstens: Du lässt das Hauptscript die ermittelten Daten in die Session schreiben. Das Bild bindest du mit
<img src="bildscript.php?{Sessionname=Session-ID}" ...>
ein.
bildscript.php liest jetzt die Daten wieder aus der Session aus, und erzeugt damit das Bild und sendet es an den Client.
Zweitens: Du lässt das Hauptscript das Bild bereits erzeugen und auf Platte speichern (bei imagepng zweiten Parameter nutzen). Einen zufälligen Bildnamen kannst du mittels uniq() o.ä. erzeugen.
Dann bindest du das Bild entweder mit
<img src="{von uniqid erzeugter name}" ...>
ein - Nachteil: Bild bleibt auf dem Server gespeichert, Verzeichnis wird allmählich vollgemüllt.
Oder du verlinkst die src des Bildes wiederum auf ein Script, welchem der temporäre Bildname wiederum als Parameter übergeben wird. Dieses Script gibt nun die Bilddaten an den Client aus (header gefolgt von readfile o.ä.), und löscht anschließend die temporäre Bilddatei wieder.
Das wäre auch eine Art von Session-Mechanismus, der gleich das Bild enthält - nur eben selber implementiert.
Bei beiden Methoden wäre nur darauf zu achten, dass der Client das Bild nicht schon anfordert, bevor die Daten in der Session stehen, bzw. das Bild auf Platte abgespeichert wurde.
Bei der Session-Variante sollte also session_write_close _vor_ der Ausgabe des <img>-Tags erfolgen;
bei der zweiten Methode sollte es ausreichen, wenn das Speichern auf Platte mittels imagepng() vor der Ausgabe des <img>-Tags erfolgt.
gruß,
wahsaga
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }