Portal > Foren > PHP > PHP-Programmierung > Memory size exhausted - seltsam?
Antwort
 
Themen-Optionen
Alt 02.01.2007, 19:19 Nach oben    #1
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard Memory size exhausted - seltsam?

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:
Fatal error: Allowed memory size of 18874368 bytes exhausted (tried to allocate 8448 bytes) in /srv/www/htdocs/ld-network/html/modules/imgupload/upload.php on line 40
Dies kommt aber immer nur, wenn ein .jpg-Bild hochgeladen wird. ist es eine .gif oder .png, dann geht alles normal. Im folgenden noch der banale Code:

PHP-Code:
if($_FILES['uploadSource']['type'][$i]=="image/jpeg" || $_FILES['uploadSource']['type'][$i]=="image/pjpeg") {
                
$imgA       imagecreatefromjpeg($oldscreen);
            }elseif(
$_FILES['uploadSource']['type'][$i]=="image/gif") {
                
$imgA       imagecreatefromgif($oldscreen);    
            }elseif(
$_FILES['uploadSource']['type'][$i]=="image/png") {
                
$mgA       imagecreatefrompng($oldscreen);    
            } 
Ist irgendwoher bekannt, dass .jpg mehr Ressourcen verbraucht?
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...
ljungi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2007, 19:23 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Hm, aus dem Tutorial hier habe ich gelernt:
Zitat:
Dateigröße <> Datenmenge
Hm .. jo.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2007, 19:49 Nach oben    #3
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

Wie CIX88 in dem Text schreibt, die Dateigröße ist total egal, es geht im Endeffekt um die Auflösung der Datei die umgesetzt werden muss.
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2007, 20:12 Nach oben    #4
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

Und warum isses dann bei einer png-Datei nicht so? Die Auflösung bei pngs ist doch wesentlich höher als bei jpgs?
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2007, 20:34 Nach oben    #5
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

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
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2007, 20:46 Nach oben    #6
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Zitat:
Zitat von ljungi Beitrag anzeigen
Und warum isses dann bei einer png-Datei nicht so? Die Auflösung bei pngs ist doch wesentlich höher als bei jpgs?
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.
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 07:25 Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

Zitat:
Ich meine: 18 MB cache für ein Script sind schon enorm, fast zu viel.
Jedes Grafikprogramm erstellt vom Bild eine umkomprimierte Version von Bild, also ein Roh-Bild wenn man es so nennen kann.
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).
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 17:09 Nach oben    #8
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

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
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 17:18 Nach oben    #9
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Garbage-Collector hilft bei Java, bei PHP muss man selbst noch mitmachen richtig?
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 17:39 Nach oben    #10
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

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
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 17:53 Nach oben    #11
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

@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
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 18:15 Nach oben    #12
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
@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.
http://www.robo47.net/public/php/speicherverbrauch2.php

Also ohne fclose bleiben da reste übrigt.

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen

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...
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.
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 18:26 Nach oben    #13
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

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).
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 19:30 Nach oben    #14
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

Vielleicht etwas OT, weil es nicht zum eigentlichen passt, aber eigene Versuche haben ergeben, das PHP5 mehr Speicher verbraucht als PHP4.
Kann das einer Bestätigen oder bin ich besoffen ?
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 19:49 Nach oben    #15
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 298
Standard

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.
Bleistift ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 20:47 Nach oben    #16
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

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.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.01.2007, 21:25 Nach oben    #17
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

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?
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2007, 02:59 Nach oben    #18
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

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...
ljungi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2007, 03:03 Nach oben    #19
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

die frage ist WIE OFT wird das genutzt ? wenns ein eigener Server ist, kannst du ja max-ram runtersetzen und nur für das Script hochsetzen ? wirst ja merken ob es dazu kommt, dass der RAM wirklich irgendwann voll ist
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2007, 11:29 Nach oben    #20
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 298
Standard

Ich würde das nicht dem User überlassen. Prüfe das doch selber.
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Shared Memory Berti PHP-Programmierung 4 28.06.2007 23:05


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:32 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44