![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 | |
|
Blubb... öfz
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
|
Servus,
bekommen immer folgende Fehlermeldung, die an sich keinen Sinn ergibt, sobald eine .jpg-Datei, die größer als 1,3 MB ist, hochgeladen wird. An und für sich meint er ja, dass er 8448 Bytes sammeln will, aber 18 MB überschritten wurden. Zitat:
PHP-Code:
Ich meine: 18 MB cache für ein Script sind schon enorm, fast zu viel. Irgendwelche Ideen? Greets Ljungi
__________________
Vive la France! Welcome to Sarkoworld... |
|
|
|
|
|
|
Nach oben #5 |
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.188
|
es geht hier um 3 faktore: höhe, breite, farbtiefe und da sollte es unabhängig davon sein ob das bild ein GIF, ein PNG oder ein jpeg ist, aussnahmen stellen VIELEICHT, da bin ich mir aber nicht sicher, weil gdlib das ja intern eh alles sehr stark aufbläst, gifs dar, wenn sie nur 256 farben nutzen und 8bit-pngs
|
|
|
|
|
|
Nach oben #6 |
|
Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
|
Im Gegenteil, da JPEG im Gegensatz zu PNG und GIF keine verlustfreie Kompression ist, kann es bei gleicher Dateigrösse wesentlich höhere Auflösungen erreichen, die nach dem Entpacken dann natürlich bei PHP in den Speicher passen müssen.
|
|
|
|
|
|
Nach oben #7 | |
|
Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 576
|
Zitat:
Es ist praktisch ein Duplikat des geladenen Bildes. Da spielt auch weniger das Bildformat eine Rolle, sondern jedes einzelne Pixel mit seiner Farbtiefe. Bei einigen Grafikprogramm wird das als Info sogar angezeigt. (http://www.cix88.de/d/tut_gdlib.gif) Natürlich nur solange, wie sich die Bild-Daten im Speicher befinden. Erst wenn das Bild gespeichert wird, wird das Bildformat gewählt und entsprechend erfolgt die Komprimierung. Die GDlib macht es genauso, nur schlimmer Geändert von CIX88 (03.01.2007 um 07:28 Uhr). |
|
|
|
|
|
|
Nach oben #8 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
Zu beachten ist wohl auch, dass jede Variable, jede geladene Klasse oder Funktion, sowie die PHP-Scripte selber den Speicher füllen. Jede Variable, die nicht wieder gelöscht wird, bleibt bis zum Ende des Scriptes bestehen. Ebenso auch Bilder, die geladen werden. Wenn man zwischendurch den Speicher also nicht mal wieder frei gibt, indem man nicht mehr benötigte Variablen löscht, kommt es auch bei großen Cache schnell zum Überlauf.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #9 |
|
Mensch
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.793
|
Garbage-Collector hilft bei Java, bei PHP muss man selbst noch mitmachen richtig?
__________________
I did it my way - Senseless-Blog |
|
|
|
|
|
Nach oben #10 |
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.188
|
hmm naja, also wenn ich ne funktion habe dann ist am Funktionsende das an variablen was nur intern genutzt wurde ja wieder wech und da man meist ja eh über funktion/klassen arbeitet kommt so nicht unbedingt so viel overhead zusammen oder?
http://www.robo47.net/public/php/speicherverbrauch.php |
|
|
|
|
|
Nach oben #11 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
@Robo: Da wäre ich mir nicht so sicher, zum Beispiel bleiben fopen etc. bis zum Ende des Scriptes bestehen oder halt bis zum fclose. Ebenso meine ich ist es auch mit Graifken, egal, ob Funktion oder nicht, es sollte vor dem Ende einer jeden Funktion aufgeräumt werden, ist meiner Meinung nach sauberer.
Für mich ist jedenfalls vorstellbar, dass die Variablen im Hintergrund gehalten werden, wenngleich sie auch nur intern in der Funktion benutzt wurden und erst beim erneuten Aufruf gelöscht werden, das ist aber nur eine Vermutung, die ich nicht belegen kann...
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #12 | |
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.188
|
Zitat:
Also ohne fclose bleiben da reste übrigt. dann würde ja mein Script nach dem Funktionsaufruf trotzdem noch ca 1,4 MB belegt haben oder ? Also für Resourcen und andere Sachen kann das stimmen, aber ich denke für "normale" Variablen eher nicht. |
|
|
|
|
|
|
Nach oben #13 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
Wie gesagt, belegen kann ich es nicht, aber vorstellbar wäre es in meinen Augen dennoch. Die Erklärung dafür ist auch garnicht mal soweit hergeholt finde ich: Wenn man erst beim Aufruf einer Funktion die Daten löscht, spart man sich am Ende einer Funktion die Schreibzeit im Speicher, um diesen wieder frei zu geben. Könnte also um ein µ schneller sein das Ganze.
Wie gesagt: Nichts handfestes und wahrscheinlich wird es auch so nicht gehandhabt, aber vorstellbar bleibt es dennoch EDIT: Dein Test-Script zeigt ja schon, dass ich mit Resources nicht unbedingt unrecht hatte... Und ich meine, dass es auch mit Bildern so ist. Ich hatte mal ein Script zum Kleinrechnen von Bildern das unmengen an Speicher brauchte. Nach dem Einfügen der "Zerstörung" des Bildes (obwohl die selbe Variable immer überschrieben wurde und eigentlich der Speicher hätte freigegeben / überschrieben werden müssen) ist der Speicherhunger deutlich zurückgegangen.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll Geändert von MrNiceGuy (03.01.2007 um 18:31 Uhr). |
|
|
|
|
|
Nach oben #15 |
|
Erfahrener Benutzer
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 287
|
Naja... Kann ich mir schon vorstellen. PHP5 kann ja auch einiges mehr (OOP...). Hast du Zahlen?
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
|
|
|
|
|
Nach oben #16 |
|
Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 576
|
Nein keine genauen Zahlen, aber bei einfachen Scripten waren es ca. 30-70kb mehr.
Bei arbeiten mit der GDlib waren teilweise Unterschiede von 500kb ! Gemessen mit memory_get_usage(), selbe Scripte, einmal mit PHP4 und einmal mit PHP5. |
|
|
|
|
|
Nach oben #17 |
|
Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
|
Bei PHP wird bei grösseren Versionswechseln schonmal der Memory-Manager grundlegend umgebaut, um Speicherfragmentierung usw. zu beeinflussen. Da kann sich schonmal der Speicherverbrauch ändern. Hat die 5.2er nicht wieder nen neuen?
|
|
|
|
|
|
Nach oben #18 |
|
Blubb... öfz
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
|
Hi,
danke für die zahlreichen Antworten! Dass PHP alle Vars in den Cache speichert, die im Script benutzt werden, im Grunde eigentlich alles in den Cache wandert, war mir klar. Leider haben wir immer noch keine wirkliche Lösung für das Problem gefunden. Haben nun einfach ne Option "kein Thumbnail erstellen" eingebaut, die der User nutzen kann, falls das Bild zu groß ist. Ich weiß, nicht das Wahre, aber der Server hat nur 1024 MB Ram... ^^
__________________
Vive la France! Welcome to Sarkoworld... |
|
|
|