ImageDestroy zwingen nötig?
Fabienne
- php
Hallo und guten Abend zusammen,
ich aber derzeit viel mit Grafikbearbeitung online.
Ist nach dem Bearbeiten von Grafiken via PHP der Aufruf der Funktion inmagedestroy unbedingt nötig, oder werden nach Abschluss des Scripts die Speicherressourcen wieder automatisch freigegeben?
Vielen Dank für Eure Infos!
Moin!
Ist nach dem Bearbeiten von Grafiken via PHP der Aufruf der Funktion inmagedestroy unbedingt nötig, oder werden nach Abschluss des Scripts die Speicherressourcen wieder automatisch freigegeben?
Kümmerst du dich um die restlichen Variablen? Datenbankergebnisse? Den Ausgabepuffer etc.? Wohl auch nicht. Und wird der RAM-Speicher des Servers immer voller? Auch nicht.
Ergo... Am Skriptende wird sämtlicher benutzter Speicher freigegeben. Zwischendurch manuell dafür zu sorgen kann aber trotzdem sinnvoll sein, weil Bilder in der Regel recht groß sind und bei der gdlib ja unkomprimiert im Speicher liegen.
- Sven Rautenberg
你好 Fabienne,
ich aber derzeit viel mit Grafikbearbeitung online.
Ist nach dem Bearbeiten von Grafiken via PHP der Aufruf der Funktion
inmagedestroy unbedingt nötig, oder werden nach Abschluss des Scripts die
Speicherressourcen wieder automatisch freigegeben?
Die Ressourcen werden zwar nach Script-Ende wieder freigegeben, aber das
heisst nicht, dass du nicht ImageDestroy() aufrufen solltest, sobald du
das Bild nicht mehr brauchst. Stell dir vor, du hast pro Sekunde 10
Besucher, jeder fragt 10 Bilder ab, das sind 10x10 Requests pro Sekunde.
Der Einfachheit halber nehmen wir weiter an, dass jedes bild 640x480 Pixel
gross ist; das heisst in der GD-Lib, für jedes Bild wird
640 * 480 * 4 Byte = gerundet 1,17MB * 10 = 117MB pro Sekunde. Das ist
schon ziemlich viel Speicher. Deshalb ist es wichtig, dass du den Speicher
freigibst, sobald du ihn nicht mehr benötigst.
Natürlich macht es keinen Unterschied, wenn dein Script das Bild eh erst
ganz am Ende freigeben würde, aber man sollte trotzdem darauf achten. Es
ist schliesslich kein Aufwand, wenn man mal eben ImageDestroy() aufruft,
bevor man andere Arbeiten, etwa Aufräum-Arbeiten oder so, macht.
再见,
克里斯蒂安
Hi!
ich aber derzeit viel mit Grafikbearbeitung online.
Ist nach dem Bearbeiten von Grafiken via PHP der Aufruf der Funktion inmagedestroy unbedingt nötig, oder werden nach Abschluss des Scripts die Speicherressourcen wieder automatisch freigegeben?
Wenn das Skript fertig abgearbeitet wurde, wird der Speicher automatisch freigegeben, d.h. du bräuchtest dich darum _eigentlich_ nicht kümmern. Solltest du jedoch in einem Skript mit mehreren Bildern arbeiten (z.B. mehrere Bilder sollen verkleinert werden), so musst du unter Umständen sogar imagedestroy() benutzen, da sonst das in der php.ini gesetzte memory_limit überschritten wird.
Darüber hinaus ist es einfach guter Stil, den für eine bestimmte Operation benötigten Speicher wieder freizugeben, sodass du imagedestroy auf alle Fälle benutzen solltest.
Grüße,
Fabian St.
Hi Fabian,
wie steht es um die Bildvariablen innerhalb von Funktionen?
Globale-Vars sind bei ausgeschaltet => eigentlich sollten die Vars ja nach Ende der Funktion wieder gelöscht werden.
Problem bei mir ist folgendes:
Ich habe eine Skalierfunktion, die als Rückgabewert das Bild zurückgibt (return $neues_bild;). Anschließend wird in einer anderen Funktion das Bild abgespeichert bzw. ausgegeben.
Meines Wissens nach werden Funktionen beim Erreichen von return abgeschlossen. D.h. ich _kann_ meinenicht globale Variable $neues_bild gar nicht mehr löschen :-(
Habe ich das richtig verstanden?
Grüße Fabienne
hi,
Ich habe eine Skalierfunktion, die als Rückgabewert das Bild zurückgibt (return $neues_bild;).
Diese Rückgabe legst du dir sicherlich in einer Variablen ab - damit du überhaupt noch Zugriff auf diese Bildressource hast.
Meines Wissens nach werden Funktionen beim Erreichen von return abgeschlossen. D.h. ich _kann_ meinenicht globale Variable $neues_bild gar nicht mehr löschen :-(
Du kannst imagedestroy mit der Variablen als Parameter aufrufen, in der du die Funktionsrückgabe abgelegt hast - denn diese enthält ja nach wie vor die Ressource-ID des Bildes.
gruß,
wahsaga