PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   image speichern und löschen (http://www.selfphp.de/forum/showthread.php?t=9048)

theAttentiveOne 11.11.2004 11:23:02

image speichern und löschen
 
Hallo Zusammen

Ich möchte ein Bild mit PHP erzeugen und dieses dann in eine Datei speichern. Danach soll das Bild wieder gelöscht werden. Zwischen dem Speichern und dem Löschen soll das Bilg aber über den <IMG>-Tag angezeigt werden.

Ablauf:
-> Bild erzeugen
-> Bild in Datei speichern
-> Bild über <IMG> anzeigen
-> Bild (Datei) löschen

Ich mache es über diesen Umweg, da ich den Link der Datei einem anderen Server übergeben möchte (via RPC). Dieser soll dann das Bild anzeigen können. Um Speicher zu sparen, muss das Bild sofort wieder gelöscht werden.

Folgendes habe ich mal versucht:
PHP-Code:

imagejpeg($image"test50.jpg"50);
imagejpeg($image"test502.jpg"50);

echo 
"<IMG src='test50.jpg'></IMG>";

unlink("test50.jpg"); 

Das Bild wird nun aber nicht mehr angezeigt. Lasse cih unlink() weg, klappt alles. Der Ramen des Bildes ist noch sichtbar (mit rotem Kreuz gekennzeichnet, dass Bild fehlt).

Ich nehme an, das hat damit zu tun, dass die Daten erst am Schluss an den Browser gesendet werden. Das Bild ist dann ja schon nicht mehr vorhanden.

Hat jemand eine idee, wie ich dieses Problem lösen kann? Oder kann ich gleich mit RPC das Bild als Datei senden? (Gäbe dann aber wohl wieder Performanceprobleme, oder?)

Mit bestem Dank für eure Hilfe

attentiveone

c4 11.11.2004 11:50:18

Zitat:

Original geschrieben von theAttentiveOne
Ich nehme an, das hat damit zu tun, dass die Daten erst am Schluss an den Browser gesendet werden. Das Bild ist dann ja schon nicht mehr vorhanden.
Logisch.

Macht's nicht auch einfach ein Skript, dass alle Bilder, die älter als n Minuten sind löscht?

theAttentiveOne 11.11.2004 13:47:45

Hallo

Vielen Dank für Deine Antwort. An das habe ich auch schon gedacht. Dies wäre dann die Auswegslösung. Ich müsste dafür eine Menge Cronjobs setzten (sagen wir alle fünf Minuten). Ich möchte nicht, dass das Script durch den Benutzer, z.B. bei jedem Login eines Benutzers, ausgeführt wird.

Es gibt ja keine Möglichkeit, das Löschen zu verzögern, das Script aber weiterlaufen zu lassen, oder? (würde mich verwundern und wiederspricht jeglicher Logik - Aber ich habe schon mal gestaunt, zu was PHP alles fähig ist.)

Ansonsten werde ich dann auf die oben benannte Lösung zurückgreifen.

Gruss

attentiveone

bazubi 11.11.2004 22:58:47

Du könntest nach dem echo ein flush() setzen, dann werden erstmal alle Daten an den Client geschickt. Danach noch ein sleep() und das Script schläft einige Sekunden lang und danach das unlink(). So könnte es gehen, habs aber nicht ausprobiert.

theAttentiveOne 11.11.2004 23:21:30

Vielen Dank für Dein Antwort.

Leider funktioniert es aber auf diesem Wege nicht.

Wenn ich es wie folg mache:

PHP-Code:

imagejpeg($image"test2.jpg"100);

echo 
"<IMG src='test2.jpg'></IMG>";

flush();

sleep(5);

//unlink("test2.jpg"); 

wird einfach fünf Sekunden eine weisse Seite angezeigt (wegen sleep) und dann wieder die Seite ohne Bild. Die Daten sind wahrschenlich beim Browser, also der String mit dem IMG, aber wenn der Browser es zu darstellen versucht, ist das Bild dann wieder weg. Die Darstellung erfolgt ja erst nach dem Sleep() oder?

Vielleicht gibt es auf dieser Überlegung eine andere Möglichkeit.

Ansonsten muss ich wohl doch auf die alter Version (mit Cronjob)zurückgreifen!

Gruss

attentiveone

Yzerman 12.11.2004 07:43:30

Das muss kein Cronjob sein. Du kannst doch zu Beginn des Scriptes als erstes eine Routine einbauen, die prüft, ob ältere Bilder vorhanden sind und diese dann löscht.

theAttentiveOne 12.11.2004 14:13:38

Ja, das ist ne Möglichkeit. Ich wollte bei meiner Lösung noch so jedes kleine Detail, welches der Performance schadet möglichst gar nicht implementieren. Bei diesem Beispiel werde ich wohl auf diese Möglichkeit zurückgreifen müssen. Vielleicht werde ich es mit Cronjobs verbinden, für den Fall, wenn lange keine Zugriffe gemacht werden.

Mit bestem Dank für alle Antworten.

Gruss Attentiveone

xabbuh 12.11.2004 15:03:30

Wenn du die alten Bilder bei jedem Aufruf des Scriptes löscht, werden die Bilder ja sehr häufig gelöscht und belasten so auch nicht wirklich den Speicher. Oder erzeugst du pro Aufruf viele Bilder?

theAttentiveOne 13.11.2004 15:33:37

Es kann durchaus sein, dass viele Bilder erzeugt werden. Ich habe mal einen Prototypen (wenn man das schon so nenne kann) gebastelt und mit 700 Bilder, die zum löschen sind gearbeitet. Das ging hervorragend. Auch wirklich fast keine Verzögerung. Ich hatte es mir schlimmer vorgestellt.

Und ich kann die Bilder eigentlich direkt nach einer Sekunde weider löschen. Dann wenn nämlich der Browser das Bild angezeigt hat. Auch das speichern unter funktioniert noch, obwohl das Bild eigentlich gar nicht mehr am gespeicherten Ort vorhanden ist.

Mit bestem Dank für all eure Antworten. Ich habe zwar nicht meine "Wunschlösung" bekommen, werde aber mit dieser Lösung gut arbieten können.

Gruss

AttentiveOne


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:47:41 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.