tsunami
Goto Top

PHP Grafiken erzeugen und nachher löschen

Hallo,
ich habe mal eine generelle taktische Frage.
Ich habe ein Skript welches mir ein Tortendiagramm erzeugt, Ganz wunderbar mit imagecreatetruecolor usw. Klappt alles wie gewünscht.
Nun habe ich gesehen dass das Output file 400 Mal vorhanden war. kreisdiagramm.png, kreisdiagramm.png(1).png, kreisdiagramm.png(2).png usw halt.
Das Ganze läuft unter xampp.

Wenn ich nun einfach ein unlink("kreisdiagramm.png"); ans Ende setze, löscht er mir das Bild bevor es angezeigt werden kann. Klar.
Lösche ich es beim Logout ist es auch Käse, weil ja uU gerade ein anderer Nutzer die Seite aufgerufen hat und ich ihm dann da Bild klaue. Geht auch nicht.
Überschreiben geht auch schlecht, da der andere dann uu falsche Werte kriegt.

Wie kann ich das am geschicktesten lösen?

Mein Problem: User A filtert nach 2016 und 2015, 2. und 4. Quartal, User B filtert nach 2017 1. und 2. Quartal. Ich könnte natürlich meine UserID vor den Dateinamen hängen und dann beim Logout löschen.
Also tsunami_kreisdiagramm.png, mueller_kreisdiagramm.png usw. Beim Logout dann unlink (./pfad/tsunami*). Aber geht es nicht einfacher?

Gruß
tsunami

Content-Key: 340376

Url: https://administrator.de/contentid/340376

Ausgedruckt am: 19.03.2024 um 10:03 Uhr

Mitglied: kaiand1
Lösung kaiand1 12.06.2017 um 12:38:08 Uhr
Goto Top
Nun du kannst es da ja die Daten Dynamisch eingefügt werden das Bild auch einfach nur Ausliefern ohne zu Speichern.
Aber da manche User sich ja auch nicht Ausloggen bzw einen Crash mal haben sollte ein Cron die Sache zum Löschen übernehmen wo die Bilder zb > 4 Std Erstellt wurden.
Da du jedoch jeden User ein anderen Inhalt der Bilder (Werte) hast sollte der Dateiname schon eine Zuordnung zum User haben ggfs per SessionID.
Jedoch gibts du nicht an wie lange das Bild benötigt wird...
Mitglied: 133417
Lösung 133417 12.06.2017 aktualisiert um 13:19:51 Uhr
Goto Top
Du brauchst die Bilder doch gar nicht speichern, du kannst Bilddaten mit einem PHP-Skript ja direkt in den Browser ausgeben in dem du im Header den Content-Type entsprechend z.B. auf "image/jpeg" setzt., Abspeichern überflüssig.
header('Content-Type: image/jpeg');  
Ansprechen tust du dann das Bild auf deiner Seite so
<img src="meinbildausgabescript.php?parameter1=wert1&parameter2=wert2" />

Schau für ein Beispiel mal hier rein
Foto Upload und Default Text einfügen

Wenn man es unbedingt abspeichern möchte, versieht man das Bild mit einer eindeutigen GUID im Namen, speichert den Namen und Erstelldatzum in einer DB und lässt dann regelmäßig per CRON einen Cleanup auf die DB durchlaufen der Bilder nach einem Timeout automatisch entfernt. Das macht man aber meist nur wenn die Bilder noch etwas länger abrufbar sein sollen, ansonsten ganz einfach wie oben beschrieben direkt an den Browser ausliefern.

Gruß
Mitglied: wiesi200
wiesi200 12.06.2017 um 13:10:02 Uhr
Goto Top
Hallo,

ich würd das auch dynamisch erzeugen.

z.b. mit
http://www.chartjs.org/

Dein Server hat dadurch weniger Arbeit und muss nur die Rohdaten übertragen. Der Rest geht zu lasten der Clients.
Mitglied: tsunami
tsunami 12.06.2017 um 15:34:09 Uhr
Goto Top
Hallo,
waow das ging schnell. Vielen Dank erstmal. Das Bild wird nur für eine Momentaufnahme gebraucht. Im Regelfall nur wenige Minuten.
Aktuell heißt es halt einfach kreisdiagramm.png, bzw. kreisdiagramm1.png,kreisdiagramm2.png,kreisdiagramm3.png,kreisdiagramm4.png, usw. halt für Jahr 1, Jahr 2, Jahr 3 usw.
Mitglied: tsunami
tsunami 12.06.2017 um 15:36:33 Uhr
Goto Top
Hallo,
waow das ging schnell. Vielen Dank erstmal. Also quasi in einer externen Funktion auslagern. Weil die Seite an sich macht mehr wie nur das Bild ausgeben. Die Daten kommen eigentlich per POST. Um halt so wenig wie möglich von der Routine preis zu geben.
Ich schaue es mir an.
Gruß
Mitglied: 133417
Lösung 133417 12.06.2017 aktualisiert um 16:02:47 Uhr
Goto Top
Zitat von @tsunami:

Hallo,
waow das ging schnell. Vielen Dank erstmal. Also quasi in einer externen Funktion auslagern. Weil die Seite an sich macht mehr wie nur das Bild ausgeben. Die Daten kommen eigentlich per POST. Um halt so wenig wie möglich von der Routine preis zu geben.
Hindert dich ja keiner dran. Mit JQuery & Co. kannst du auch per POST deine Daten ohne neu laden der Seite schicken.