allowed memory size

  • Themenstarter Themenstarter joky_joky
  • Beginndatum Beginndatum
J

joky_joky

Hallo ich habe ein Problem und zwar habe ich einen Pic upload aber sobald ich mehrer
Bilder hochlade kommt immer diese Fehlermeldung

allowed memory size

nun meine Frage wieso bringt er mir diese Fehlermeldung immer nur dann wenn ich Bilder
hochlade die größer als 1024*768 sind also z.B bei Bildern die 1600*1200 sind
wenn ich 5 Bilder hoclade die alle 1024*768 sind macht er es ganz einfach sobald aber ein
Bild dabei ist das 1024*768 überschreitet kommt wie gesagt diese Fehlermeldung.

Kann mir kurz jemand erklären was es genau damit auf sich hat.
 
Bearbeitest du die Bilder noch in irgendeiner Form? Falls ja, kann es sein, daß ein entpacktes Bild (falls du komprimierte Formate verwendest) mehr Platz benötigt, als du ihm in deiner Serverkonfiguration zusprichst.
 
Kann es sein, dass die Bilder zusammen einfach zu groß sind?
Der Fehler ist doch eigentlich unmissverständlich...
 
Du meinst mit zu groß warscheinlich die MB aller Bilder aber das ist es nicht denn
ich lade nur ca. 0,8 MB und ich darf bis zu 5 MB laut phpinfo .
Wie gesagt wenn nur ein Bild dabei ist das von seinen Pixeln größer ist als 1024*768
bricht das Script ab.
Ich verstehe es auch nicht warum vielleicht braucht dann der Server zu viel Speicher und beim berechnen der Bilder.
Ach ja die Bilder werden nach dem Upload verkleiner also einmal als Thumbnail mit 100*75 pixel und dann als Bild mit 300*225 pixel.
habe ich vergessen dazu zu schreiben.
 
Könntest du vielleicht einen Auszug aus dem Script posten?
Hast du das Script selbst geschrieben? Vielleicht wird irgendwo festgelegt, dass die Auflösung 1024x768 nicht übersteigen darf :? (Wobei das wohl auch nichts mit memory zutun hat...aber könnt ja sein)
 
jo hier mal das script

PHP:
$tempname = $_FILES['pic']['tmp_name'][$i]; 
$name = $_FILES['pic']['name'][$i];
$type = $_FILES['pic']['type'][$i]; 
$size = $_FILES['pic']['size'][$i];
if(!empty($name))
{
if($size < $bildgroesse)
	 {	  	
		//Überprüft die Dateiendung und läst nur *.jpeg und *.jpg Datein Hochladen	
		if($type != "image/jpg" && $type != "image/jpeg" && $type != "image/pjpeg" && $type != "image/pjpg")
	    {$fehler .= "<font color=\"#FF9900\" size=\"2\">Bild $i konnte nicht hochgelden werde. Erlaubt sind nur *.jpeg oder *.jpg Dateien</font><br>";}

	     else
	     {
            copy ("$tempname", "$PicPathTemp"."$u");  //kopiert das Tempbild in das verzeichnis thumbnails
			copy ("$tempname", "$PicPathTemp");  
			
		    // Bilddaten ermitteln
			$size=getimagesize("$PicPathTemp"); 
		    $breite2=$size[0]; 
		    $hoehe2=$size[1];
			if($breite2 < "300" OR $hoehe2 < "225"){$fehler .= "<font color=\"#FF9900\" size=\"2\">Das Bild $i ist zu klein bitte wähle ein größers empfehlung(800 x 600 pixel)</font><br>";}
			else{
		    $size=getimagesize("$PicPathTemp"); 
		    $breite=$size[0]; 
		    $hoehe=$size[1];
			
		         $neueHoehe1=intval($hoehe*$neueBreite1/$breite);
			if($neueHoehe1 > "75"){$neueHoehe1="75";
			$neueBreite1=intval($breite*$neueHoehe1/$hoehe);}
			
			$neueHoehe2=intval($hoehe*$neueBreite2/$breite);
			if($neueHoehe2 > "225"){$neueHoehe2="225";
			$neueBreite2=intval($breite*$neueHoehe2/$hoehe);}
####################################################################################################
	        if($breite>=$neueBreite1)
	        {
	           		if($size[2]==2) 
		       		{ 
	           		// JPG 
	          		$altesBild=ImageCreateFromJPEG("$PicPathTemp"); 
	           		$neuesBild=imagecreatetruecolor($neueBreite1,$neueHoehe1); 
	           		imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite1,$neueHoehe1,$breite,$hoehe); 
	           		ImageJPEG($neuesBild,"$PicPathThumbnail", 90); 
	         		}
	        }
			if($breite>=$neueBreite2)
	        {
	           		if($size[2]==2) 
		       		{ 
	           		// JPG 
	          		$altesBild=ImageCreateFromJPEG("$PicPathTemp"); 
	           		$neuesBild=imagecreatetruecolor($neueBreite2,$neueHoehe2); 
	           		imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite2,$neueHoehe2,$breite,$hoehe); 
	           		ImageJPEG($neuesBild,"$PicPathThumbnail", 90); 
	         		}
	        }
		   }			
			unlink ("$PicPathTemp"); // Löscht das originalbild.
	     }
    }
 
Du mußt die unkomprimierte Größe der Bilder betrachten, nicht die komprimierte, wenn du sie als JPEG o.ä. hochlädst und bearbeitest (Thumbnailerstellung ist Bearbeitung).
Beispiel:
1024*768: ca. 2,3 MB unkomprimiert
1600*1200: ca. 5,6 MB unkomprimiert
(je bei einer angenommenen Farbtiefe von 24 Bit)
Im übrigen scheint deine Kommataste defekt zu sein..
 
Ja Sorry, wegen meiner Kommataste, ich schreibe immer recht schnell, das ist halt nun mal so, ich werde versuchen mich zu bessern, versprochen.

Ok, du meinst es liegt an der Dateigröße da diese also zu groß sei.
Aber wie kann jetzt jemand festellen wie groß sein Bild unkomprimiert ist.
Weil nachschaun wie groß ein *.jpeg ist das kann ja jeder.
Gibt es da einen Rechenweg oder ähnliches?
 
Da gibt es eine ganz einfache Formel: Breite * Höhe * Farbtiefe.
Dazu kommt dann noch der andere Speicherverbrauch des Scriptes selbst.
 
Ok wie kann ich das jetzt am besten lösen, denn ich kann ja nicht jedem der ein Bild
hochladen will erst Breite * Höhe * Farbtiefe ausrechen lassen und wenn dann dieser Wert
meine allowed memory size nicht überschreitet, das Bild hochladen lassen oder? :confused:
 
Zurück